机器学习——过拟合

优质博文:IT-BLOG-CN

一、过拟合得表现

模型在训练过程中,除了会出现过拟合现象,还有可能出现欠拟合的情况。相比而言,后者通常发生在建模前期,只要做好特征工程一般可以解决模型欠拟合问题。下图描述了模型在训练数据集上的三种情况:

其中曲线代表了模型的拟合结果,可以看出过拟合的曲线几乎对每个训练样本的拟合值都准确无误,展现了低偏差特点;另外过拟合的曲线形式上更复杂,波动性更大,预测的结果具有高方差特点。相反,欠拟合的曲线呈现低方差、高偏差的结果。

理论上模型的偏差和方差呈负相关性,既模型越复杂,偏差越小,方差越大。通常"鲁棒性"强的模型能在偏差和方差中学习到一个较好的平衡点。

二、过拟合的原因

1、数据特征的质量

这里的数据质量并非指数据缺失严重或数值失真,而是指训练集和测试集的特征分布不一致,或者说并非来源于同一分布。试想用数据集A训练得到的模型去预测差异很大的数据集B,结果肯定不尽人意。

其次在特征工程阶段,"暴力"构造的特征中会包含过多训练集的噪声信息,这类只适合于训练集的冗余特征会降低模型的泛化能力。

2、模型的问题

模型结构的超参数设置也有可能造成过拟合现象。以决策树模型为例,令树的深度越大、叶子节点数越少,模型就越复杂,对训练集的数据分类更精细,会更容易导致模型过拟合。

大部分ML模型的学习过程中都运用了类似梯度下降法的迭代优化算法,过多的迭代次数会出现过度训练(Overtraining),让模型最终的参数过度适应训练集,加重过拟合。

三、"缓解" 过拟合的措施

由于数据噪声的存在,过拟合问题无法彻底解决,但是可以通过以下方法来缓解模型过拟合。

1、特征选择

特征选择通过对大量特征作进一步筛选,排除无关特征和冗余特征。对于广义线性模型而言,模型复杂度随着特征特征维度的降低而降低,可以有效缓解过拟合问题。

通常有两种方式做特征选择:

(1)指标筛选:利用信息熵、Pearson相关系数、卡方检验统计量等指标计算特征不目标发量间的相关程度对所有特征进行筛选,但这种方式没有考虑到特征之间的关联作用,可能把有用的关联特征踢掉。

(2)正则化(Regularization):在模型损失函数中加入合适的惩罚项,常见的惩罚项有L1正则化和L2正则化(既L1和L2范数)。其中L1正则化有劣于生成一个稀疏权值矩阵,进而可以用于特征选择,可以参考Lasso模型。

2、模型融合

不同类型的模型具有不同的特点,所以结合各种模型的预测结果也能有效降低过拟合的风险,提升预测精度。一般对模型融合有两种方式:加权平均法和Stacking,其中加权平均法比较易于理解,就是根据各模型的线下得分赋予一个权重,最终根据各自权重对预测结果进行加权平均。

而Stacking号称各类数据比赛的冲分"杀器",主要思想是训练模型来学习使用底层学习器的预测结果,下图是一个5折stacking中基模型在所有数据集上生成预测结果的过程,次学习器会基于模型的预测结果进行再训练,单个基模型生成预测结果的过程是:

但是当基模型较复杂时,Stacking的训练代价会很高,实际应用中需要根据情况而定。

相关推荐
lolo大魔王4 分钟前
Go语言的循环语句、判断语句、通道选择语句
开发语言·算法·golang
B博士1 小时前
科研进展 | JAG: 大光斑高光谱激光雷达遥感辐射传输模型从垂直视角解锁森林叶绿素分布密码
人工智能·jag·高光谱激光雷达·森林分层叶绿素诊断
Yao.Li2 小时前
PVN3D ORT CUDA Custom Ops 实现与联调记录
人工智能·3d·具身智能
诺伦2 小时前
LocalClaw 在智能制造的新机会:6部门AI+电商政策下的工厂AI升级方案
人工智能·制造
小陈工4 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
海清河晏1114 小时前
数据结构 | 单循环链表
数据结构·算法·链表
提子拌饭1335 小时前
风息时钟:鸿蒙Flutter 实现的自然风格时钟应用
flutter·华为·架构·开源·harmonyos
wuweijianlove8 小时前
算法性能的渐近与非渐近行为对比的技术4
算法
一定要AK8 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao8 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch