【机器学习】回归
文章目录
- 1. 如何训练回归问题
- 2. 泛化能力
- 3. 误差来源
- 4. 正则化
- 5. 交叉验证
1. 如何训练回归问题
第一步:定义模型
- 线性模型: y ^ = b + ∑ j w j x j \hat{y} = b + \sum_{j} w_j x_j y^=b+∑jwjxj
- 其中,( w ) 是权重,( b ) 是偏差。
第二步:确定损失函数
- 损失函数:实际值和预测值的差平方和
L = ∑ i = 1 n ( y ^ i − ( b + ∑ j w j x i j ) ) 2 L = \sum_{i=1}^{n} (\hat{y}_i - (b + \sum_{j} w_j x_{ij}))^2 L=i=1∑n(y^i−(b+j∑wjxij))2
第三步:寻找最好的函数
目的:
- 找到最好的函数,目的是找到参数 ( w ) 和 ( b ) 使损失函数最小。
方法:
- 梯度下降法
- 计算当前参数 ( w ) 和 ( b ) 的梯度。
- 分别对 ( w ) 和 ( b ) 计算偏导数。
- 更新参数:
w ′ = w − η ⋅ ∂ L ∂ w , b ′ = b − η ⋅ ∂ L ∂ b w' = w - \eta \cdot \frac{\partial L}{\partial w}, \quad b' = b - \eta \cdot \frac{\partial L}{\partial b} w′=w−η⋅∂w∂L,b′=b−η⋅∂b∂L
其中, η \eta η 是学习率。
说明:
- 线性模型没有局部最优解,但学习率选择会影响参数是否能跨过最优解。
2. 泛化能力
欠拟合
- 概念:没有训练到位,训练结果和测试结果都不好。
- 原因:迭代次数少,模型过于简单。
- 解决方法:引入新参数,提高模型复杂度。
- 特点:偏差大,方差小。
过拟合
- 概念:训练结果很好,但测试结果不好。
- 原因:为了迎合训练数据,引入高次项,导致模型过于复杂,曲线变得过于曲折。
- 权重影响模型的平滑度,方法影响的是上下平移。
- 解决方法:
- 增加训练数据,复杂模型更容易找到最好的函数。
- 人工降维,减少模型复杂度。
- 引入正则化参数,减小权重,使曲线平滑。
- 使用 Dropout 和 Early Stop 等技术。
- 特点:偏差小,方差大。
3. 误差来源
方差(Variance)
- 定义:训练结果与训练结果平均值之间的方差。
- 描述:反映了模型的抗扰动能力,训练结果的分散程度。
偏差(Bias)
- 定义:训练结果与真实值的偏差。
- 描述:刻画了模型的拟合能力,训练结果偏离正确结果的程度。
总结:
- 模型简单:
- Function set 小 → 方差小 → 偏差大 → 曲线平滑 → 欠拟合 → 通过调整模型复杂度解决。
- 模型复杂:
- Function set 大 → 方差大 → 偏差小 → 曲线陡峭 → 过拟合 → 通过正则化解决。
4. 正则化
目的
- 在最小化损失函数的同时,减小权重的值。
- 权重越小,曲线越平滑,输入变化对结果的影响较小。
- 控制权重的更新,减小模型复杂度。
实现方法:
- 在损失函数中加入正则化项: L reg = L + λ ∑ i w i 2 L_{\text{reg}} = L + \lambda \sum_{i} w_i^2 Lreg=L+λ∑iwi2
- 其中, λ \lambda λ 是正则化参数,控制权重的大小
- 因为要最小化Loss,所以权重也会被最小化
5. 交叉验证
定义:
- 交叉验证:划分训练集和测试集,模拟测试结果的不可预测性,避免过拟合。
目的:
- 使用验证集验证训练结果,并根据验证结果调整模型,确保泛化能力。
步骤:
- 将数据划分为训练集和验证集。
- 使用验证集模拟测试集,验证训练结果。
- 根据验证集上的表现调整模型。
- 使用整个训练集重新训练模型,得到最终的模型。
注意:
- 验证集调整后,不应根据测试集的结果再做调整,即便你忍不住。
相关文章:
【机器学习】回归
文章目录 1. 如何训练回归问题2. 泛化能力3. 误差来源4. 正则化5. 交叉验证 1. 如何训练回归问题 第一步:定义模型 线性模型: y ^ b ∑ j w j x j \hat{y} b \sum_{j} w_j x_j y^b∑jwjxj 其中,( w ) 是权重,( b )…...
Maven项目中不修改 pom.xml 状况下直接运行OpenRewrite的配方
在Java 的Maven项目中,可以在pom.xml 中配置插件用来运行OpenRewrite的Recipe,但是有一些场景是希望不修改pom.xml 文件就可以运行Recipe,比如: 因为不需要经常运行 OpenRewrite,所以不想在pom.xml 加入不常使用的插件…...
【翻译】Sora 系统卡-12月9日
Sora System ard | OpenAI 简介 Sora 概述 Sora 是 OpenAI 的视频生成模型,旨在接收文本、图像和视频输入并生成新视频作为输出。用户可以创建各种格式的分辨率高达 1080p(最长 20 秒)的视频,从文本生成新内容,或增强…...
如何在 Spring Boot 微服务中设置和管理多个数据库
在现代微服务架构中,通常需要与多个数据库交互的服务。这可能是由于各种原因,例如遗留系统集成、不同类型的数据存储需求,或者仅仅是为了优化性能。Spring Boot 具有灵活的配置和强大的数据访问库,可以轻松配置多个数据库。在本综…...
Ubuntu20.04安装Foxit Reader 福昕阅读器
Ubuntu20.04安装Foxit Reader 福昕阅读器 文章目录 Ubuntu20.04安装Foxit Reader 福昕阅读器 先更新一下源 sudo apt update sudo apt upgrade下载Foxit Reader的稳定版本 wget https://cdn01.foxitsoftware.com/pub/foxit/reader/desktop/linux/2.x/2.4/en_us/FoxitReader.e…...
学习threejs,THREE.CircleGeometry 二维平面圆形几何体
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.CircleGeometry 圆形…...
Tonghttpserver6.0.1.3 使用整理(by lqw)
文章目录 1.声明2.关于单机版控制台和集中管理控制台3.单机版控制台3.1安装,启动和查看授权信息3.2一些常见的使用问题(单机控制台)3.3之前使用的是nginx,现在要配nginx.conf上的配置,在THS上如何配置3.4如何配置密码过…...
redis开发与运维-redis0401-补充-redis流水线与Jedis执行流水线
文章目录 【README】【1】redis流水线Pipeline【1.1】redis流水线概念【1.2】redis流水线性能测试【1.2.1】使用流水线与未使用流水线的性能对比【1.2.2】使用流水线与redis原生批量命令的性能对比【1.2.3】流水线缺点 【1.3】Jedis客户端执行流水线【1.3.1】Jedis客户端执行流…...
OPPO Java面试题及参考答案
Java 语言的特点 Java 是一种面向对象的编程语言,它具有以下显著特点。 首先是简单性。Java 的语法相对简单,它摒弃了 C 和 C++ 语言中一些复杂的特性,比如指针操作。这使得程序员能够更专注于业务逻辑的实现,而不是陷入复杂的语法细节中。例如,Java 的内存管理是自动进行…...
Ubuntu 22.04 升级 24.04 问题记录
一台闲置笔记本使用的 ubuntu 还是 18.04,最近重新使用,发现版本过低,决定升级,于是完成了 18.04 -> 20.04 -> 22. 04 -> 24.04 的三连跳。 一、升级过程中黑屏 主要问题是在 22.04 升级到 24.04 过程中出现了黑屏仅剩…...
Java重要面试名词整理(五):Redis
文章目录 Redis高级命令Redis持久化RDB快照(snapshot)**AOF(append-only file)****Redis 4.0 混合持久化** 管道(Pipeline)**StringRedisTemplate与RedisTemplate详解**Redis集群方案gossip脑裂 Redis LuaR…...
单元测试中创建多个线程测试 ThreadLocal
单元测试中创建多个线程测试 ThreadLocal 在单元测试中,可以通过以下方式创建多个线程来测试 ThreadLocal 的行为。 目标 验证 ThreadLocal 在多线程环境下是否能正确隔离每个线程的数据。 实现步骤 定义需要测试的类 包含 ThreadLocal 对象的类,提供…...
iDP3复现代码数据预处理全流程(二)——vis_dataset.py
vis_dataset.py 主要作用在于点云数据的可视化,并可以做一些简单的预处理 关键参数基本都在 vis_dataset.sh 中定义了,需要改动的仅以下两点: 1. 点云图像保存位置,因为 dataset_path 被设置为了绝对路径,因此需要相…...
容器化部署服务全流程
系列文章目录 文章目录 系列文章目录前言一、什么是容器?二、如何安装docker三、如何写dockerfile四、如何启动服务五、常见命令总结总结 前言 这篇文章,主要目的是通过容器化技术简化应用程序的部署、运行和管理,提高开发、测试和生产环境…...
Flutter DragTarget拖拽控件详解
文章目录 1. DragTarget 控件的构造函数主要参数: 2. DragTarget 的工作原理3. 常见用法示例 1:实现一个简单的拖拽目标解释:示例 2:与 Draggable 结合使用解释: 4. DragTarget 的回调详解5. 总结 DragTarget 是 Flutt…...
操作系统动态分区分配算法-首次适应算法c语言实现
目录 一、算法原理 二、算法特点 1.优先利用低址空闲分区: 2.查找开销: 3.内存碎片: 三、内存回收四种情况 1.回收区上面(或后面)的分区是空闲分区: 2.回收区下面(或前面)的…...
mybatis-plus自动填充时间的配置类实现
mybatis-plus自动填充时间的配置类实现 在实际操作过程中,我们并不希望创建时间、修改时间这些来手动进行,而是希望通过自动化来完成,而mybatis-plus则也提供了自动填充功能来实现这一操作,接下来,就来了解一下mybatis…...
Vite内网ip访问,两种配置方式和修改端口号教程
目录 问题 两种解决方式 结果 总结 preview.host preview.port 问题 使用vite运行项目的时候,控制台会只出现127.0.0.1(localhost)本地地址访问项目。不可以通过公司内网ip访问,其他团队成员无法访问,这是因为没…...
【星海随笔】删除ceph
cephadm shell ceph osd set noout ceph osd set norecover ceph osd set norebalance ceph osd set nobackfill ceph osd set nodown ceph osd set pause参考文献: https://blog.csdn.net/lyf0327/article/details/90294011 systemctl stop ceph-osd.targetyum re…...
HarmonyOS NEXT实战:自定义封装多种样式导航栏组件
涉及知识点和装饰器 ComponentV2,Local, Builder,BuilderParam,Extend, Require ,Param,Event等第三方库:ZRouter ,如项目中本来就用了ZRouter路由库,案例中…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
