机器学习(2)回归

0.前提

上一期,我们简单的介绍了一些有关机器学习的内容。学习机器学习的最终目的是为了服务我未来的毕设选择之一——智能小车,所以其实大家完全可以根据自己的需求来学习这门课,我做完另一辆小车后打算花点时间去进行一次徒步行,回来就开始专心积累底层知识了(回归轻松时刻,去考试,本来预期是一个学期更新大概25篇文章的,现在看其实已经完全超过预期了)。

1.线性回归

1.线性回归的概念

线性回归:一种通过属性的线性组合来进行预测的线性模型,其目的是找到一条直线或者一个平面或者更高维的超平面,使得预测值与真实值之间的误差最小化。

如图为单变量的线性回归,蓝点为真实数据,红点为预测数据,红点与红线重合度越高,数据拟合的效果越好。

2.符号定义

·m代表训练集中样本的数量

·n代表特征的数量

·x代表特征/输入变量

·y代表目标变量/输出变量

·(x,y)代表训练集中的样本

·(x^{(i)},y^{(i)})代表第i个观察样本

·h代表学习算法的解决方案或函数也称为假设

·\widehat{y}=h(x)代表预测值

·x^{(i)}是特征矩阵中的第i行,是向量

·x_{j}^{(i)}是代表特征矩阵中第i行的第j个特征

3.算法流程

h(x)=w_{0}+w_{1}x_{1}+w_{2}x_{2}+...+w_{n}x_{n}

·损失函数:度量样本预测的错误程度,损失函数值越小,模型就越好。常用的损失函数包括:0-1损失函数、平方损失函数、绝对损失函数、对数损失函数等;损失函数采用平方和损失:l(x^{(i)})=\frac{1}{2}(h(x^{(i)})-y^{(i)})^{2},损失函数的1/2是为了便于计算,使对平方项求导后的常数系数为1。

·代价函数:也称成本函数,度量全部样本集的平均误差。常用的代价函数包括均方误差、均方根误差、平均绝对误差等;残差平方和:J(w)=\frac{1}{2}\sum_{i=1}^{m}(h(x^{(i)})-y^{(i)})^{2}

·目标函数:代价函数和正则化函数,最终要优化的函数。

4.线性回归求解

求解 :min\frac{1}{2}\sum_{i=1}^{m}(h(x^{(i)})-y^{(i)})^{2}的一组w,常见的求残差平方和最小的方法为最小二乘法和梯度下降法。

2.最小二乘法(LSM)

·其实就是求\frac{\partial J(w)}{\partial w}最小

·将向量表达形式转为矩阵表达形式,J(w)=\frac{1}{2}(Xw-Y)^{2},X为mn+1列的矩阵(m为样本个数,n为特征个数),wn+1行1列的矩阵(包含了w_{0}),Y为m行1列的矩阵:
J(w)=\frac{1}{2}(Xw-Y)^{2}=J(w)=\frac{1}{2}(Xw-Y)^{T}(Xw-Y)
·J(w)求偏导:
\frac{\partial J(w)}{\partial w}=\frac{1}{2}\frac{\partial (Xw-Y)^{T}(Xw-Y)}{\partial w}=X^{T}Xw-X^{T}Y
·结果:
w=(X^{T}X)^{^{-1}}X^{T}Y

3.梯度下降

梯度下降有3种形式:批量梯度下降、随机梯度下降、小批量梯度下降。

1.批量梯度下降(BGD)

批量梯度下降:梯度下降的每一步中,都用到了所有的训练样本。

参数更新:w_{j}:=w_{j}-\alpha \frac{1}{m}\sum_{i=1}^{m}((h(x^{(i)})-y^{(i)})·x_{j}^{(i)}) (同步更新w_{j}(j=0,1,...,n)),\alpha代表学习率,(h(x^{(i)})-y^{(i)})·x_{j}^{(i)}代表梯度。

2.随机梯度下降(SGD)

随机梯度下降:梯度下降的每一步中,用到一个样本,在每一次计算后更新参数,而不需要将所有的训练集求和。

参数更新:w_{j}:=w_{j}-\alpha((h(x^{(i)})-y^{(i)})·x_{j}^{(i)})(同步更新w_{j}(j=0,1,...,n)

3.小批量梯度下降(MBGD)

梯度下降的每一步,用到一定批量的训练样本,每计算常数𝑏次训练实例,更新一次参数 w
参数更新:w_{j}:=w_{j}-\alpha \frac{1}{b}\sum_{k=i}^{i+b-1}((h(x^{(k)})-y^{(k)})·x_{j}^{(k)})(同步更新 w_{j}(j=0,1,...,n)),当b=1时是随机梯度下降,b=m时是批量梯度下降,b=2的指数倍数(常见32、64、128等)时为小批量梯度下降

4.梯度下降与最下二乘法的比较

1.梯度下降

需要选择学习率\alpha,要多次迭代,当特征数量n较大时能较好适用,适用各种类型的模型。

2.最小二乘法

不需要选择学习率\alpha,一次计算得出,需要计算(X^{T}X)^{-1},如果特征数量n较大则运算代价大,因为矩阵逆得计算时间复杂度为0(n^{3}),一般当n小于10000时可以接受,只适用于线性模型,不适合逻辑回归等其他模型。

5.数据归一化/标准化

1.作用

标准化/归一化可以提升模型精度和加速模型收敛。

2.归一化(最大-最小规范化)

x^{*}=\frac{x-x_{min}}{x_{max}-x_{min}},将数据映射到[0,1]区间,数据归一化的目的是使得各特征对目标变量得影响一致,会将特征数据进行伸缩变化,所以数据归一化是会改变特征数据分布的。

3.Z-Score标准化

x^{*}=\frac{x-\mu }{\sigma },其中\sigma ^{2}=\frac{1}{m}\sum_{i=1}^{m}(x^{(i)}-\mu )^{2},\mu =\frac{1}{m}\sum_{i=1}^{m}x^{(i)},处理后的数据均值为0,方差为1,数据标准化为了不同特征间具备可比性,经过标准化变换后的特征数据分布没有改变,当数据特征取值范围或单位差异较大时,最好做标准化处理。

4.是否需要做数据归一化/标准化

1.需要

线性模型,如基于距离度量的模型包括KNN(K近邻)、K-means聚类、感知机和SVM。另外,线性回归类的几个模型一般情况下也是需要做数据归一化/标准化处理的。

2.不需要
决策树、基于决策树的Boosting和Bagging等集成学习模型对于特征取值大小并不敏感,如随机森林、XGBoost、LightGBM等树模型,以及朴素贝叶斯,以上这些模型一般不需要做数据归一化/标准化处理。

6.正则化

1.拟合

注释:拟合就好比成绩与刷题量之间的关系:欠拟合就是你刷题量特别少,考试得到的分数比你想象中的要低,这就说明欠拟合了;过拟合就是你知道刷题能提高成绩,然后一天16个小时都在刷题,是的你成绩变高了,但是你只是读了万卷书没能行万里路,这就是过拟合了;正合适就是,你刷了一定量的题,成绩不错,同时你也行了万里路,这就是正合适。

2.处理过拟合

1.获取更多的训练数据

使用更多的数据能有效解决过拟合,更多的数据样本能让模型学习更多更有效的特征,减少噪声影响。

2.降维

丢弃一些偏差较大的样本特征,手动选择保留的特征,也可以使用一些模型选择算法。

3.正则化

保留所有特征,减少参数大小,可以改善或减少过拟合问题。

4.集成学习

将多个模型集成在一起,来降低单一模型的过拟合风险。

3.处理欠拟合

1.添加新特征

特征不足或者现有特征与样本标签相关性不强时,模型容易欠拟合。挖掘组合新特征,效果会有所改善。

2.增加模型复杂度

简单模型学习能力差,增加模型的复杂度可以使模型有更强的拟合能力。例如:线性模型中添加高次项,神经网咯模型中增加网络层数或神经元个数等。

3.减小正则化系数
正则化是用来防止过拟合的,但当模型出现欠拟合现象时,则需要有针对性地减小正则化系数。

4.正则化

·λ为正则化系数,调整正则化项与训练误差的比例,λ>0。

·1≥ρ≥0为比例系数,调整L1正则化与L2正则化的比例。

1.L1正则化

J(w)=\frac{1}{2}\sum_{i=1}^{m}(h(x^{(i)})-y^{(i)})^{2}+\lambda \sum_{j=1}^{n}|w_{j}|,(Lasso回归)

2.L2正则化

J(w)=\frac{1}{2}\sum_{i=1}^{m}(h(x^{(i)})-y^{(i)})^{2}+\lambda \sum_{j=1}^{n}w_{j}^{2},(岭回归)

3.Elastic Net

J(w)=\frac{1}{2}\sum_{i=1}^{m}(h(x^{(i)})-y^{(i)})^{2}+\lambda (\rho .\sum_{j=1}^{n}|w_{j}|+(1-\rho ).\sum_{j=i}^{n}w_{j}^{2}),(弹性网络)

7.回归的评价指标

y^{(i)}代表第i个样本的真实值;\widehat{y}^{(i)}代表第i个样本的预测值;m为样本个数。

1.均方误差(MSE)

MSE=\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-\widehat{y}^{(i)})^{2}

