本章学习目标

  • 理解欠拟合与过拟合的概念及识别方法
  • 掌握交叉验证的原理和作用
  • 了解网格搜索和随机搜索的基本思想
  • 学会如何向AI描述调参需求
  • 核心能力:知道模型效果不好时,应该往哪个方向调整

一、核心问题:模型效果不好怎么办?

1.1 三大问题

训练完一个模型,发现效果不理想。原因逃不出这三类:

问题 一句话定义 表现
欠拟合 模型太简单,没学到规律 训练集效果差,测试集效果也差
过拟合 模型太复杂,死记硬背 训练集效果很好,测试集效果差
数据问题 数据质量差或信息不足 无论怎么调参效果都不好

核心心法:先判断是欠拟合还是过拟合,再决定调参方向。

1.2 学习曲线 —— 诊断工具

学习曲线:横轴是训练数据量,纵轴是模型误差(或分数)。

误差
  ↑
  │                         过拟合
  │                     ●━━━●
  │                   ●
  │                 ●  ← 训练误差低,验证误差高
  │                ●
  │               验证误差 ───●━━━●━━━●
  │              ●
  │             ●
  │     ╱━━━━━━━━━━━━━━━━━━━━
  │    ●  训练误差
  │   ●
  └──────────────────────────→ 数据量
  
  
误差
  ↑
  │                         欠拟合
  │    ●━━━●━━━●━━━●━━━●
  │   验证误差
  │    ●━━━●━━━●━━━●━━━●  训练误差
  │    训练误差和验证误差都很高
  │    模型预测还不如平均值
  │
  └──────────────────────────→ 数据量
模式 诊断 解决方向
训练误差高,验证误差高 欠拟合 增加模型复杂度
训练误差低,验证误差高 过拟合 降低模型复杂度 / 增加数据 / 正则化
两者都低 理想状态 保持
两者都高但接近 数据问题 增加特征 / 改善数据质量

二、欠拟合与过拟合

2.1 欠拟合

定义:模型没有捕捉到数据中的规律,连训练数据都拟合不好。

类比:学生拿着课本也考不及格——根本没学会。

表现

  • 训练集误差高
  • 验证集误差高
  • 两者接近

常见原因与解决

原因 解决方案 例子
模型太简单 换更复杂的模型 线性回归 → 随机森林
特征太少 增加特征 加入品牌、车型等特征
正则化太强 减弱正则化 减小L1/L2系数
未充分训练 增加迭代次数 决策树增大max_depth

2.2 过拟合

定义:模型死记硬背了训练数据中的噪声,但对新数据预测很差。

类比:学生背下了所有练习题的答案,但考试换了个数字就不会了。

表现

  • 训练集误差很低(甚至为0)
  • 验证集误差高
  • 两者差距很大

常见原因与解决

原因 解决方案 例子
模型太复杂 换简单模型或用正则化 决策树剪枝
训练数据太少 增加数据量 收集更多样本
特征太多 特征选择/降维 删除不重要特征
训练太久 早停 限制树深度

2.3 如何选择模型复杂度?

模型效果
  ↑
  │                 ╱─── 验证集
  │               ╱
  │             ╱    ← 最佳复杂度
  │           ╱
  │         ╱
  │    ╱───╱
  │   ╱
  │  ╱  训练集
  └────────────────────────→ 模型复杂度

最佳点:训练集效果好,验证集也不差,两者差距不大。

三、交叉验证

3.1 为什么要用交叉验证?

问题:单次划分训练集/验证集,结果可能运气好或运气差。

类比:一次考试成绩不能代表真实水平,需要多次考试取平均。

3.2 K折交叉验证

核心思想:把数据分成K份,轮流用其中K-1份训练、1份验证,重复K次,取平均。

全部数据
┌─────────────────────────────────────┐
│  折1  │  折2  │  折3  │  折4  │  折5  │
└─────────────────────────────────────┘

第1轮:训练 ████████    验证 □      平均分数
第2轮:训练 ████████    验证 □
第3轮:训练 ████████    验证 □   →  0.85
第4轮:训练 ████████    验证 □
第5轮:训练 ████████    验证 □
参数 含义 常用值
K 折数 5 或 10

K=5时:用80%数据训练,20%验证,重复5次,每次验证集不同。

3.3 交叉验证的作用

作用 说明
更稳定评估 减少单次划分的运气成分
更充分利用数据 每条数据都有机会做验证
辅助调参 用交叉验证分数判断参数好坏
发现过拟合 K折分数差距大 → 可能过拟合

四、网格搜索

4.1 什么是网格搜索?

核心思想:穷举所有参数组合,找出最佳组合——设定参数候选值,尝试所有组合,选交叉验证分数最高的。

例子(随机森林调参):

参数 候选值
n_estimators(树的数量) [50, 100, 200]
max_depth(最大深度) [5, 10, 15]
min_samples_split(最小分裂样本数) [2, 5, 10]

总组合数 = 3 × 3 × 3 = 27种。

4.2 网格搜索的工作流程

第1步:定义参数网格
    ↓
“n_estimators: [50, 100, 200], max_depth: [5, 10, 15]”

第2步:对每种组合进行K折交叉验证
    ↓
27种组合 × 5折 = 135次训练

第3步:找出最佳参数组合
    ↓
选交叉验证分数最高的

第4步:用最佳参数在全量训练集上训练

4.3 网格搜索的优缺点

优点 缺点
找到全局最优组合(在候选集内) 计算量大(组合数爆炸)
实现简单 参数多时不可行
结果可靠 需要合理设定候选范围

五、随机搜索

5.1 为什么需要随机搜索?

网格搜索的问题:参数组合太多时计算量爆炸。

参数 候选值 组合数
4个参数 各10个候选 10,000
6个参数 各10个候选 1,000,000

5.2 随机搜索的核心思想

不穷举,随机抽样——在参数空间中随机采样,用较少的尝试找到接近最优的组合。

类比:在一片区域找宝藏,网格搜索是每平方米都挖一遍;随机搜索是随机挖100个点。

5.3 网格搜索 vs 随机搜索

对比维度 网格搜索 随机搜索
搜索方式 穷举所有组合 随机采样
计算量
参数多时 不可行 可行
最优性 找到候选集内最优 可能错过最优点

经验法则

  • 参数少(≤3个)→ 网格搜索
  • 参数多(≥4个)→ 随机搜索
  • 先随机搜索粗调,再网格搜索精调

六、不同算法的调参方向

6.1 决策树

参数 作用 欠拟合方向 过拟合方向
max_depth 最大深度 ↑ 增大 ↓ 减小
min_samples_split 分裂所需最少样本数 ↓ 减小 ↑ 增大
min_samples_leaf 叶子节点最少样本数 ↓ 减小 ↑ 增大

6.2 随机森林

参数 作用 欠拟合方向 过拟合方向
n_estimators 树的数量 ↑ 增大 —(越大越稳定)
max_depth 树的最大深度 ↑ 增大 ↓ 减小
max_features 每棵树用几个特征 ↑ 增大 ↓ 减小
min_samples_leaf 叶子最少样本数 ↓ 减小 ↑ 增大

6.3 通用调试思路

现象 可能原因 尝试方向
欠拟合 模型太简单 增加复杂度、增加特征、减少正则化
过拟合 模型太复杂 降低复杂度、增加数据、增强正则化
训练慢 参数太大 减少树的数量、限制深度
效果抖动 随机性 固定random_state,增加树的数量

七、实战案例:随机森林调参

7.1 基线模型

参数 默认值 交叉验证R²
n_estimators=100, max_depth=None 默认 0.62

训练集R²=0.91,验证集R²=0.62 → 过拟合(差距大)。

7.2 调参方向(降低复杂度)

步骤 调整 验证集R² 训练集R² 效果
基线 默认 0.62 0.91 过拟合严重
1 max_depth=10 0.67 0.79 过拟合改善
2 max_depth=8 0.69 0.74 更稳定
3 + min_samples_leaf=5 0.70 0.72 差距缩小
4 + n_estimators=200 0.71 0.73 微提升

最终参数max_depth=8, min_samples_leaf=5, n_estimators=200

7.3 特征筛选

根据随机森林的特征重要性,删除不重要的特征:

特征 重要性 操作
车龄 0.38 保留
里程 0.25 保留
品牌 0.18 保留
功率 0.10 保留
变速箱 0.06 可选
燃油类型 0.03 删除
车身类型 0.02 删除

删除低重要性特征后:训练更快,效果基本不变(R²≈0.70)。

八、如何向AI描述调参需求

你的需求 你应该这样告诉AI
诊断问题 “帮我判断模型是欠拟合还是过拟合”
画学习曲线 “画学习曲线,横轴是训练数据量,纵轴是误差”
交叉验证 “用5折交叉验证评估模型”
网格搜索 “用网格搜索调优随机森林,参数:n_estimators=[50,100,200],max_depth=[5,10,15]”
随机搜索 “用随机搜索调参,迭代20次”
特征重要性 “输出特征重要性,删掉重要性低于0.01的特征”

九、本章总结

调参核心概念速记

概念 一句话
欠拟合 训练差,验证差 → 模型太简单
过拟合 训练好,验证差 → 模型太复杂
交叉验证 K次训练取平均,评估更稳定
网格搜索 穷举所有参数组合
随机搜索 随机采样参数组合
学习曲线 诊断欠拟合/过拟合的工具

调参方向速记

问题 欠拟合 过拟合
模型复杂度 ↑ 增加 ↓ 降低
特征数量 ↑ 增加 ↓ 减少
正则化 ↓ 减弱 ↑ 增强
训练数据 ↑ 增加 ↑ 增加

搜索方法选择

参数数量 推荐方法
≤3个 网格搜索
≥4个 随机搜索

核心心法

“不要随机调参。先画学习曲线诊断问题,再针对性地选择调参方向。每次都记录结果,对比验证。”

十、思考题

  1. 训练集R²=0.99,验证集R²=0.52。这是欠拟合还是过拟合?应该增大还是减小max_depth?

  2. 为什么不能用测试集来调参?用测试集调参会有什么后果?

  3. 网格搜索和随机搜索,在什么情况下网格搜索明显优于随机搜索?什么情况下相反?

  4. 5折交叉验证和3折交叉验证,哪个更稳定?哪个计算量更大?为什么?

  5. 你花了3小时跑完网格搜索,找到的最佳参数组合R²=0.71。你用这个参数在全量数据上重新训练,测试集R²=0.70。你发现有个参数组合没搜到,想加上再跑一次。你会怎么做?


下一节预告:第七部分收尾——特征工程进阶:如何创造更好的特征来提升模型效果?

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