过拟合和欠拟合原因及其解决方法

本文深入探讨了机器学习中的过拟合与欠拟合问题,详细解释了两者的概念、现象、原因及解决方案,包括数据处理、正则化、模型结构调整等方法,旨在帮助读者理解并有效应对模型泛化能力不足的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

过拟合(overfitting)

概念

过拟合是模型参数在拟合过程中出现的问题,由于训练数据包含抽样误差,训练时复杂的模型将抽样误差也考虑在内,将抽样误差也进行了很好的拟合。

现象

具体表现:模型在训练集上效果好,在测试集上效果差,即模型泛化能力弱。

原因

产生过拟合根本原因:
	(1)观察值与真实值存在偏差
	训练样本的获取,本身就是一种抽样,抽样操作就会存在误差,导致选取的样本数据不足以代表预定的分类规则。
	
	(2)训练数据太少,导致无法描述问题的真实分布
	通俗地说,重复实验多次,随机事件的频率近似于它的概率,即当样本量大了,真实规律是必然出现的。

	(3)数据有噪声
   有噪音时,更复杂的模型会尽量去覆盖噪音点,即对数据过拟合,扰乱了预设的分类规则。

	(4)训练模型过度,导致模型非常复杂
	模型强大到连噪声都学会了。参数太多,模型复杂度过高。
	
	(5)假设的模型无法合理存在,或者说是假设成立的条件实际并不成立
	
	(6)对于决策树模型,如果我们对于其生长没有合理的限制,其自由生长有可能使节点只包含单纯的事件数据(event)或
	非事件数据(no event),使其虽然可以完美匹配(拟合)训练数据,但是无法适应其他数据集
	对于神经网络模型:a)对样本数据可能存在分类决策面不唯一,随着学习的进行,BP算法使权值可能收敛过于复杂的决策
	面;b)权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征

解决方法

1)数据处理:清洗数据、减少特征维度、类别平衡;
	1、清洗数据:纠正错误的label或删除错误数据
	2、降维
	3、类别平衡
	[参考](https://www.cnblogs.com/CJT-blog/p/10223157.html)2)辅助分类节点(auxiliary classifiers)
	Google Inception-V1中,采用了辅助分类节点,即将中间某一层的输出用作分类,并按一个较小的权重加到最终的分类
	结果中,这样相当于做了模型的融合,同时给网络增加了反向传播的梯度信号,提供了额外的正则化。

(3)正则化:
 	(1. 获取更多数据:从数据源获得更多数据,或数据增强;
 	(2. L2、L1、BN层等,L1正则还可以自动进行特征选择;
 	(3. 使用合适的模型(减少网络的层数、神经元个数等,限制权重过大),限制网络的拟合能力,避免模型过于复杂;
 	(4. 增加噪声:输入时增加噪声+权重上(高斯初始化);
 	(5. 多种模型结合: Bagging集成学习的思想和其他集成模型,例随机森林模型;
 	(6. 随机失活(Dropout):随机从网络中去掉一部分隐神经元,或weight decy;
 	(7. 限制训练时间、次数、以及早停止;
 	(8. 使用正则化参数/项,防止过拟合;
 	(9. 逐层归一化(Batch Normalization),即给每层输出做归一化(相当于加了一个线性变换层),
 	   使得下一层的输入相当于高斯分布(正态分布),此方法相当于下一层的权重参数训练时避免了输入以偏概全。
	(10.数据增强(data augmention)11.合适的模型(simpler model structure)12.交叉检验,通过交叉检验得到较优的模型参数;13.如果有正则项则可以考虑增大正则项参数 lambda;
	(14.特征选择,减少特征数或使用较少的特征组合,对于按区间离散化的特征,增大划分的区间;
	···

欠拟合(Underfitting)

现象

训练模型
在训练集上表现很差,
在验证集上面的表现也很差。

原因

模型发生欠拟合的最本质原因是“训练的模型太简单,最通用的特征模型都没有学习到”。
表象原因是模型复杂度过低、特征量过少等。

解决方法

 1. 做特征工程,添加更多的特征项,即提供的特征不能表示出那个需要的函数。
 2. 减少/减小正则化参数,使模型复杂一些;
 3. 使用更深或者更宽的模型,增加网络层数和层神经元个数,从数据中挖掘出更多的特征
 4. 使用集成方法。融合几个具有差异的弱模型,使其成为一个强模型;容量低的模型可能很难拟合训练集;
 	使用集成学习方法,将多个弱学习器Bagging;Boosting 往往会有较小的 Bias,比如 Gradient Boosting 等。
 5. 有时还需对特征进行变换,使用组合特征和高次特征,来增大假设空间。
 6. 增加模型复杂度,使用非线性模型。模型简单也会导致欠拟合,例线性模型只能拟合一次函数的数据,
 	尝试使用更高级的模型将有助于解决欠拟合,如使用核SVM 、决策树、深度学习等模型。
7.添加其他特征项;有时模型出现欠拟合是因为特征项不够导致的。例,“组合”、“泛化”、“相关性”三类特征是特征添加的重
	要手段,无论在什么场景,都可以照葫芦画瓢,总会得到意想不到的效果。除上面的特征之外,“上下文特征”、
	“平台特征”等,都可以作为特征添加的首选项。
8.添加多项式特征;在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。
9.增大数据量
10.调整模型的容量(capacity),通俗地,模型的容量是指其拟合各种函数的能力
11.调整参数和超参数
•  超参数包括:
- 神经网络中:学习率、学习衰减率、隐藏层数、隐藏层的单元数、Adam优化算法中的β1和β2参数、batch_size数值等
- 其他算法中:随机森林的树数量,k-means中的cluster数,正则化参数λ等

总结:

  1. 机器学习的基本问题是利用模型对数据进行拟合,学习的目的并非是对有限训练集进行正确预测,而是对未曾在训练集合出现的样本能够正确预测。
  2. 模型对训练集数据的误差称为经验误差,对测试集数据的误差称为泛化误差。
  3. 模型对训练集以外样本的预测能力就称为模型的泛化能力,追求这种泛化能力始终是机器学习的目标。
  4. 过拟合(overfitting)和欠拟合(underfitting)是导致模型泛化能力不高的两种常见原因,都是模型学习能力与数据复杂度之间失配的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值