2.平均绝对误差(MAE)

MAE(y,\widehat{y})=\frac{1}{m}\sum_{i=1}^{m}|y^{(i)}-\widehat{y}^{(i)}|

3.均方跟误差(RMSE)

RMSE(y,\widehat{y})=\sqrt{\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}-\widehat{y}^{(i)})^{2}}

8.总结 

在这里我强烈推荐大家去看一下吴恩达老师的课程,非常感谢大佬能将老师的课程翻译过来,当然,少看中文翻译能更好的克服语言障碍。

 (强推|双字)2022吴恩达机器学习Deeplearning.ai课程_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/197944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++现代模板元编程

序 个人发现很多国外的大佬的演讲或者文章都很不错,但是鲜有人来进行分享,届后本人会时不时拿一些看起来很好的东西来给大家分享,主要也是搬运,不过也省去了大家去读英文的麻烦,同时文章中也会参杂着一些自己的见解。…

游戏mod制作--引擎与解包

摘要 游戏mod的制作过程第一步就是需要将原始的游戏工程文件进行解包,得到相应的资源文件(贴图,音频,事件,模型甚至源代码等),这个时候下一步就是需要将解包出来的文件进行分类索引&#xff0c…

服务器内存使用率高的原因及解决方法_Maizyun

服务器内存使用率高的原因及解决方法 在服务器运行过程中,内存使用率过高可能会引发一系列问题,如性能下降、应用程序崩溃等。本文将深入探讨服务器内存使用率高的原因,并提出相应的解决方法。 一、内存使用率高的原因 应用程序缺陷&#…

20:kotlin 类和对象 --泛型(Generics)

类可以有类型参数 class Box<T>(t: T) {var value t }要创建类实例&#xff0c;需提供类型参数 val box: Box<Int> Box<Int>(1)如果类型可以被推断出来&#xff0c;可以省略 val box Box(1)通配符 在JAVA泛型中有通配符?、? extends E、? super E&…

25. K 个一组翻转链表

给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值…

自媒体原创改写工具,自媒体首发改写软件

自媒体平台已成为许多创作者表达观点、分享知识和积累影响力的关键渠道。创作是需要技巧和经验的。本文将分享一些自媒体文章改写技巧&#xff0c;并推荐一系列优秀的自媒体文章改写工具&#xff0c;帮助您提升创作效率&#xff0c;创作出更优秀的文章。 自媒体文章改写技巧 …

Backend - Django makemigrations

目录 一、迁移命令 &#xff08;一&#xff09;前提 &#xff08;二&#xff09;生成迁移文件 &#xff08;三&#xff09;执行迁移 二、迁移问题 1. Error&#xff1a;No changes detected 2. Error&#xff1a;You are trying to add a non-nullable field XXX to XXX…

[读论文]BK-SDM: A Lightweight, Fast, and Cheap Version of Stable Diffusion

github: GitHub - Nota-NetsPresso/BK-SDM: A Compressed Stable Diffusion for Efficient Text-to-Image Generation [ICCV23 Demo] [ICML23 Workshop] ICML 2023 Workshop on ES-FoMo 简化方式 蒸馏方式&#xff08;训练Task蒸馏outKD-FeatKD&#xff09; 训练数据集 评测指标…

在intelliJ spring boot gradle插件3.2.0中未找到匹配的变量

我正在尝试使用spring启动Gradle插件的版本3.2.0。这是我的build.gradle文件&#xff1a; plugins {id javaid org.springframework.boot version 3.2.0id io.spring.dependency-management version 1.1.4 }group com.yaxin version 0.0.1-SNAPSHOTjava {sourceCompatibilit…

