机器学习(八)- Overfitting

Overfitting问题

什么是overfitting

从overfitting这个词的字面上看来就是过度拟合,我们知道的,不管什么东西,过度了一般都是不好的。
overfitting:如果我们选取了太多太多的特征,那么通过学习的模型将会几乎完美的拟合我们的训练集,但是同时这将导致模型不能很好的拟合新的样本。(泛化能力低下)
当然光看概念真的是似懂非懂的,接下来配上两幅图你可能就明白了,分别是线性回归和逻辑回归中出现overfitting时的情况。
机器学习(八)- Overfitting_第1张图片
机器学习(八)- Overfitting_第2张图片
从上面两幅图可以看出,当我们过多的选取了特征之后,模型经过学习之后能够几乎完美的拟合我们的训练数据,但同时我们的曲线变得弯弯曲曲,非常复杂。
我相信有人会问,为什么复杂的模型就不好呢,如何判断过拟合,如何判断所谓的“不能很好的拟合新的样本”和“泛化能力差”。首先我们需要了解我们训练模型的目的,我们训练模型的目的并不在于要去完美fit我们的训练集,而是在于模型拟合新样本的能力,因为最终我们训练出来的模型是要拿去用的,拿去预测,拿去分类,拿去面对一些我们不知道的数据。为了模拟这种情况,我们通常会在一开始选取训练集的时候,同时也选取一个验证集(validation set),验证集并不用来训练,而是用来模拟新数据,它很像测试集(test set),测试集是模型最终训练完后,进行测试,评价好坏的数据集,它在一个流程中只会用到一次。而验证集是每次完成参数更新,也就是一次学习之后,都要使用的,用来判断是否过拟合的,如果验证集的正确率没有过多小于训练集,说明没有过拟合,参数可以更新,如果验证集的正确率严重低于了训练集(设定阈值),说明过拟合,参数不更新。
那么我们接下来说说,为什么复杂的模型不好,其实我觉得这是一个归纳演绎的过程,一方面前人大牛们在不断实验测试中发现,往往简单的模型在预测新数据的时候效果更好,另一方面个人觉得世界上的数据都是大概符合某种规律的,不管是正态分布,二项分布等,但是不管是什么分布,数据都会存在或多或少的噪声和一些小概率数据,那么模型过度学习,拟合了噪声和小概率数据,自然就不能很好的预测新样本了。
当然如果我们能过拟合全部数据,那当然是完美的,但是同时这又是不太可能的,毕竟数据随时在更新和产生,而且在这样一个信息时代,全部的数据,那真是难以想象到底是有多大。

解决overfitting的办法

  • 减少特征数量:
    • 人工筛选需要保留的特征
    • 利用模型选择算法自动选择需要保留的特征

有人可能会问,丢弃了特征就等同于丢弃了或多或少的信息,这不会对模型的学习造成影响吗,答案是会的,所以为了避免这种情况,就有了下面的方法

  • 正则化
    • 保留所有的特征,但是减小参数的value
    • 在我们拥有很多特征的时候,每个特征都或多或少对模型训练有帮助

你可能感兴趣的:(机器学习(八)- Overfitting)