一、何为回归

  • 回归是一种预测性的建模技术,研究的是自变量与因变量之间的关系,通常使用曲线来拟合数据点,想要使得拟合曲线到各个数据点之间的误差总和最小。当达到一定预测精度后,就可以用该拟合曲线来代表该自变量与因变量之间的关系,并且可以用他来处理更多的输入。
  • 回归可以分为线性回归(Linear Regression)逻辑回归(Logistic Regression)。线性回归仅仅解决了回归的问题,而逻辑回归则可以解决分类的问题,比如二分类问题。

二、案例背景

  • 我们将使用李宏毅老师的案例做进一步的细化解释。玩过宝可梦的同学都知道,每只宝可梦进化后战斗力都会获得不同程度的提升,而进化则都需要付出一定的代价,所以我们要选择最有价值的宝可梦进化。
  • 因此我们用回归的方式研究宝可梦进化前后战斗力(Combat Power CP)的变化。输出y即为进化后的战斗力数值,而输入x我们先从单一变量进化前的CP值 x c p x_{cp} xcp开始研究,后续逐渐考虑多因素,比如宝可梦的血量HP x h p x_{hp} xhp,体重Weight,高度Height。

机器学习笔记——回归(Regression)

三、研究过程

1.选择模型

  • 模型选择我们从最基本的开始,考虑线性回归也就是构建多元一次的函数模型
  • 线性回归(Linear Regression)模型如下: y = b + Σ w i x i y=b + \Sigma w_ix_{i} y=b+Σwixi
  • 针对此案例,我们的 x i x_i xi可以取 x c p , x h p , x w , x h x_{cp},x_{hp},x_w,x_h xcp,xhp,xw,xh。但为了初步好理解,我们只考虑单元素输入,即初步模型定为:
  • y = b + w x c p y=b + wx_{cp} y=b+wxcp
  • 该模型代表了一组函数的集合,并且集合内函数的个数是无限的,因为一开始没有任何限定条件,b与w均可以取任意值。但我们也可以结合问题的实际情况做出初步的筛选,比如说参数值使y恒为负的我们可以不考虑。

2.衡量函数的好坏

  • 模型初步划定范围后,我们还是有无限的选择可能。那么我们就需要制定一个衡量函数优劣的标准,来指导我们进一步选定参数,确定函数。
  • 因此我们引入了**损失函数(Loss Function)**的概念。损失函数输入的是函数,输出的是该函数针对此问题到底有多糟糕。
  • 可以说损失函数L是关于模型函数f的函数,并且f又是关于两个参数w,b的函数,因此也可以说损失函数是用来衡量两个参数w与b的函数。
  • 我们用最简单的误差衡量方式:平方和来构建损失函数
    L ( f ) = ∑ n = 1 10 ( y n − f ( x c p n ) ) 2 L(f)=\sum_{n=1}^{10} {(y^n-f(x^n_{cp}))^2} Lf=n=110(ynf(xcpn))2
    其中 y n y^n yn表示第n个数据的实际y值, f ( x c p n ) f(x^n_{cp}) f(xcpn)表示根据模型计算出的预测y值。两个y值之间的差便可以表征该模型函数的优劣。
  • L ( w , b ) = ∑ n = 1 10 ( y n − ( b + w x c p n ) ) 2 L(w,b)=\sum_{n=1}^{10} {(y^n-(b+wx^n_{cp}))^2} Lw,b=n=110(yn(b+wxcpn))2
  • 下图中每一个点代表了一组b与w的组合,也就是代表了一个模型函数的选择。颜色从红到蓝代表了该函数的拟合程度从差到优的过程。
    机器学习笔记——回归(Regression)

3.选择最优的函数

  • 既然我们已经有了衡量函数优劣的标准,那么我们就可以根据这个标准来选择我们想要的函数。
    f ∗ = a r g m i n f L ( f ) f^*=arg {min}_fL(f) f=argminfL(f)
    该函数表达的意思是,寻找一个使L(f)最小的函数f。
    w ∗ , b ∗ = a r g m i n w , b L ( w , b ) = a r g m i n w , b ∑ n = 1 10 ( y n − ( b + w x c p n ) ) 2 w^*,b^*=arg {min}_{w,b}L(w,b)=argmin_{w,b}\sum_{n=1}^{10} {(y^n-(b+wx^n_{cp}))^2} w,b=argminw,bL(w,b)=argminw,bn=110(yn(b+wxcpn))2
    该函数表达的意思是,寻找一对w,b使得L(w,b)最小,也就是我们常说的寻找最优的参数
    注:表达式中的arg是指反函数的意思。正向的函数是通过函数确定参数的值,这里指的是寻找满足一定条件的函数。
  • 我们知道了要去寻找使L(f)最小的f或者是使L(w,b)最小的(w,b),那么到底如何寻找呢?无限的寻找范围,我们难不成要挨个去试?
  • 显然是不可能的,我们通过**梯度下降(Gradient Descent)**的方法来寻找最优参数。

