第 6 课
← 返回系列列表

第6周:应用机器学习的建议

吴恩达机器学习 (2014) — 交互式学习笔记

偏差方差权衡、学习曲线、误差分析、机器学习系统设计。

第6周:应用机器学习的建议

课程简介

偏差方差权衡、学习曲线、误差分析、机器学习系统设计。

🎬 本课程视频:吴恩达机器学习 (2014) — 交互式学习笔记


一、调试机器学习模型的方法论

1.1 问题:模型效果不好怎么办

你花了大量时间训练了一个模型,但它在测试集上的表现远不如预期。接下来你会做什么?

常见的直觉性尝试:
- 收集更多训练数据
- 尝试更小的特征集
- 增加更多特征
- 添加多项式特征
- 增大 λ(正则化强度)
- 减小 λ

问题在于——如果你随便选一个方向尝试,很可能浪费大量时间。比如当模型欠拟合时,增加训练数据完全没有用;而当模型过拟合时,增加特征只会让问题更严重。

这周的核心内容就是教你如何诊断问题出在哪里,然后有针对性地解决。

1.2 诊断:偏差 vs 方差

机器学习中大多数问题可以归为两类:
- 高偏差(High Bias):模型欠拟合,无法捕捉数据中的模式
- 高方差(High Variance):模型过拟合,对训练数据中的噪声过度敏感

类型 训练误差 验证误差 原因 解决方案
高偏差 高(≈验证误差) 模型容量不足 增加特征/减小 λ
高方差 远高于训练误差 模型容量过大 增加数据/增大 λ

二、模型选择与数据集划分

2.1 训练/验证/测试集划分

为了正确评估模型性能并诊断偏差/方差问题,必须将数据划分为三个独立的部分:

典型的划分比例:60% 训练、20% 验证、20% 测试。

重要原则:测试集绝对不能用于模型选择。如果你在多个模型中使用测试集来选择最佳模型,测试集的评估结果会过于乐观——因为你已经间接地将测试集的信息泄露到了模型选择过程中。

2.2 为什么需要验证集

假设我们在尝试 10 个不同 λ 值下的正则化模型。如果不使用验证集——直接在测试集上评估每个 λ 并选择最佳——我们实际上是在用测试集做模型选择。

正确流程:
1. 在每个 λ 下训练模型(使用训练集)
2. 在验证集上评估每个模型的性能
3. 选择验证集上表现最好的 λ
4. 在测试集上评估最终模型的泛化能力

三、偏差与方差的诊断

3.1 多项式次数与偏差/方差

随着多项式次数 d 的增大:
- 训练误差持续下降(并趋向于 0)
- 验证误差先下降后上升(U 形曲线)

d 很小时,训练误差和验证误差都很高——高偏差。
d 合适时,两者都较低——拟合得当。
d 很大时,训练误差很低但验证误差很高——高方差。

3.2 正则化参数 λ 与偏差/方差

λ 控制正则化强度,直接影响偏差/方差权衡:
- λ 很小:训练误差低,验证误差高——高方差
- λ 很大:训练误差高,验证误差也高——高偏差
- λ 适中:两者平衡

四、学习曲线

4.1 学习曲线的定义

学习曲线(Learning Curves)是训练误差和验证误差随训练集大小的变化曲线。它是诊断偏差/方差最强有力的工具之一。

4.2 高偏差情况下的学习曲线

当模型处于高偏差(欠拟合)时:
- 训练误差随着数据量增大而上升,最终稳定在较高水平
- 验证误差随着数据量增大而下降,最终接近训练误差
- 训练误差和验证误差的差距很小,两条曲线都收敛到较高的误差值

特征性质:增加训练数据没有帮助——因为两条曲线已经汇合了。

4.3 高方差情况下的学习曲线

当模型处于高方差(过拟合)时:
- 训练误差很低
- 验证误差远高于训练误差——两者之间存在巨大差距
- 随着数据量增大,训练误差上升,验证误差下降
- 两条曲线之间的差距在缩小

特征性质:增加训练数据非常有帮助——因为验证误差还有明显的下降趋势。

五、误差分析与模型迭代