GPIO的使用--时钟使能含义--代码封装

目录 一、时钟使能的含义 1.为什么要时钟使能&#xff1f; 2.什么是时钟使能&#xff1f; 3.GPIO的使能信号&#xff1f; 二、代码封装 1.封装前完整代码 2.封装结构 封装后代码 led.c led.h key.c key.h main.c 一、时钟使能的含义 1.为什么要时钟使能&#xff1f…

Python开发运维:Python 3.8 常用标准库

目录 一、理论 1.Python3.8 标准库 2.常用标准库 二、问题 1.Python 正则表达式如何实现 一、理论 1.Python3.8 标准库 &#xff08;1&#xff09;官网 Python 标准库 — Python 3.8.17 文档 &#xff08;2&#xff09;其他版本下拉列表查询 2.常用标准库 &#xff0…

MySQL笔记-第01章_数据库概述

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第01章_数据库概述1. 为什么要使用数据库2. 数据库与数据库管理系统2.1 数据库的相关概念2.2 数据库与数据库管理系统的关系2.3 常见的数据库…

JVM参数配置推荐

JVM配置建议 参数 备注/参数释义 规范 JVM GC方法 ParallelGC&#xff1a;1.8默认&#xff0c;高吞吐量&#xff0c;响应时间不敏感 CMS&#xff1a;响应优先&#xff0c;堆内存8G以下优先选择 G1&#xff1a;响应优先&#xff0c;堆内存8G及以上选择 C端应用&#xff1a;…

微积分中值定理的双存在值证明问题@寻找辅助函数证明中值问题

文章目录 abstract微积分中值定理的双存在值证明题举例综合使用积分中值定理和微分中值定理例 双中值问题构造辅助函数法综合小结 abstract 微积分中值定理的双存在值证明问题寻找辅助函数证明中值问题 微积分中值定理的双存在值证明题举例 综合使用积分中值定理和微分中值定…

Linux--网络编程-ftp(TCP)网络通信-文件交互

项目要求&#xff1a;实现以下内容 远程控制&#xff1a; 1、查看服务器当前路径文件 ls 3、进入、退出服务器文件夹 cd 4、上传文件到服务器 put xxx 本地控制&#xff1a; 1、查看本地&#xff08;客户端&#xff09;文件 lls 2、进入客户端文件夹 lcd 3、获取服务器的文件…

音频录制软件哪个好?帮助你找到最合适的一款

音频录制软件是日常工作、学习和创作中不可或缺的一部分。选择一个适合自己需求的录音软件对于确保音频质量和提高工作效率至关重要。可是您知道音频录制软件哪个好吗&#xff1f;本文将深入探讨两种常见的音频录制软件&#xff0c;通过详细的步骤指南&#xff0c;帮助您了解它…

编写Java应用程序,输出满足1+2+3+……+n<8888的最大正整数n。

源代码&#xff1a; public class Main { public static void main(String[] args) { int i 1; int sum 0; for(i 1;;i){ sum i; if (sum >8888) break; } System.out.println(i-1); } } 实验运行截图&#xff1a;

数组实现循环队列(新增一个空间)

目录 一、前言 1.如何实现循环&#xff1f; 2.如何判断队列为空&#xff1f; 3.如何判断队列为满&#xff1f; 二、循环队列的结构定义 三、循环队列的创建及其初始化 四、入队 五、出队 六、取队头元素 七、取队尾元素 八、判空 九、判满 十、销毁队列 一、前言 …

【滑动窗口】LeetCode2953:统计完全子字符串

作者推荐 [二分查找]LeetCode2040:两个有序数组的第 K 小乘积 本题其它解法 【离散差分】LeetCode2953:统计完全子字符串 题目 给你一个字符串 word 和一个整数 k 。 如果 word 的一个子字符串 s 满足以下条件&#xff0c;我们称它是 完全字符串&#xff1a; s 中每个字符…

深入理解:指针变量的解引用 与 加法运算

前言 指针变量的解引用和加法运算是非常高频的考点&#xff0c;也是难点&#xff0c;因为对初学者的不友好&#xff0c;这就导致了各大考试都很喜欢在这里出题&#xff0c;通常会伴随着强制类型转换、二维数组、数组指针等一起考查大家对指针的理解。但是不要怕&#xff0c;也许…