前面我们在讲模型效果的时候都在强调模型AUC越高越好,但实际上真的是这样的吗?
当然不是!
(嗯?老shi,你又骗我,你之前不是说AUC越高越好么?)老shi没有骗大家,正常情况下,如果模型不过拟合,AUC肯定是越高越好的!但现实的情况往往是,AUC越高模型过拟合的可能性越大!(这时小明又疑惑了,过拟合是什么鬼??)
所谓过拟合,就是指模型在训练集上表现较好,但在验证集或测试集上表现一般,泛化能力弱。打个比方,有个学生,他在学习过程中记住了他做过的所有的题型,但是他就只会做他做过的题,当遇到题目稍微有变化或者新题目,他就无从下手了。这就是典型的“过拟合”,也就是说该学生过度记住之前的题目特征,而没有学习到好的“解题方法”,导致他遇到新题的时候不能做到举一反三。
我们再来说说另外一种情况——欠拟合,欠拟合与过拟合是恰好相反的情况,欠拟合是指模型在训练集上表现差,在验证集或测试集上表现也同样较差,模型几乎没有泛化效果。我们还是以学生的学习能力为例,假设现在有个学生,老shi上课他总是睡觉,不听课课后也不自学,导致他考试时不管是做过的还是没做过的题他都不会做,考试总是垫底(别躲,说的就是你——小明!)这就是典型的欠拟合。欠拟合的明显问题在于,它的题目练习量(数据量)不够,当然它跟过拟合一样,也没有学到好的“解题方法”,导致最终的“考试成绩”较差。而处于过拟合和欠拟合之间的状态就是我们所追求的模型最佳拟合效果,它不仅在训练数据(旧的)集上有较好的表现,且对新的数据样本也有同样具有优异的泛化能力。下面我们用一张图来说明三种不同的模型拟合情况。
注:泛化能力是指机器学习算法对新样本的适应能力,通常我们说模型的泛化能力与模型的鲁棒性是差不多的意思。
可以看到,在上面的图中,最左边的就是代表欠拟合(Underfitting)的情况,也就是模型过于简单不足以表达数据的实际情况;中间的就是代表拟合刚刚好(Balanced),模型的复杂度恰好可以表达数据的真实情况;最右边的就是代表过拟合(Overfitting),也就是模型过于复杂,表达能力过强,超过了数据的实际情况。既然前面说过拟合和欠拟合都不好,那么我们如何去避免模型训练中出现过拟合与欠拟合的问题呢?
解决过拟合的常用方法:
1、 扩大数据集,增加数据样本的“丰富性”;
2、 多折交叉验证;
3、 减少特征数量;
4、 适当的正则化,采用L1/L2范数约束;
解决欠拟合的常用方法:
1、 扩大特征数量、尝试高阶特征组合;
2、 采用更复杂的模型,提高模型的学习能力;
3、 减少正则化力度;
4、 神经网络中可以增加模型的层数和神经元个数等增强模型的学习能力。
现实模型训练中,我们可能经常会遇到过拟合和欠拟合的问题,这个一般要结合损失函数去判断是属于过拟合或欠拟合。但相对来说过拟合的情况会更常见一些,比如我们可能经常会遇到AUC很高,高达0.9以上!
结果模型应用到新数据集上效果却不如人意,这就是过拟合,而避免过拟合的方法上面已经列出,希望对大家受用。最后祝大家能在日后工作中常出好模型,天天开心!