5.1 误差分析的工作流

当模型效果不够好时,不要随机尝试各种改进——系统化的误差分析更有效:

  1. 在验证集上运行模型
  2. 收集被错误分类的样本
  3. 手动分析这些错误样本,将它们归类
  4. 统计各类错误的比例
  5. 优先解决占比最大的错误类型

例如构建一个垃圾邮件分类器:查看 100 个被错误分类的邮件,发现 30 个是包含大量拼写错误的钓鱼邮件,25 个是包含图片的广告邮件,20 个是讨论敏感话题的正常邮件,15 个是包含链接的邮件,10 个是其他类型。最高优先级的改进方向:针对拼写错误特征和图片内容分析。

Andrew Ng 的一个重要观点:在动手实现之前,先通过误差分析评估改进方向的实际收益

5.2 数值评估的重要性

机器学习系统开发中,数值评估(Numerical Evaluation)是做出正确决策的基础。例如在垃圾邮件分类器中,你想到一个使用电子邮件标题特征的改进想法。不要凭直觉判断——而是在验证集上运行两个版本,对比准确率。

六、类别不平衡与不对称分类

6.1 不对称分类问题

当某个类别的样本数量远远多于其他类别时,直接使用分类准确率可能是误导性的。一个永远预测没有癌症的分类器将获得 99.5% 的准确率——但这个分类器毫无价值。

6.2 精确率与召回率

6.3 权衡精确率与召回率

在逻辑回归中改变分类阈值可以权衡精确率和召回率:
- 提高阈值:精确率提高,召回率降低
- 降低阈值:召回率提高,精确率降低

具体选择取决于应用场景:
- 疾病筛查:宁可误诊不可漏诊 → 高召回率优先
- 垃圾邮件检测:宁可漏收不可误删 → 高精确率优先

七、机器学习系统设计流程

Andrew Ng 的核心建议:
1. 先建立一个简单的基线系统——用最简单的模型快速实现从训练到评估的完整流程
2. 绘制学习曲线——诊断是高偏差还是高方差问题
3. 做误差分析——手动分析错误样本,找出最值得优先解决的方向
4. 数值评估——用一个数字(如 F1 分数)来量化每次改进的效果

第 6 周的内容是机器学习实践中最重要的方法论。偏差/方差诊断告诉你问题出在哪里。学习曲线告诉你增加数据是否有用。误差分析告诉你下一步该做什么改进。这些工具构成了一个系统化的机器学习工作流。

误差分析的完整案例

以构建一个垃圾邮件分类器为例,系统化的误差分析流程:

  1. 从验证集中收集 100 封被错误分类的邮件
  2. 对每封错误邮件进行人工分析,记录其错误类型
  3. 统计各类错误的分布
  4. 按照"错误数量 × 改进难度"的优先级排序

可能的错误类型:
| 错误类型 | 数量 | 占比 | 处理方法 |
|---------|------|------|---------|
| 拼写错误型钓鱼邮件 | 30 | 30% | 开发拼写纠正特征 |
| 图片型广告邮件 | 25 | 25% | 引入 OCR 识图 |
| 敏感话题正常邮件 | 20 | 20% | 增加上下文分析 |
| 包含链接的邮件 | 15 | 15% | 分析链接特征 |
| 其他 | 10 | 10% | 后续处理 |

在这个例子中,优先处理拼写错误和图片内容——这两个方向覆盖了 55% 的错误。

模型集成的思想

模型集成(Ensemble)是提升机器学习性能的另一种有效方法。核心思想:训练多个不同的模型,然后取它们的投票或平均值作为最终预测。

常见的集成方法:
1. Bagging:在不同数据子集上训练相同模型(如随机森林)
2. Boosting:顺序训练模型,每个新模型纠正前一个的错误
3. Stacking:用多个模型的输出作为新模型的输入

虽然课程中未深入讲解集成方法,但在第 6 周的误差分析框架下,集成确实是一种降低方差的有效手段。

机器学习项目的完整工作流

