什么是过拟合?
- 举一个线性回归的例子:
第一个模型是一个线性模型,欠拟合、高偏差,不能很好地适应我们的训练集。而第三个模型是一个四次方的模型,过于强调拟合训练集,而丢失了算法的本质:预测新数据。他是过拟合、高方差的,当我们将其用于测试集时他的表现往往不好,即训练出来的模型泛化能力差。第二个模型似乎就比较合适了。 - 分类问题中同样有过拟合问题:
图中的线就是决策边界,即 X T θ = 0 X^T\theta=0 XTθ=0,他将数据集划分成了两部分。 X 1 X_1 X1的阶次越高,对数据集的拟合程度就越好,相应的预测能力将变差。左边的图就是欠拟合,右边的图就是过拟合,中间的图看起来就比较合适了。
如何处理过拟合?
- 一般有两种思路:
- 丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来辅助选择(例如PCA降维、神经网络的dropout机制)
- 正则化。 保留所有的特征,但是减小参数 θ \theta θ的大小(magnitude),确保所有的特征对于预测都有贡献。
正则化-增加惩罚项
- 通过上面的例子,我们可以看出来,导致过拟合出现的就是那些高阶的项,如果我们将高阶项 x 4 x^4 x4的系数 θ j \theta_j θj降低,就能够减缓过拟合的现象,所以正则化的基本方法就是:一定程度上减小这些参数 θ \theta θ的值。目的就是限制参数过多或者过大,避免模型更加复杂。
- 假如我们有非常多的特征,我们并不知道其中哪些特征我们要惩罚,我们将对所有的特征进行惩罚,并且让代价函数最优化程序来选择这些惩罚的程度。注:根据惯例,不对 θ 0 \theta_0 θ0进行惩罚(吴恩达的说法)
- 以线性模型为例: J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ R ( θ ) , 其 中 R ( θ ) 为 正 则 化 项 , λ 为 正 则 化 参 数 ( 惩 罚 系 数 ) J\left(\theta\right)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda R(\theta),其中R(\theta)为正则化项,\lambda为正则化参数(惩罚系数) J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2+λR(θ),其中R(θ)为正则化项,λ为正则化参数(惩罚系数)正则化处理的模型与原模型的对比可能如下图所示:
- 蓝色的线为原来的过拟合模型,经过正则化(一个合适的正则化系数)后得到的比较理想的模型将会像粉色的线条一样。但是如果我们选择的 λ \lambda λ比较大,则会把所有参数都最小化了,导致模型变成一条直线,就像红色的线条那样,这样就变成欠拟合了。
- 为什么增加一项 λ R ( θ ) \lambda R(\theta) λR(θ)就会使 θ \theta θ的值变小呢?因为如果我们让 λ \lambda λ比较大的话,目标函数要尽量的小,结果就是所有的 θ \theta θ都会一定程度的减小, θ \theta θ的波动范围也变得比较小。当然如果 λ \lambda λ选的过大了又会导致欠拟合,选择过小则不能改善过拟合的状态,所以我们需要选择一个合理的 λ \lambda λ。
- 对问题2的另一种解释:增加一项 λ R ( θ ) \lambda R(\theta) λR(θ)后,最小化目标函数就不能随意的取参数 θ \theta θ的值了。比如,某一很大的 θ \theta θ确实能够使得目标函数前面的部分的取值很小,但是因为 λ R ( θ ) \lambda R(\theta) λR(θ)会很大,而最终组合起来的目标函数并不小,反而很大。于是要使得总的目标函数很小,参数 θ \theta θ就不能随意取多大的值了。其实就相当于 R ( θ ) < C R(\theta)<C R