机器学习——过拟合问题(线性回归+逻辑斯特回归的正则化推导)

1.前言

前面已经推导过线性回归和逻辑斯特回归的梯度下降算法。

它们各自的梯度下降算法公式为:

  • 线性回归:
    hθ(x)=θ0x0+θ0x1+...+θnxnθj:=θjα1mi=1m(hθ(xj(i))y(i))xj(i)(1-1) h_{\theta}(x) = \theta_0 x_0 + \theta_0 x_1 + ... + \theta_n x_n \\ \theta_j := \theta_j - \alpha \frac{1}{m} \sum^{m}_{i=1} (h_{\theta}(x^{(i)}_j) - y^{(i)}) x^{(i)}_j \tag{1-1}
  • 逻辑斯特回归:
    hθ(x)=g(θ0x0+θ0x1+...+θnxn)θj:=θjα1mim(hθ(x(i))y(i))xj(i)(1-2) h_{\theta}(x) = g(\theta_0 x_0 + \theta_0 x_1 + ... + \theta_n x_n) \\ \theta_j:=\theta_j- \alpha \frac{1}{m} \sum_i^{m}(h_\theta(x^{(i)}) - y^{(i)})x^{(i)}_j \tag{1-2}
    其中gg为sigmoid函数

2.过拟合问题及其解决方法

机器学习——过拟合问题(线性回归+逻辑斯特回归的正则化推导)
如上图,左图展示了一个拟合曲线不能很好的拟合数据,这个现象被称为“欠拟合问题(underfitting)”;而最右图虽然能够很好的拟合数据,但是曲线过于复杂,当需要预测新数据时,可能会有偏差,这时候被称为“过拟合问题(overfitting)

2.1 拟合问题中偏差和方差

  • 偏差和方差
    评价数据拟合程度好坏,通常用代价函数JJ。如果只关注JtrainJ_{train}(训练集误差)的话,通常会导致过拟合,因此还需要关注JcvJ_{cv}(交叉验证集误差)。
  • 高偏差JtrainJ_{train}JcvJ_{cv}都很大,并且JtrainJcvJ_{train} \approx J_{cv}。对应欠拟合。
  • 高方差JtrainJ_{train}较小,JcvJ_{cv}远大于JtrainJ_{train}。对应过拟合。

如何理解高偏差和高方差?
(1)高偏差对应着欠拟合,此时JtrainJ_{train}也较大,可以理解为对任何新数据(不论其是否属于训练集),都有着较大的JcvJ_{cv}误差,偏离真实预测较大。

(2)高方差对应着过拟合,此时JtrainJ_{train}很小,对于新数据来说,如果其属性与训练集类似,它的JcvJ_{cv}就会小些,如果属性与训练集不同,JcvJ_{cv}就会很大,因此有一个比较大的波动,因此说是高方差。

机器学习——过拟合问题(线性回归+逻辑斯特回归的正则化推导)

就像打靶一样,偏差描述了我们的射击总体是否偏离了我们的目标,而方差描述了射击准不准。

对于 多项式回归,当次数选取较低时,我们的 训练集误差 和 交叉验证集误差 都会很大;当次数选择刚好时,训练集误差 和 交叉验证集误差 都很小;当次数过大时会产生过拟合,虽然 训练集误差 很小,但 交叉验证集误差 会很大( 关系图如下 )。

机器学习——过拟合问题(线性回归+逻辑斯特回归的正则化推导)
所以我们可以计算 Jtrain(θ)J_{train}(θ)Jcv(θ)J_{cv}(θ),如果他们同时很大的话,就是遇到了高偏差问题,而 Jcv(θ)J_{cv}(θ)Jtrain(θ)J_{train}(θ) 大很多的话,则是遇到了高方差问题。

2.2 正则化(regulization)

正则化主要是用来解决过拟合问题。

机器学习——过拟合问题(线性回归+逻辑斯特回归的正则化推导)
右图因为比左图增加了两个参数θ3\theta_3θ4\theta_4,所以造成了过拟合现象。而如果我们在最小化代价函数J(θ)J(\theta)的时候,也同时把θ3\theta_3θ4\theta_4缩小到近乎等于0,这时候就可以变为左图的曲线,从而解决过拟合问题。

实际上,最小化公式可以变为:
minθ12mim(hθ(x(i))y(i))2+λθ32+λθ42(2-1) \mathop{min} \limits_{\theta} \frac{1}{2m} \sum_i^{m}(h_\theta(x^{(i)}) - y^{(i)})^2 + \lambda \theta_3^2 + \lambda \theta_4^2 \tag{2-1}
这个公式在最小化代价函数的时候,也使得θ3\theta_3θ4\theta_4缩小到近乎等于0。

因为我们不知道哪个参数对模型有效果,所以可以把整体的参数都进行缩小,借鉴公式(2-1)可以把代价函数改写成:
J(θ)=12mim(hθ(x(i))y(i))2+λjnθj2(2-2) J(\theta) = \frac{1}{2m} \sum_i^{m}(h_\theta(x^{(i)}) - y^{(i)})^2 + \lambda \sum_j^{n} \theta_j^2 \tag{2-2}

  • 其中λ\lambda是用来平衡“原始代价函数的值”和“参数和”之间的关系。

2.3 线性回归的正则化

根据公式(2-2),当使用梯度下降算法更新参数θ\theta时,12mim(hθ(x(i))y(i))2\frac{1}{2m} \sum_i^{m}(h_\theta(x^{(i)}) - y^{(i)})^2θj\theta_j求偏导数还是和原来的一样,而λjnθj2\lambda \sum_j^{n} \theta_j^2θj\theta_j求偏导数:

λjnθj2θj=2λθjλθj(2-3) \frac{\partial \lambda \sum_j^{n} \theta_j^2}{\partial \theta_j} = 2 \lambda \theta_j \to \lambda \theta_j \tag{2-3}

  • 其中2可以融合到λ\lambda中.

最后公式(1-1)更新为:
hθ(x)=θ0x0+θ0x1+...+θnxnθj:=θjα[1mi=1m(hθ(xj(i))y(i))xj(i)+λθj](2-4) h_{\theta}(x) = \theta_0 x_0 + \theta_0 x_1 + ... + \theta_n x_n \\ \theta_j := \theta_j - \alpha [\frac{1}{m} \sum^{m}_{i=1} (h_{\theta}(x^{(i)}_j) - y^{(i)}) x^{(i)}_j + \lambda \theta_j] \tag{2-4}

2.4 逻辑斯特回归的正则化

同理,逻辑斯特回归加上正则项后,公式(1-2)更新为:
hθ(x)=g(θ0x0+θ0x1+...+θnxn)θj:=θjα[1mim(hθ(x(i))y(i))xj(i)+λθj](2-5) h_{\theta}(x) = g(\theta_0 x_0 + \theta_0 x_1 + ... + \theta_n x_n) \\ \theta_j:=\theta_j- \alpha [\frac{1}{m} \sum_i^{m}(h_\theta(x^{(i)}) - y^{(i)})x^{(i)}_j + \lambda \theta_j]\tag{2-5}