Andrew Ng 推荐的项目工作流:

  1. 定义问题和指标:明确预测目标、选择评估指标
  2. 建立基线:用简单方法(规则、线性模型)建立性能下限
  3. 快速实现:尽快跑通一个端到端的流程
  4. 诊断:绘制学习曲线,判断偏差/方差
  5. 误差分析:手动分析错误样本,找出改进方向
  6. 迭代优化:一次只改一个变量,用数值评估每次改进的效果

这个工作流的核心精神是:用数据驱动决策,而不是凭感觉猜测。每次改进都基于诊断结果和误差分析,而不是随机的尝试。

数值评估的重要性

数值评估是机器学习工程的基础。每次代码变更后,都应该在固定的验证集上运行评估,记录指标变化。一个好的实践是建立一个评估仪表盘——记录每次试验的超参数和对应的验证集指标。这样你可以快速回顾哪些变更有效、哪些无效。

A/B 测试则是评估模型上线的最终方法。在真实用户流量中,将用户随机分为两组——一组使用旧模型,一组使用新模型——对比两组的业务指标(如点击率、转化率)。只有 A/B 测试的正面结果才能证明新模型确实带来了业务价值的提升。

正则化与偏差-方差的关系

正则化是调控偏差-方差平衡的核心工具。当 λ 增大时:
- 模型复杂度降低(更少的有效参数)
- 训练误差增大(偏差增大)
- 验证误差先下降(方差减小)后上升(偏差过大)

最优的 λ 值位于验证误差 U 形曲线的最低点。

模型选择交叉验证

K-fold 交叉验证是一种更稳定的模型评估方法:
1. 将训练集随机均匀分成 K 份
2. 对于每份,用剩余的 K-1 份训练,在该份上验证
3. 计算 K 次验证的平均性能

常用的 K 值为 5 或 10。K=10 时,90% 的数据用于训练,10% 用于验证——评估的方差较小,但计算量也较大。

数据增强的实践方法

数据增强是增加有效训练数据量的常用技术,特别适用于图像和文本数据:

图像数据增强:
- 随机旋转、平移、裁剪
- 颜色抖动(亮度、对比度、饱和度调整)
- 随机遮挡(Random Erasing)
- 水平翻转

文本数据增强:
- 同义词替换
- 随机插入或交换
- 回译(翻译成中间语言再翻译回来)

数据增强可以显著减少过拟合,提升模型的泛化能力。

误差分析的具体步骤

误差分析是一个迭代的过程。首先,通过学习曲线确定模型处于高偏差还是高方差状态。然后,从验证集中随机抽取一批被错误分类的样本进行手动检查。对于每个错误样本,记录你认为模型为什么会分类错误——是特征不足、数据噪声太大、还是标注错误?将这些原因分类统计后,你就知道应该优先改进哪个方向了。

非对称分类的评估指标

在垃圾邮件分类、癌症检测等非对称分类问题中,使用单一指标(如准确率)会带来误导。混淆矩阵提供了更全面的信息——它包含真正例(TP)、假正例(FP)、真负例(TN)、假负例(FN)四种情况。

除了前面讨论的精确率和召回率,ROC曲线也是评估分类模型的重要工具。ROC曲线以假正例率(FPR)为横轴、真正例率(TPR)为纵轴,展示了模型在不同阈值下的表现。曲线下面积(AUC)提供了一个不依赖于阈值的整体性能度量——AUC越接近1,模型越好。

机器学习项目的优先级优先级排序

当你有多个改进方向时,如何确定优先级?Andrew Ng 建议使用一个简单的框架:预估每个方向可能带来的性能提升 × 实现所需的时间。"低投入高回报"的方向优先——比如一个只需要2小时实现的简单特征变换可能带来5%的性能提升,而一个需要2周实现的复杂模型可能只带来1%的提升——显然应该先做前者。

模型的可信度评估

在实际部署机器学习系统时,不仅需要关注模型的预测性能,还需要评估模型的可信度。对于分类模型,如果模型输出概率(如逻辑回归的Sigmoid输出)是否经过校准?一个校准良好的模型应该满足"当模型预测概率为70%时,实际正确率也是70%"——这在医疗诊断等高风险应用中非常重要。

延伸阅读

← 第5周:神经网络的学习 第7周:支持向量机 →