过拟合欠拟合

欠拟合

欠拟合在训练集和测试集上的性能都较差

欠拟合出现原因

  1. 模型复杂度过低
  2. 特征量过少

欠拟合的情况比较容易克服,常见解决方法有

  1. 增加新特征,可以考虑加入进特征组合、高次特征,来增大假设空间
  2. 添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强
  3. 减少正则化参数,正则化的目的是用来防止过拟合的,但是模型出现了欠拟合,则需要减少正则化参数
  4. 使用非线性模型,比如核SVM 、决策树、深度学习等模型
  5. 调整模型的容量(capacity),通俗地,模型的容量是指其拟合各种函数的能力
  6. Boosting ,Boosting 往往会有较小的 Bias,比如 Gradient Boosting 等.

过拟合

过拟合往往能较好地学习训练集数据的性质,而在测试集上的性能较差

过拟合出现原因

  1. 建模样本选取有误,如样本数量太少,选样方法错误,样本标签错误等,导致选取的样本数据不足以代表预定的分类规则
  2. 样本噪音干扰过大,使得机器将部分噪音认为是特征从而扰乱了预设的分类规则
  3. 假设的模型无法合理存在,或者说是假设成立的条件实际并不成立
  4. 参数太多,模型复杂度过高
  5. 对于决策树模型,如果我们对于其生长没有合理的限制,其自由生长有可能使节点只包含单纯的事件数据(event)或非事件数据(no event),使其虽然可以完美匹配(拟合)训练数据,但是无法适应其他数据集
  6. 对于神经网络模型:a)对样本数据可能存在分类决策面不唯一,随着学习的进行,,BP算法使权值可能收敛过于复杂的决策面;b)权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征

过拟合的解决方案

  1. 正则化(Regularization)(L1和L2),如果有正则项则可以考虑增大正则项参数。 
  2. 数据扩增,增加训练数据样本的全面性和数量
  3. Dropout
  4. Early stopping
  5. 权值衰减.
  6. 交叉检验,通过交叉检验得到较优的模型参数
  7. 特征降维,特征选择
  8. Bagging,将多个弱学习器Bagging一下效果会好很多,比如随机森林

权值衰减. 主要应用在神经网络模型中
它在每次迭代过程中以某个小因子降低每个权值,这等效于修改E的定义,加入一个与网络权值的总量相应的
惩罚项,此方法的动机是保持权值较小,避

 

再来说一下Boosting和Bagging区别:

同样都是融合,为什么一个能用在过拟合一个用在欠拟合呢?

Bagging有点类似交叉检验,不同的是,Bagging是通过采样不同的数据训练得到K个弱模型,再通过K个模型投票得到结果,理解起来也简单,想一下过拟合的图,过度拟合很多点,如果每次样本少一些,那单个的模型就会拟合一部分的点,那其它若模型拟合的是其它的点,这些点其实可以看作是异常点,而且异常点肯定是比较少的,不会每个弱模型都拟合的一样,那这样得到的多个弱分类器投票,就会把这些错误过拟合地方平滑掉。

Boosting, AdaBoosting方式每次使用的是全部的样本,每轮训练改变样本的权重。下一轮训练的目标是找到一个函数f 来拟合上一轮的残差。当残差足够小或者达到设置的最大迭代次数则停止。Boosting会减小在上一轮训练正确的样本的权重,增大错误样本的权重。(对的残差小,错的残差大)。 那为什么Boosting用在欠拟合上呢,你想下欠拟合其实是模型学习的不够,那我就每次把模型差的那些告诉下一轮的模型,来针对性的学习,是不是就能在模型复杂性不变的情况下,学到更多的拟合能力了呢~~ 相当于是获得了调整权重特征信息。 

Bagging是有放回选取,Boosting训练集不变,每次都是全量训练集,只是分类器中的权重发生变化。

DNN过拟合解决办法

1、早停策略。本质上是交叉验证策略,选择合适的训练次数,避免训练的网络过度拟合训练数据。

2、集成学习策略。而DNN可以用Bagging的思路来正则化。首先我们要对原始的m个训练样本进行有放回随机采样,构建N组m个样本的数据集,然后分别用这N组数据集去训练我们的DNN。即采用我们的前向传播算法和反向传播算法得到N个DNN模型的W,bW,b参数组合,最后对N个DNN模型的输出用加权平均法或者投票法决定最终输出。不过用集成学习Bagging的方法有一个问题,就是我们的DNN模型本来就比较复杂,参数很多。现在又变成了N个DNN模型,这样参数又增加了N倍,从而导致训练这样的网络要花更加多的时间和空间。因此一般N的个数不能太多,比如5-10个就可以了。

3、DropOut策略。所谓的Dropout指的是在用前向传播算法和反向传播算法训练DNN模型时,一批数据迭代时,随机的从全连接DNN网络中去掉一部分隐藏层的神经元。在对训练集中的一批数据进行训练时,我们随机去掉一部分隐藏层的神经元,并用去掉隐藏层的神经元的网络来拟合我们的一批训练数据。使用基于dropout的正则化比基于bagging的正则化简单,这显而易见,当然天下没有免费的午餐,由于dropout会将原始数据分批迭代,因此原始数据集最好较大,否则模型可能会欠拟合。

4. loss添加正则项和增大正则项系数

 

参考链接:

欠拟合和过拟合出现原因及解决方案

过拟合(原因、解决方案、原理)

机器学习中数据量多少与模型过拟合欠拟合之间的关系

DNN中防止过拟合的方法

Bagging和Boosting的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微知girl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值