李宏毅机器学习(二) 回归
video link : https://www.bilibili.com/video/BV1Ht411g7Ef?p=3
回归定义和应用例子
回归定义
Regression 就是找到一个函数 function ,通过输入特征 x,输出一个数值 Scalar。
回归例子
- 气温预测:
- 输入:根据过去的天气数据(温度)。
- 输出:预测明天的温度。
- 推荐:
- 输入:用户的对物品的评分,物品之间的关系
- 输出:预测用户对目标item的评分。
- 学习成绩预测:
- 输入:同学过去一学年的成绩,课程信息
- 输出:预测同学本学期课程的得分。
- 视频观看时长预测:
- 输入:用户观看视频时长情况,视频信息。
- 输出:预测用户对某部视频的观看时长。
模型步骤
- step1:模型假设,选择模型框架(线性模型)
- step2:模型评估,如何判断众多模型的好坏(损失函数)
- step3:模型优化,如何筛选最优的模型(梯度下降)
Step 1:模型假设
一元线性模型(单个特征)
可以想象为一元一次方程,自变量为x(特征),应变量为y(预测结果),b为偏置,整个函数代表了一条直线,拟合能力有限,所以我们考虑增加自变量的个数(输入特征的个数)。
\(w\)和\(b\)的不同,方程有无数种可能, 直线也有无数根,最能拟合实际数据的只有一根。
二元线性模型(多个特征)
如果数据的分布不是一条直线,我们考虑增加特征,使得我们的方程更加复杂,进而更好的拟合直线。
整理后得到:
- \(x_i\) : 就是各种特征(feature),例如预测温度时可能会用到风速,时间,地理位置等。
- \(w_i\) : 各个特征的权重(weight),各个特征对结果的影响不一样,一般需要加权重以区分。
- \(b\) : 偏移量、偏置(bias),有时自变量和应变量并非一比一的关系,需要加偏置修正,例如温度的换算。
Step 2: 模型评估-损失函数
一元线性模型:
将特征输入模型,得到模型的预测值\(\hat{y}^{1}\),我们要知道我们模型的好坏,就需要将预测值和真实值进行对比。如何衡量两者之间的差距,我们就需要用到损失函数(loss function).
其中\(w\),\(b\)是变量,我们需要找到最优的\(w\)和\(b\)使得loss最小。

如图所示,图中每一个点都是一个\((w,b)\)的组合,颜色的深度代表将这个\((w,b)\)的组合带入损失函数,得到的损失值大小,颜色越深损失越小,可从图中看出X位置,损失最小。
Step 3: 最佳模型-梯度下降
单参数情景:
-
如何筛选最优的模型(参数w, b)
已知损失函数\(L(w, b) = \sum(\hat{y}-(b+w \cdot x))^2\),需要找出使得损失函数最小的参数组合\((w,b)\),也就是找出一个令结果最小的\(f^*\)。
\[\begin{aligned}f^{*} &= \arg \min \limits_{f} L(f)\\w^*, b^*&=\mathop\arg\min\limits_{w,b}L(w,b)\\&=\arg\min\limits_{w,b}\sum(\hat{y}^n-(b+w\cdot x))^2\end{aligned} \]对于一个参数\(w\)入手,定义\(w^* = \arg \min_{x} L(w)\),我们需要知道权重\(w\)对Loss的影响,\(w\)取多少时候,Loss最小。
- 我们可以穷举所有的\(w\),然后观察不同的\(w\)对应的Loss,从而找出使Loss最小的\(w\),但是这样效率太低了。
- 所以我们采用梯度下降的办法,计算Loss对\(w\)的偏导,代入\(w^0\),根据偏导修正现在的\(w\),修正的程度我们称为学习率,公式中为\(\eta\)。\(w^0\)是随机选取的,代表从这个\(w^0\)开始,向最优\(w^*\)靠近(迭代)
- 大致步骤:
- 步骤1:随机选取一个 \(w^0\)
- 步骤2:计算微分,也就是当前的斜率,根据斜率来判定移动的方向
- 大于0向右移动(增加w)
- 小于0向左移动(减少w)
- 步骤3:根据学习率移动
- 重复步骤2和步骤3,直到找到最低点
多参数情景:
- 计算偏导
- 根据偏导同时更新多个参数
多参数情景跟单参数类似:
- 计算多个参数的偏导
- 根据偏导同时更新多个参数
- 重复1-2步,直到符合要求
效果图:
-
Q:线性回归的梯度下降回收敛到局部最优值吗?
如图中所示,两条收敛路径最终导向的收敛点不同,左边的路径使得模型收敛于局部最优。
A:由于线性回归没有局部最优值,所以线性回归的梯度下降不会收敛到局部最优值。
优化模型
模型为一次,拟合能力不太够,结果显示模型并不能很好的拟合我们的数据,所以我们尝试加入高次式来拟合我们的数据。

加入二次项:
很明显的可以看出吗,模型的拟合能力变强了,error也减小了。
这里我们又提出一个新的问题:是不是能画出直线就是线性模型,各种复杂的曲线就是非线性模型? 其实还是线性模型,因为把\(x_{cp}^1=(x_{cp})^2\)看作一个特征,\(y = b + w_1·x_{cp} + w_2·x_{cp}^1\)其实就是线性模型。
过拟合问题
如果我们进一步加入更高次的式子,模型在训练集上的误差将逐渐降低,但在测试集上的误差将反弹。
- 训练集平均误差【15.4】【15.3】【14.9】【12.8】
- 测试集平均误差【18.4】【18.1】【28.8】【232.1】
加入3次:

加入4次:

加入5次:

在训练集上面表现更为优秀的模型,为什么在测试集上效果反而变差了?这就是模型在训练集上过拟合的问题。
对于Training Data而言,如图所示,每一个模型结果都是一个集合,5次模型\(\supseteq\) 4次模型\(\supseteq\) 3次模型,所以在5次模型里面找到的最佳模型,肯定不会比4次模型里面找到更差。
对于Test Data而言,并非在Training Data上Loss越小的模型,在Test Data上都能表现的更好。这样的现象称为过拟合。
我对过拟合的理解:模型很细致的学到了每一个样本的信息,但是并不是每一个样本都符合真实的分布情况,例如有些异常值会将模型引入奇怪的地方,模型拟合了这些异常值之后,对于正常值的预测就会出现较大的误差,这也就是为什么训练集的误差可以缩小到几乎忽略不计,但是测试集的误差反而大到离谱。
优化策略
- Step 1 优化:将多个线性模型合并到一个线性模型中(均值)
- Step 2 优化:如果希望模型更强大表现更好(加入更多参数,更多input)
- Step 3 优化:加入正则化

浙公网安备 33010602011771号