4.梯度下降(Gradient Descent)

4.1单变量梯度下降

  • 我们首先由单变量损失函数为二次曲线为例初步了解梯度下降,梯度下降方法的大体步骤如下:
    机器学习笔记——回归(Regression)

1.画出损失函数(Loss Function)的图像。
2.选定一个初始位置 w 0 w^0 w0,初始位置有多种确定方法。
3.计算 d L d w ∣ w = w 0 \left. \frac{dL}{dw} \right|_{w=w^0} dwdLw=w0的值。也就是该曲线在 w 0 w^0 w0位置的微分。
4.使得 w 1 = w 0 − η d L d w ∣ w = w 0 w^1=w^0-\eta\left. \frac{dL}{dw} \right|_{w=w^0} w1=w0ηdwdLw=w0。得到下一个点,也就是说移动了一步。
5.重复3-4步骤直到微分为0,点不再移动为止。

  • 有关梯度下降算法的细节解释如下:
  • 我们的目的在于获得更小的L值,也就是说想让点移动到局部最小值(极小值)和全局最小值(最小值)。有关二者的区别下一节详细叙述。
  • 对于单变量输入,我们的梯度也就是在该点的切线斜率。当斜率为负时,L值左大右小,因此应该向右移动,w需要变大。我们发现w的变化总是逆梯度变化,因此我们的公式中永远有负号。
  • 公式中的 η \eta η我们称之为学习率(Learning rate),它的含义是决定每次移动时移动的步幅大小。

4.2双变量梯度下降

单变量的情形过于简单,应用的范围很窄。那么我们延申考虑一下双变量的梯度下降。

  • w ∗ , b ∗ = a r g m i n w , b L ( w , b ) w^*,b^*=arg min_{w,b}L(w,b) w,b=argminw,bL(w,b)我们假设有两个参数w,b决定该函数的优劣程度。
  • 分别计算 ∂ L ∂ w ∣ w = w 0 , b = b 0 \left. \frac{\partial L}{\partial w} \right|_{w=w^0,b=b^0} wLw=w0,b=b0, ∂ L ∂ b ∣ w = w 0 , b = b 0 \left. \frac{\partial L}{\partial b} \right|_{w=w^0,b=b^0} bLw=w0,b=b0
  • w 1 = w 0 − η ∂ L ∂ w ∣ w = w 0 , b = b 0 w^1=w^0-\eta\left. \frac{\partial L}{\partial w} \right|_{w=w^0,b=b^0} w1=w0ηwLw=w0,b=b0
  • b 1 = b 0 − η ∂ L ∂ b ∣ w = w 0 , b = b 0 b^1=b^0-\eta\left. \frac{\partial L}{\partial b} \right|_{w=w^0,b=b^0} b1=b0ηbLw=w0,b=b0
  • 继续重复以上步骤两个参数分开计算。
    机器学习笔记——回归(Regression)
  • 两个参数的损失函数图像已经成了三维图像,由横纵坐标确定一个点对应一个高度然后就可以画出如图所示的等高线图。如图所示就可以理解为一个向下凹陷的山谷。
  • 那么问题来了,我们选定初位置都会顺势滑入其最近的凹陷中。那么我们选定初位置的不同是不是也会影响我们参数选择的结果?也就是如图所示,损失函数图像中有多个向下凹陷的山谷。也即是说会掉入我们的local minima。
    机器学习笔记——回归(Regression)

4.3偏微分的求解方法

  • 单变量的梯度下降就是我们常见的求导求切线斜率,那么双变量的梯度下降则是偏微分的求解。
  • 偏微分的求解方法就是:把另一个参数当作常数,然后对目标参数求导即可。

