对抗过拟合
本期话题“对抗过拟合”。在开始之前,我们首先要知道,什么是过拟合问题?
与传统统计建模不同的是,机器学习算法通常会将数据集分成两部分,即训练集和验证集。就像它们的名字一样,训练集用来训练模型,即确定模型中的参数,验证集则用来验证模型的结果与实际数据差得有多远。
通常我们总是希望找到能够更好的拟合数据的模型,但是又不希望模型抓住了一些细枝末节,而在新的数据上不具有适应性。过拟合就是描述此类问题,即在训练集上有很好的拟合效果,但是当在预测验证集时,模型的拟合效果急速下降。
最简单的解决过拟合的方法是什么?答,增加样本量。但是样本量不可能无限增加,而且通常情况下,我们所能获得的样本量总是既定的。
那么问题来了,怎样在既定样本的基础上,尽可能的减少过拟合呢?
1
减少模型复杂度
模型的复杂程度和训练集的拟合度总是成正比的。以决策树为例,对于任何一颗决策树而言,树的深度以及每个节点的样本数,这些都是影响决策树的指标。在建模时,我们的树不可能无限的大,树越深,树枝越多固然能够得到更好的模型,但也可能模型只是抓住了数据的一些细枝末节,这些细枝末节在验证集并不适用。这就是为什么,我们要剪枝了。
总之,我们要在模型的复杂度和模型的适用性上找到一个平衡。在训练集数据拟合最好的情况下,最大化模型的适用性。
2
交叉验证
交叉验证是指将数据集分成若干小份,每次都只取其中的一份作为验证集,其他的用来组成训练集。然后将多次拟合的均值作为最后模型的结果。交叉验证的意义在于,剔除了一些极端值对模型的影响,并且通过多次训练和验证,降低过拟合。对于小批量数据很有用。
3
正则项
在进行回归拟合时使用。正则项是指在对模型的参数进行拉格朗日求解时,在方程的最后加入一个正则项,将模型的参数控制在一定的范围之内。最常见的就是Lasso和Ridge,在方程求极值时,加入一个不定式的限制,以下图为例。Lasso是限定参数的膜为1,Ridge则限定参数在半径为1的圆内,这两者都有异曲同工之妙。
对抗过拟合是我们在实际应用中经常要面对的问题,可能也是不那么好解决的问题。要解决这一问题,总的来说,一是要限定模型的复杂程度。在面对小样本问题时,交叉验证是个不错的选择。引入正则项是最常见的做法。具体怎么做,还是要从数据出发。今天就这样啦。
领取专属 10元无门槛券
私享最新 技术干货