返回
查看原链接原链接
Bilibili22分2秒 · 2026/9/2 08:32:05

欠拟合与过拟合:诊断方法与解决方案

机器学习训练的核心目标是获得良好的泛化能力——既要拟合训练数据,又要能对未见数据做出准确预测,而欠拟合和过拟合是阻碍这一目标的两大核心障碍,可通过学习曲线诊断,并分别通过增加模型复杂度(做加法)与正则化等手段(做减法)来解决。

欠拟合与过拟合:诊断方法与解决方案

机器学习训练的核心目标是获得良好的泛化能力——既要拟合训练数据,又要能对未见数据做出准确预测,而欠拟合和过拟合是阻碍这一目标的两大核心障碍,可通过学习曲线诊断,并分别通过增加模型复杂度(做加法)与正则化等手段(做减法)来解决。

核心要点

模型训练的根本目标与泛化能力

  • 目标:训练一个能够捕获数据背后潜在规律的模型,使其不仅能较好地拟合训练数据,还能对从未见过的新数据做出准确预测。
  • 泛化能力:模型对未见数据做出准确预测的能力。
  • 难点:实际训练和调参过程中,想要获得很好的泛化能力是有难度的。

“火候”类比

模型调参过程类似于做菜时的火候控制:

  • 参数过于复杂庞大 → 不好(火太大易做糊)
  • 参数过于简单微小 → 不好(火太小食材夹生)
  • 模型训练同理:学得太少或学得太多都会导致训练效果不佳

欠拟合(Underfitting)

定义:模型过于简单,根本没有学到训练数据中的规律,导致在训练集和测试集上表现都非常差。

类比:学渣只背了课本目录,课堂例题做不对,考试遇到新题更不会——不是粗心,而是没有真正学进去。

过拟合(Overfitting)

定义:模型过于复杂(参数太多或项的阶数太高),不仅学到了数据中的规律,还把噪声也一并当作规律记住了,导致训练集上表现特别好,但测试集上表现明显下降。

类比:书呆子死记硬背了所有课本习题答案,考试时题目稍加变化就束手无策——记住的是答案本身而非解题方法,本质上也没有学会。

详细解析

欠拟合 vs 过拟合:核心对比

维度欠拟合过拟合
模型状态过于简单过于复杂
学习结果未学到规律学到了规律但同时也记住了噪声
训练集表现特别好(近乎完美)
测试集表现差(明显下降)
本质原因表达力不足,没学进去把噪声当规律,死记硬背习题答案而非解题方法

原因与直观理解

  • 欠拟合原因:模型过于简单,无法捕获数据的潜在关系。
  • 过拟合原因:模型的参数过多或阶数过高,导致其为了完美拟合训练数据而发生了极度扭曲,将噪声也学习进来。
  • 根本矛盾:不可能同时通过无限增加模型复杂度来提升训练集表现,因为这通常以牺牲泛化能力为代价。

诊断方法:学习曲线

什么是学习曲线

  • 学习曲线是诊断模型是欠拟合还是过拟合的科学精准的工具。
  • 功能:展示误差(Error)随着训练样本数量增加的变化趋势。
  • 实现方式:将训练集拆成十份,观察从10%到100%训练数据下,训练误差和验证误差的变化。

实验设计与演示

背景设定

  • 要学习的真实数据规律为 Y = X²,数据中包含高斯噪声(不纯净)。
  • 使用不用复杂度的多项式进行拟合。

不同模型的拟合效果

多项式阶数预期效果原因
1次项(线性模型 WX + B)欠拟合无法捕获二次关系,无论怎么训练也训不出来
2次项良好拟合与真实数据生成过程相符
15次项(X¹⁵至X⁰)过拟合过度拟合训练中的噪声

代码实现要点(实操演示步骤):

  1. 准备数据:在[-3, 3]区间内随机采样100个点模拟Y = X²,加入高斯噪声。
  2. 定义流水线(Pipeline)
  • 使用 make_pipeline :将模型过程中多个操作整合成一个流水线,可防止数据泄露
  • 使用 PolynomialFeatures:传入参数让它构造对应阶数的多项式特征。
  • 传入 LinearRegression 线性回归模型。
  1. 定义并训练三个模型(1次、2次、15次多项式)。

学习曲线结果解读

欠拟合(1次项)

  • 无论直线怎么画,都无法拟合出曲线。
  • 训练误差和测试误差都特别大(Y = X²在-3到3的区间最大值为9,但误差已达10以上,非常离谱)。
  • 特征:训练集和测试集误差都很高,模型根本没学会。

良好拟合(2次项)

  • 训练得到的曲线与真实曲线几乎重合,拟合效果好。
  • 训练误差和验证误差随训练数据增加而降低,最终收敛在较低水平(接近10⁰=1,可接受)。
  • 特征:训练集和测试集上表现都不错。

过拟合(15次项)

  • 模型试图以极度扭曲的方式穿过每个点,在训练数据上的表现甚至优于二次项模型。
  • 特征:训练误差极小,但验证误差极大且即使训练到最后也未收敛。

解决方案:欠拟合处理策略(做加法)

欠拟合的原因模型太简单、表达力弱,因此需要让模型更有表达力——做加法。

处理欠拟合的具体方法

  1. 特征工程:添加高次项及组合特征
  • 对现有特征做数学变换,组合出多个新特征,使表达力更丰富。
  1. 增加训练轮数:随着训练轮数增加,误差会有所下降。
  2. 使用更复杂的模型(最常用):用复杂模型训练,例如从线性模型换为决策树和随机森林。

实证案例

模型训练集 R²测试集 R²结论
线性回归约 0.60~0.61约 0.59训练集和测试集表现一般,差距不大
决策树约 0.7约 0.7有所提升
随机森林约 0.9约 0.8表现相当不错

结论:增加模型复杂度能显著解决欠拟合问题。

解决方案:过拟合处理策略(做减法)

过拟合在实际训练中更常见,源于初始参数设置太复杂,需要为模型做减法

处理过拟合的具体方法

  1. 增加训练数据量:数据越多,噪声越容易被稀释,模型不会被孤立的少数噪声干扰。
  2. 降低模型复杂度:如将15次项降为更合理的阶数。
  3. 特征选择:手工去除无关或冗余的特征——这是反向操作,目的是减少干扰噪声。
  4. 早停(Early Stopping) :在验证集误差开始上升时停止训练,使误差保持在相对较低水平。
  5. Dropout(深度学习中使用) :随机去掉一些神经元,防止单个参数影响过大。
  6. 正则化(Regularization)(最常用) :为模型的复杂度增加惩罚。

正则化的深入解析

为什么正则化最常用?

以降低模型复杂度为例:本文已知真实规律是Y = X²,但如果预训练真实规律是Y = X⁶,则很难一次性选对正确的复杂度阶数。而正则化让机器学习算法自己学习对参数的惩罚,自己选择对应的特征

正则化的原理

  • 实现方式:在损失函数中加入额外的惩罚项。系数越大,惩罚越重。
  • 效果:让模型尽可能用小的系数来拟合数据,防止参数过于极端。
  • 命名含义
  • “正则”来自英文 Regulation,含义是“让事物变得规则整齐和正常”。未加正则化时,模型为迎合噪声会极度扭曲;加入正则化是让模型回归到平滑、正常的简单形态。
  • L2 也叫岭回归(Ridge Regression)——山岭之意。未加正则化时损失函数像一个深邃峡谷,难找到低点。加入L2后在原点竖立“山岭高地”,参数就像小球一样在高地上自动向低处滚动,找到比较低的位置。
  • L1 叫 Lasso——原意为牛仔的套索,像套索一样把没用的特征直接套住丢弃。同时其也是一个缩写:Least Absolute Shrinkage and Selection Operator(最小绝对值收缩与选择算子)。

核心操作流程(代码实践前的准备)

  • 使用 PolynomialFeatures 组合多项式特征
  • 使用标准化(Standardization)处理特征
  • 使用正则化前必须做标准化:否则高次项数值会极其庞大,若不收缩,惩罚是不公平的。

L1与L2正则化详解

L2 正则化(Ridge Regression / 岭回归)

做法:在 MSE 损失函数基础上增加所有权重的平方和的惩罚项(MSE + α或λ × Σw²)。

特点

  • 将所有权重均匀地压缩到接近零的较小值。
  • 不会将权重恰好压缩为0,也不会丢弃某一项特征。即使参数是0.1,平方后变为0.01已经非常小,达到惩罚目标。
  • 表现较为平稳,实际应用场景更广。

L1 正则化(Lasso)

做法:在 MSE 基础上增加权重的绝对值之和(MSE + α或λ × Σ|w|)。

特点

  • 将不重要的特征权重直接压缩为0,实现自动特征选择。
  • 效果上相当于自动剔除无用特征。例如原本有16个特征,经L1处理可能只剩5个有效特征。
  • 由于绝对值没有平方的放大效果,参数的削减方向与L2不同。
  • 优势:自动特征选择有时是优点。劣势:可能使训练结果不够稳定。

L1 vs L2 效果对比

维度L1(Lasso)L2(Ridge/岭回归)
惩罚项权重绝对值之和 Σw
特征处理不重要的权重直接压缩为0权重均匀压缩到接近0但不会等于0
特征选择自动进行保留所有特征
稳定性可能不稳定表现稳定
应用场景有特征选择需求时更广泛应用

正则化实证效果验证

以15次多项式拟合Y = X²的过拟合问题为例:

无正则化(普通15次多项式):

  • 曲线极度扭曲,试图穿过每个数据点,与真实规律差距甚远。
  • 参数系数巨大(正负值都有,范围已达 15000 以上),某些特征系数为正、某些为负——说明它为了穿过数据点而不知道调整方向。
  • 从16个特征来看,只有1个特征被剔除,15个特征仍然是非零的,表现为严重过拟合。

L2 正则化效果:

  • 曲线不能与真实完全重合,但已经拟合得不错。
  • 所有15个非零特征系数保留(符合L2不会使系数等于0的特性)。
  • 系数被压缩到很小的范围(约0.1-几),而相对未正则化的15000+,有效防止了极端参数的出现。
  • 结论:有效解决了过拟合问题,表现稳定。

L1 正则化效果:

  • 拟合效果接近真实规律。
  • 体现自动特征选择:非零特征只剩3个(主要是二次项、四次项及15次项),其余被压缩为0。
  • 其中最重要的特征是二次项(符合Y = X²的真实规律),其余特征的系数都非常小。
  • 结论:L1能自动筛选出关键特征,解决过拟合问题的同时实现了特征选择。

总结:核心处理原则

欠拟合与过拟合的解决框架

问题根本原因处理策略具体方法
欠拟合模型表达力不足做加法增加特征(多项式特征、组合特征);增加训练轮数;使用更复杂的模型(如决策树、随机森林)
过拟合模型过于复杂,对噪声敏感(死记硬背)做减法使用正则化(L1/L2);增加训练数据;简化模型;手工特征选择;早停(当学习曲线上升时停止训练)

注意:原文中“增加训练数据量”和“增加训练轮数”的表述在上下文中有出入。在欠拟合处理策略中“增加训练轮数”被视为有助于误差下降的方法;而在过拟合的解决方案列表中,也出现了“增加训练数据”和“增加训练数据量可以稀释噪声”的描述,但“增加训练轮数”的出现可能与“早停”策略相关,即训练轮数不能过多以至于开始过拟合。具体关系建议根据后续学习进一步验证。

学习路径与背景:线性回归的定位

  • 本节课涵盖了线性回归的大部分核心知识:什么是线性回归、梯度下降、模型评估、特征处理、欠拟合与过拟合的处理。
  • 为什么要将线性回归作为第一课?因为它是整个机器学习乃至深度学习最基本的原子
  • 后续的知识基本都在线性回归基础上延伸。
  • 逻辑回归不过是线性回归输出层加了一个激活函数。
  • 深度学习中的神经元和各种层,就是将多个线性回归通过非线性函数层层相连。
  • 理解梯度下降后再学习反向传播会十分容易。
  • 大语言模型的核心运算也能理解为大规模批处理的多元线性回归。
  • 学好线性回归后,后续的学习就是在基础上不断叠加新结构;逻辑回归预计在30分钟内消化分类问题——这说明线性回归基础的重要性。

行动清单

  1. 理解并区分欠拟合与过拟合的定义和特征
  • 欠拟合:训练集和测试集表现都差。
  • 过拟合:训练集表现完美但测试集差。
  1. 掌握学习曲线的解读方法:观察训练误差和验证误差随训练数据增加的变化趋势。
  2. 学会使用 Pipeline 和 PolynomialFeatures 进行多项式建模,并防止数据泄露。
  3. 实践欠拟合的“加法”方案:特征工程 → 增加训练轮数 → 更复杂模型。
  4. 实践过拟合的“减法”方案:增加数据 → 降低复杂度 → 特征选择 → 早停 → 正则化。
  5. 区分 L1 与 L2 正则化的不同特性,并根据场景做出选择
  6. 注意使用正则化前务必标准化特征

待确认问题

  • 本篇为口述内容整理,部分细节存在不确定处。“增加训练轮数”与过拟合的关系描述中,原文的归类不够清晰,需要结合规范教材进一步验证。
  • “欠拟合的解决方案之一是增加训练轮数”——原文仅说明对误差下降有影响,并未提供更详细的实验证据。
  • 正则化“最常用”的判断是作者的实践结论,但原文未提供量化的调研或对比数据,实验环境为“Y = X² + 高斯噪声”的100个点数据集,具体数据结果可能在不同数据分布下不一致。