欠拟合、过拟合及其解决方法

    在机器学习或者训练深度神经网络时,经常会出现欠拟合过拟合这两个问题,通常,一开始我们的模型往往是欠拟合的,正是因为如此才有了优化的空间,需要不断的调整算法来使得模型的表达更加准确。但是优化到了一定程度后就需要解决过拟合的问题。

    首先是在我们进行模拟训练的时候会出现模型不能够很好地拟合数据的情况,这个时候就需要我们来判断究竟现在的模型是欠拟合还是过拟合,那么怎么来判断这两者的情况呢?有两种方法:

(将数据集分为三类,训练集、交叉验证集和测试集)

用交叉验证集来作为评判选择的标准,选择合适的模型,而测试集则是作为算法性能的评判。

    来看下这三种误差的计算方法:

  • training error

  • cross validation error

  • test error

1) 学习曲线(learning curves)

学习曲线就是比较j_train和j_cv。如下图所示,为一般的学习曲线,蓝色的线表示训练集上的误差j_train,粉色的线表示验证集上的误差j_cv,横轴表示训练集合的大小。


刚开始处于"A"处,表示当训练数据很小很容易时,训练集上的误差非常小,此时处于过拟合状态。随着训练数据的增加,训练数据上的误差j_train越来越大,而验证集上的误差j_cv越来越小,j_train和j_cv越来越接近但始终保持j_cv>j_train.

2)交叉验证

模型的Error=Bias+Variance,Error反映的是整个模型的正确度,Bias反应的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度Variance反应的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性

我们可以根据j_train和j_cv两个标准来判断此时的模型是处于欠拟合还是过拟合。



观察到 J_cv 很大时,可能处在途中蓝色圆圈中的两个位置,虽然观察到的现象很相似(J_cv都很大),但这两个位置的状态是非常不同的,处理方法也完全不同。

  • 当cross validation error (Jcv) 跟training error(Jtrain)差不多,且Jtrain较大时,即图中标出的bias,此时 high bias low variance,当前模型更可能存在欠拟合
  • 当Jcv >> Jtrain且Jtrain较小时,即图中标出的variance时,此时 low bias high variance,当前模型更可能存在过拟合

1. 欠拟合

首先欠拟合就是模型没有很好地捕捉到数据特征,不能够很好地拟合数据,例如下面的例子:


    左图表示size与prize关系的数据,中间的图就是出现欠拟合的模型,不能够很好地拟合数据,如果在中间的图的模型后面再加一个二次项,就可以很好地拟合图中的数据了,如右面的图所示。

解决方法:

1)添加其他特征项,有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。例如,“组合”、“泛化”、“相关性”三类特征是特征添加的重要手段,无论在什么场景,都可以照葫芦画瓢,总会得到意想不到的效果。除上面的特征之外,“上下文特征”、“平台特征”等等,都可以作为特征添加的首选项。

2)添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。例如上面的图片的例子。

3)减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。

2. 过拟合

通俗一点地来说过拟合就是模型把数据学习的太彻底,以至于把噪声数据的特征也学习到了,这样就会导致在后期测试的时候不能够很好地识别数据,即不能正确的分类,模型泛化能力太差。例如下面的例子。

    

上面左图表示size和prize的关系,我们学习到的模型曲线如右图所示,虽然在训练的时候模型可以很好地匹配数据,但是很显然过度扭曲了曲线,不是真实的size与prize曲线。

解决方法:

1)重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。

2)增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。

3)采用正则化方法。正则化方法包括L0正则、L1正则和L2正则,而正则一般是在目标函数之后加上对于的范数。但是在机器学习中一般使用L2正则。

4)采用dropout方法。这个方法在神经网络里面很常用。dropout方法是ImageNet中提出的一种方法,通俗一点讲就是dropout方法在训练的时候让神经元以一定的概率不工作。具体看下图:


    如上图所示,左边a图是没用用dropout方法的标准神经网络,右边b图是在训练过程中使用了dropout方法的神经网络,即在训练时候以一定的概率p来跳过一定的神经元。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值