5.拟合分析

  • 经过梯度下降分析后我们获得了当前函数范围内最优的函数(或者说是最优的参数)。这个函数是我们通过训练数据得到的最优,那么我们再找一组数据组成测试数据是否还会最优呢?

  • 我们把测试数据的所有数据点画在坐标图上,然后画上我们计算得到的函数曲线,去计算每个测试数据点与预测结果之间的差距。

  • 针对模型: y = b + w x c p y=b+wx_{cp} y=b+wxcp
    Average Error on Training Data = 31.9
    Average Error on Testing Data = 35.0
    我们机器学习生成模型的目的是为了用此模型来处理更多的数据,因此Testing Data的误差会更关键一点。
    无论是训练误差还是测试误差都比较大,那是不是我们的模型过于简单了?

  • 针对模型: y = b + w 1 x c p + w 2 ( x c p ) 2 y=b+w_1x_{cp}+w_2(x_{cp})^2 y=b+w1xcp+w2(xcp)2
    Average Error on Training Data = 15.3
    Average Error on Testing Data = 18.1

  • 针对模型: y = b + w 1 x c p + w 2 ( x c p ) 2 + w 3 ( x c p ) 3 + w 4 ( x c p ) 4 y=b+w_1x_{cp}+w_2(x_{cp})^2+w_3(x_{cp})^3+w_4(x_{cp})^4 y=b+w1xcp+w2(xcp)2+w3(xcp)3+w4(xcp)4
    Average Error on Training Data = 14.9
    Average Error on Testing Data = 28.8
    训练集的误差确实再次减小,但是测试集的误差却反常的增大。这里就已经出现了**过拟合(Overfitting)**的现象。次数越高的函数模型模仿能力越强,而我们的训练集比较小无法代表全体数据集的特点。因此次数越高的函数模型越贴近于局部而片面的训练集,而不会贴合随机的测试集。

  • 为什么随着函数次数越高,我们训练集的误差确实越来越小呢?
    机器学习笔记——回归(Regression)

  • 其实我们模型的选择就是给我们函数的选择框定一个范围,更高的次数的函数范围会包含低次数的函数范围(因为把高次项系数置为0即可转换)。

  • 更大的范围当然会搜索出更精确的答案,这也就解释了为什么随着模型次数的增加,训练误差越来越小。

  • 得出结论:更复杂的函数模型选择一定会使训练误差越来越小。但并不一定会使测试误差越来越小,可能还会适得其反。

6.其他因素

6.1物种考虑

机器学习笔记——回归(Regression)
分析上述训练数据可以看出,好像数据并不呈现单一关系,而是有明显的聚集趋势。因此我们考虑可能不同物种呈现不一样的规律。
机器学习笔记——回归(Regression)
以上关系我们可以用If的形式实现,但为了统一成一个函数,我们使用了以上的结构。上面用到的 δ \delta δ函数实现了物种的选择。该函数看似复杂其实还是线性模型,只不过代表了多条直线组成的直线簇。

6.2其他因素

除此之外我们还可以把 x h p 、 x w 、 x h x_{hp}、x_{w}、x_{h} xhpxwxh等多个因素都考虑进来,得到一个多输入二次的函数模型。
机器学习笔记——回归(Regression)
结果经过测试得到:
Training Error = 1.9;Testing Error = 102.3
训练误差已经很小了,考虑到二次与多因素的问题。但是测试误差出奇地大,说明过拟合的程度已经很深了。

6.3过拟合的处理——正则化(Regularization)

  • 考虑了高次数与多因素后的函数模型出现了严重的过拟合现象,为了缓和该现象我们引入了正则化(Regularization)的机制,保留所有的特征与考虑的因素,但是减少参数的大小,也就是减少这些因素的影响能力。
  • 我们将损失函数模型调整为:
    机器学习笔记——回归(Regression)
  • 为了使损失函数L更小,我们会贪心地想让后面添加的部分接近于0.也就是让前面输入变量的参数接近于0,让这些输入因素的影响力变小,也就是让整条曲线变得更平滑,参数更小相同的输入改变输出改变就更小。
  • λ \lambda λ则代表了让参数接近于0的意愿强弱。该参数又不可以过分的小,即函数曲线不可以过分平滑。
  • 另外我们不需要也让b(bias)接近于0,因为b的值跟函数曲线的平滑程度无关,只是上下平移而已。

相关文章:

  • 2021-12-23
  • 2022-01-08
  • 2021-10-11
  • 2021-11-14
  • 2021-08-14
  • 2021-07-02
  • 2021-11-25
  • 2021-11-13
猜你喜欢
  • 2021-09-05
  • 2021-10-20
  • 2022-01-05
  • 2021-05-29
  • 2021-09-30
  • 2021-11-25
  • 2021-08-25
相关资源
相似解决方案