机器学习中,经常讨论到的一个话题就是泛化能力。泛化能力的强弱决定了模型的好坏,而影响泛化能力的则是模型的拟合问题。
欠拟合
机器学习的目的并不是为了对训练集的做出正确的预测,而是对没有在训练集中出现的数据进行正确的预测。但是对训练集之外的数据预测的前提是,模型在训练集上的表现很好,基本可以满足大部分数据的预测,这样才会被用在训练集之外的数据。而当模型对训练集预测的结果准确率很低时,说明模型的学习能力很弱,无法学习到数据中的一定“规律”,这样模型就处于欠拟合状态。
欠拟合的解决方法比较容易,常用的方法有:
- 原数据的特征向量太少、增加样本特征,也可以加入特征组合。
- 避免使用线性模型,例如决策树,SVM,深度学习等模型。
- 增加模型的复杂度,减少正则化系数。
欠拟合的问题解决起来比较简单,较为困难的并且是大部分机器学习都会遇到的则是过拟合问题。
过拟合
模型在训练集上表现很好,而预测除训练集以外的数据时,表现却不尽人意,这种问题十有八九便是模型过拟合,意味着模型不仅学习了数据中的一定“规律”,还将各类噪声、波动也学习了进去,相应的处理方法则比欠拟合复杂了许多:
- 增加样本量,对数据清洗过后在进行训练,避免学入噪声。
- 如果数据中存在正负样本,尽可能保证正负样本的占比均匀或者训练集覆盖所有的数据类型。
- 选择相对简单的模型,补充特征不要太多,模型参数不要太复杂
- 验证模型时尽量采用交叉检验的验证方法。
- 正则化方法,有L1正则化和L2正则化,原则就是让得到的模型复杂度趋于最小。
- 深度学习中还可以采用dropout,batch normalization, early stop等方法。
- 模型融合/集成学习方法也是很好的防止过拟合方法。
(需要注意的是,降维并不能有效的抑制过拟合,它只是降低了特征的维度,并没有减少特征的信息。)
总结如下:
欠拟合:在训练数据表现都很差,在未知数据上也是一样。
过拟合:在训练数据上表现较好,在未知数据上表现较差。
其中每一条解决方法拓展出来都很多,想要了解具体步骤的同学可自行搜索,或者期待后续的更新 -_ - ~~~!