机器学习:过拟合问题与其正则化解决

什么是过拟合

过拟合指当我们设定的方程
y = θ 0 x 0 + θ 1 x 1 + ⋯ + θ n x n y=\theta_0x^0+\theta_1x^1+\cdots+\theta_nx^n y=θ0x0+θ1x1++θnxn
中,参数 θ \theta θ的数目超过了我们实际需要的数目,此时虽然我们学习后得到的曲线代价函数 J ( θ ) J(\theta) J(θ)值很小,甚至可以穿过数据集的每个点。但拟合出的曲线会因为他的高次性产生很多不必要的起伏弯折,从而使预测结果失真。

下图来自吴恩达机器学习:
在这里插入图片描述
在逻辑回归问题里也会有相似的问题:
在这里插入图片描述

如何解决过拟合问题

减少特征值数量

一种是通过人来判断应该删掉什么特征值,配合数据可视化等方法,我们可以对应该用什么式子去拟合数据有个大概的估计。不过在特征值很多的情况下,这样的方法很难实现。

还有一种就是通过算法选择了,这个算法暂时不会在本篇博客中讨论。

缺点就是剔除部分特征值后,相应的信息就损失了,如果我们想尽可能完整地保留采集到的数据,这个方法就显得不那么好了。

正则化

正则化可以保留所有特征值,但是降低了参数 θ \theta θ的大小。在样本有很多特征值且每个特征值都会做出一点贡献时非常有效。

线性回归的正则化

在上面的例子中,过拟合的问题主要来源于高次项,是它们让我们的拟合曲线变的扭曲了。如果我们降低这些高次项参数的权值,这个高次曲线就会逐渐退化为低次曲线。所以我们将代价函数修改为
J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] J(\theta)=\frac{1}{2m}\left[\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2+\lambda\sum_{j=1}^n\theta_j^2 \right] J(θ)=2m1[i=1m(hθ(x(i))y(i))2+λj=1nθj2]
由于在代价函数里添加了与参数值大小直接相关的项,所以在学习过程中算法就会尽量减小参数大小,从而达到我们降低参数权值的目的。注意这里的 j j j是从1开始的,也就是说一般情况下我们并不会正则化 θ 0 \theta_0 θ0。事实上,正则化 θ 0 \theta_0 θ0与否对结果并没有什么影响。

其中, λ \lambda λ为正则化参数,作用为平衡对训练集的拟合程度与参数大小,使得学习结果的更加合理。所以 λ \lambda λ的设置对于避免过拟合至关重要,除了人工调整,当然也有算法可以自动地选择 λ \lambda λ,不过这些内容不会出现在本篇博客。

梯度下降

对于 θ 0 \theta_0 θ0,因为它并没有正则化,所以它的更新还是跟之前一样:
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) \theta_0:=\theta_0-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)} θ0:=θ0αm1i=1m(hθ(x(i))y(i))x0(i)
对于其他参数,我们在上面的公式里再加一项正则项的求导结果即可:
θ j : = θ j − α [ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) + λ m θ j ] : = θ j ( 1 − α λ m ) − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) \theta_j:=\theta_j-\alpha\left[\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)}+\frac{\lambda}{m}\theta_j \right]\\ :=\theta_j(1-\alpha\frac{\lambda}{m})-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)} θj:=θjα[m1i=1m(hθ(x(i))y(i))x0(i)+mλθj]:=θj(1αmλ)αm1i=1m(hθ(x(i))y(i))x0(i)
可以看出,使用正则化后,每次更新是在原梯度下降的基础上把 θ j \theta_j θj压缩成 1 − α λ m 1-\alpha\frac{\lambda}{m} 1αmλ倍( 0 < 1 − α λ m < 1 0<1-\alpha\frac{\lambda}{m}<1 0<1αmλ<1,大约 0.99 0.99 0.99的样子)。

Normal Equation

这篇博客里,我们已经推导了未正则化的Normal Equation表达式为
Θ = ( X T X ) − 1 X T Y Θ=(X ^T X)^{−1} X^T Y Θ=(XTX)1XTY
Normal Equation的思想就是直接求解偏导数为0的解,在正则化后,偏导数其实就多了一项 λ m θ j \frac{\lambda}{m}\theta_j mλθj,把这一项进去就可以得到正则化后的Normal Equation为
Θ = ( X T X + λ [ 0 ⋯ 1 ⋯ ⋮ 1 ⋯ ⋮ 1 ⋮ ⋱ ⋮ ⋯ 1 ] ) − 1 X T Y \Theta=(X ^T X+ \lambda\left[\begin{matrix} 0&&\cdots&&&\\ &1&&\cdots&&\\ \vdots&&1&&\cdots&\\ &\vdots&&1&&\\ &&\vdots&&\ddots&\vdots\\ &&&&\cdots&1\\ \end{matrix}\right] )^{−1} X^T Y Θ=(XTX+λ01111)1XTY
在这里,正则化还有一个好处,加上了正则项之后,可以证明该矩阵一定是可逆的,解决了某些情况下 X T X X^TX XTX不可逆的问题。

逻辑回归的正则化

与线性回归的正则化类似,我们也在代价函数中加上正则项,使代价函数变为
J ( θ ) = − 1 m ∑ i = 1 m [ y log ⁡ ( h θ ( x ⃗ ) ) + ( 1 − y ) log ⁡ ( 1 − h θ ( x ⃗ ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J(\theta)=-\frac{1}{m}\sum_{i=1}^m\left[y\log(h_\theta(\vec{x}))+(1-y)\log(1-h_\theta(\vec{x}))\right] +\frac{\lambda}{2m}\sum_{j=1}^n\theta_j^2 J(θ)=m1i=1m[ylog(hθ(x ))+(1y)log(1hθ(x ))]+2mλj=1nθj2
从而让我们的算法更倾向于减小参数值的大小,使高次项的影响变小。

梯度下降

对于 θ 0 \theta_0 θ0,因为它并没有正则化,所以它的更新还是跟之前一样:
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) \theta_0:=\theta_0-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)} θ0:=θ0αm1i=1m(hθ(x(i))y(i))x0(i)
对于其他参数,我们在上面的公式里再加一项正则项的求导结果即可:
θ j : = θ j − α [ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] : = θ j ( 1 − α λ m ) − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j:=\theta_j-\alpha\left[\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}+\frac{\lambda}{m}\theta_j \right]\\ :=\theta_j(1-\alpha\frac{\lambda}{m})-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} θj:=θjα[m1i=1m(hθ(x(i))y(i))xj(i)+mλθj]:=θj(1αmλ)αm1i=1m(hθ(x(i))y(i))xj(i)
形式跟线性回归的梯度下降还是一样的,不过还是注意两个算法的 h θ h_\theta hθ定义并不相同。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShadyPi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值