机器学习

过拟合

2017-08-09  本文已影响2人  arrnos

一、什么是过拟合

过拟合的表现:模型训练时候的误差很小,但在测试的时候误差很大。

过拟合本质原因: 模型相对于训练样本数据量过于复杂,模型要学习的特征参数太多,但是样本数据量又不够,无法充分满足模型特征的学习需求,导致很多噪声数据都被学习到,在训练时候误差很小,在预测时误差很大,即泛化能力差。

欠拟合:模型设定的过于简单,参数太少,数据集的好多有用特征没有学到,导致模型太幼稚,训练和预测时损失都很大。

二、过拟合解决方法

(1) 正则化

分析:加入正则项来控制模型复杂度,使模型在数据量容忍的范围内不至于太复杂。

常用方法有L1和L2正则化,详情移步正则化

(2) 扩增数据集

分析:由于训练的数据量太小,导致模型无法充分学习到数据的特征,建议增加数据量,可以采取的方式有:

1)从数据源头采集更多数据

2)复制原有数据并加上随机噪声

3)重采样

4)根据当前数据集估计数据分布参数,使用该分布产生更多数据等

5)如果训练集是图片,还可以通过扭曲、旋转和裁剪的方式增加数据量

(3)交叉验证

数据量小时很适用

(4) 采用dropout方法

分析:这个方法在神经网络里面很常用,通俗一点讲就是dropout方法在训练的时候让神经元以一定的概率不工作。

(5)Early stopping

分析:对模型进行训练的过程即是对模型的参数进行学习更新的过程,这个参数学习的过程往往会用到一些迭代方法,如梯度下降。Early stopping便是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。

Early stopping方法的具体做法是,在每一个Epoch结束时(一个Epoch集为对所有的训练数据的一轮遍历)计算validation data的accuracy,当accuracy连续几次不再提高时,就停止训练。这种做法很符合直观感受,因为accurary都不再提高了,在继续训练也是无益的,只会提高训练的时间。那么该做法的一个重点便是怎样才认为validation accurary不再提高了呢?并不是说validation accuracy一降下来便认为不再提高了,因为可能经过这个Epoch后,accuracy降低了,但是随后的Epoch又让accuracy又上去了,所以不能根据一两次的连续降低就判断不再提高。一般的做法是,在训练的过程中,记录到目前为止最好的validation accuracy,当连续10次Epoch(或者更多次)没达到最佳accuracy时,则可以认为accuracy不再提高了。此时便可以停止迭代了(Early Stopping)。这种策略也称为“No-improvement-in-n”,n即Epoch的次数,可以根据实际情况取,如10、20、30等

(6)在训练之前记得 shuffle 一下数据集,一般是每次训练一个 epoch(就是把 training dataset 训练了一遍)后就 shuffle 一次,但是对于较大的数据集可以只 shuffle 一次。

上一篇 下一篇

猜你喜欢

热点阅读