过拟合
上图展示了不同线性回归模型对训练集样本的拟合情况,可以发现,第一个模型是一条直线,不能很好的拟合训练集,这就是欠拟合(Underfitting)或者说模型是高偏差的(high bias)。第三个模型是一个高阶多项式,虽然对训练集拟合的很好,但它的特征过多,如果没有足够的数据约束,就不会有良好的泛化能力(泛化能力是指一个模型应用到新样本的能力,比如这里的新样本是指没有出现在训练集的样本),也就不能对新样本做出正确的预测,这就是过度拟合(Overfitting)或者说模型是高方差的(high varience)。第二个则是一个理想的模型。
过拟合问题会在特征过多的模型中出现, 虽然训练出的假设函数能很好的拟合训练数据,通过代价函数也能够得到很小的损失,但因为它要千方百计地拟合训练集,所以通常会是一个非常复杂的曲线,导致无法泛化到新样本中,从而无法对新样本做出正确的预测。不仅是线性回归,其他机器学习算法也都有可能面临过拟合问题,下图展示了逻辑回归模型中过拟合的情况:
通常来说过拟合的解决方法包括:
- 减少特征的个数
- 使用正则化,减少参数的权重
- 增加数据量
正则化
通常过拟合是由于模型特征过多,过于复杂引起的,所以我们可以通过降低特征的权重来简化模型。我们尝试将图中较为复杂的模型(蓝色): 中的 和 的参数 和 调小来简化模型,如果使 和 的参数调整的非常小,甚至接近于 0,那么就相当于在原模型中去掉了这两个高阶项,这样模型就被简化为了二次函数(紫色): ,从而可以避免过拟合。然而实际情况中,我们并不知道预测结果与哪个特征的相关度低,所以不知道应该将哪个特征的参数变小,那么我们可以尝试修改代价函数,将所有参数都变小,如下所示:
注意参数 中的 是从 1 开始的,意味着我们只对特征的参数进行缩小,不对偏差项 进行缩小,实际上并没有什么差别。上式在原有代价函数的基础上加入了正则化项(红色),正则化参数 相当于在两个不同目标之间做取舍,一方面是最小化损失值,也就是代价函数的前半部分,另一方面是最小化参数,也就是代价函数的后半部分。也就是说要在更好地拟合训练集和控制参数更小,从而使模型简单,避免过拟合之间保持平衡。所以需要选择合适的 参数,如果过小则起不到简化模型的作用,仍然具有很高的方差及过拟合问题,如果过大的话则不能很好地拟合训练数据,具有很高的偏差,比如将 设为 ,那么所有特征接近于 0,相当于模型变成了一条直线:,如下图所示:
线性回归的正则化
梯度下降
将线性回归的代价函数加入正则化项:
优化目标为最小化代价函数 的参数:
对 求关于 的偏导,使用梯度下降公式重复迭代更新参数,注意 和 单独更新:
关于 的计算公式可以简化为:
通常 ,后半部分则和原有梯度下降一样,可以理解为正则化项只是在原有梯度下降基础上,让参数 乘以一个小于 1 的数(比如 0.99),从而使得参数值更小。
正规方程
我们可以通过正规方程直接求得最小化代价函数 的参数 :
其中 是 维的设计矩阵,每一行代表一个单独的训练样本。 是 维的向量,包含训练集所有的标签。正则化项是一个 维的矩阵,对角线第二至最后一个元素都为 1,其他元素都为 0。比如 ,那么正则化项矩阵为:
将正规方程加入正则化项:
正则化项矩阵实际上是对代价函数关于参数的求导,我们知道如果样本数 小于特征数 ,那么矩阵 是不可逆的,或者叫做奇异矩阵,虽然用伪逆函数(Octave:pinv
)可以得到从数字上看似有意义的解,但不会得到很好的假设模型。不过,在加入正则化项后,只要正则化参数 大于 0,即可保证括号内的矩阵一定是可逆的,所以正则化解决了不可逆问题,也就可以解决过拟合问题(样本过少,特征过多)。
逻辑回归的正则化
通常逻辑回归模型中如果包含大量的多项式特征,会容易导致过拟合问题,如下图所示:
假设函数为:
代价函数为:
将代价函数加入正则化项:
这样能减小参数的权重,即使有过多的参数也能得到平滑的决策边界,从而避免过拟合。此时,我们需要单独更新 和 ,和线性回归梯度下降类似,将 的更新加入正则化,分别迭代更新: