失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 机器学习:过拟合问题与其正则化解决

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

时间:2020-03-03 17:20:48

相关推荐

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

文章目录

什么是过拟合如何解决过拟合问题减少特征值数量正则化线性回归的正则化梯度下降Normal Equation逻辑回归的正则化梯度下降

什么是过拟合

过拟合指当我们设定的方程

y=θ0x0+θ1x1+⋯+θnxny=\theta_0x^0+\theta_1x^1+\cdots+\theta_nx^n y=θ0​x0+θ1​x1+⋯+θn​xn

中,参数θ\thetaθ的数目超过了我们实际需要的数目,此时虽然我们学习后得到的曲线代价函数J(θ)J(\theta)J(θ)值很小,甚至可以穿过数据集的每个点。但拟合出的曲线会因为他的高次性产生很多不必要的起伏弯折,从而使预测结果失真。

下图来自吴恩达机器学习:

在逻辑回归问题里也会有相似的问题:

如何解决过拟合问题

减少特征值数量

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

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

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

正则化

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

线性回归的正则化

在上面的例子中,过拟合的问题主要来源于高次项,是它们让我们的拟合曲线变的扭曲了。如果我们降低这些高次项参数的权值,这个高次曲线就会逐渐退化为低次曲线。所以我们将代价函数修改为

J(θ)=12m[∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθj2]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=1∑m​(hθ​(x(i))−y(i))2+λj=1∑n​θj2​]

由于在代价函数里添加了与参数值大小直接相关的项,所以在学习过程中算法就会尽量减小参数大小,从而达到我们降低参数权值的目的。注意这里的jjj是从1开始的,也就是说一般情况下我们并不会正则化θ0\theta_0θ0​。事实上,正则化θ0\theta_0θ0​与否对结果并没有什么影响。

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

梯度下降

对于θ0\theta_0θ0​,因为它并没有正则化,所以它的更新还是跟之前一样:

θ0:=θ0−α1m∑i=1m(hθ(x(i))−y(i))x0(i)\theta_0:=\theta_0-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)} θ0​:=θ0​−αm1​i=1∑m​(hθ​(x(i))−y(i))x0(i)​

对于其他参数,我们在上面的公式里再加一项正则项的求导结果即可:

θj:=θj−α[1m∑i=1m(hθ(x(i))−y(i))x0(i)+λmθj]:=θj(1−αλm)−α1m∑i=1m(hθ(x(i))−y(i))x0(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​−α[m1​i=1∑m​(hθ​(x(i))−y(i))x0(i)​+mλ​θj​]:=θj​(1−αmλ​)−αm1​i=1∑m​(hθ​(x(i))−y(i))x0(i)​

可以看出,使用正则化后,每次更新是在原梯度下降的基础上把θj\theta_jθj​压缩成1−αλm1-\alpha\frac{\lambda}{m}1−αmλ​倍(0<1−αλm<10<1-\alpha\frac{\lambda}{m}<10<1−αmλ​<1,大约0.990.990.99的样子)。

Normal Equation

在这篇博客里,我们已经推导了未正则化的Normal Equation表达式为

Θ=(XTX)−1XTYΘ=(X ^T X)^{−1} X^T Y Θ=(XTX)−1XTY

Normal Equation的思想就是直接求解偏导数为0的解,在正则化后,偏导数其实就多了一项λmθj\frac{\lambda}{m}\theta_jmλ​θj​,把这一项进去就可以得到正则化后的Normal Equation为

Θ=(XTX+λ[0⋯1⋯⋮1⋯⋮1⋮⋱⋮⋯1])−1XTY\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+λ⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​0⋮​1⋮​⋯1⋮​⋯1​⋯⋱⋯​⋮1​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​)−1XTY

在这里,正则化还有一个好处,加上了正则项之后,可以证明该矩阵一定是可逆的,解决了某些情况下XTXX^TXXTX不可逆的问题。

逻辑回归的正则化

与线性回归的正则化类似,我们也在代价函数中加上正则项,使代价函数变为

J(θ)=−1m∑i=1m[ylog⁡(hθ(x⃗))+(1−y)log⁡(1−hθ(x⃗))]+λ2m∑j=1nθj2J(\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(θ)=−m1​i=1∑m​[ylog(hθ​(x))+(1−y)log(1−hθ​(x))]+2mλ​j=1∑n​θj2​

从而让我们的算法更倾向于减小参数值的大小,使高次项的影响变小。

梯度下降

对于θ0\theta_0θ0​,因为它并没有正则化,所以它的更新还是跟之前一样:

θ0:=θ0−α1m∑i=1m(hθ(x(i))−y(i))x0(i)\theta_0:=\theta_0-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)} θ0​:=θ0​−αm1​i=1∑m​(hθ​(x(i))−y(i))x0(i)​

对于其他参数,我们在上面的公式里再加一项正则项的求导结果即可:

θj:=θj−α[1m∑i=1m(hθ(x(i))−y(i))xj(i)+λmθj]:=θj(1−αλm)−α1m∑i=1m(hθ(x(i))−y(i))xj(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​−α[m1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​+mλ​θj​]:=θj​(1−αmλ​)−αm1​i=1∑m​(hθ​(x(i))−y(i))xj(i)​

形式跟线性回归的梯度下降还是一样的,不过还是注意两个算法的hθh_\thetahθ​定义并不相同。

如果觉得《机器学习:过拟合问题与其正则化解决》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。