第6周:应用机器学习的建议
课程简介
偏差方差权衡、学习曲线、误差分析、机器学习系统设计。
🎬 本课程视频:吴恩达机器学习 (2014) — 交互式学习笔记
一、调试机器学习模型的方法论
1.1 问题:模型效果不好怎么办
你花了大量时间训练了一个模型,但它在测试集上的表现远不如预期。接下来你会做什么?
常见的直觉性尝试:
- 收集更多训练数据
- 尝试更小的特征集
- 增加更多特征
- 添加多项式特征
- 增大 λ(正则化强度)
- 减小 λ
问题在于——如果你随便选一个方向尝试,很可能浪费大量时间。比如当模型欠拟合时,增加训练数据完全没有用;而当模型过拟合时,增加特征只会让问题更严重。
这周的核心内容就是教你如何诊断问题出在哪里,然后有针对性地解决。
1.2 诊断:偏差 vs 方差
机器学习中大多数问题可以归为两类:
- 高偏差(High Bias):模型欠拟合,无法捕捉数据中的模式
- 高方差(High Variance):模型过拟合,对训练数据中的噪声过度敏感
| 类型 | 训练误差 | 验证误差 | 原因 | 解决方案 |
|---|---|---|---|---|
| 高偏差 | 高(≈验证误差) | 高 | 模型容量不足 | 增加特征/减小 λ |
| 高方差 | 低 | 远高于训练误差 | 模型容量过大 | 增加数据/增大 λ |
二、模型选择与数据集划分
2.1 训练/验证/测试集划分
为了正确评估模型性能并诊断偏差/方差问题,必须将数据划分为三个独立的部分:
- 训练集(Training Set):用于训练模型参数
- 验证集(Validation Set):用于模型选择、超参数调优
- 测试集(Test Set):用于最终评估模型泛化性能
典型的划分比例: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 误差分析的工作流
当模型效果不够好时,不要随机尝试各种改进——系统化的误差分析更有效:
- 在验证集上运行模型
- 收集被错误分类的样本
- 手动分析这些错误样本,将它们归类
- 统计各类错误的比例
- 优先解决占比最大的错误类型
例如构建一个垃圾邮件分类器:查看 100 个被错误分类的邮件,发现 30 个是包含大量拼写错误的钓鱼邮件,25 个是包含图片的广告邮件,20 个是讨论敏感话题的正常邮件,15 个是包含链接的邮件,10 个是其他类型。最高优先级的改进方向:针对拼写错误特征和图片内容分析。
Andrew Ng 的一个重要观点:在动手实现之前,先通过误差分析评估改进方向的实际收益。
5.2 数值评估的重要性
机器学习系统开发中,数值评估(Numerical Evaluation)是做出正确决策的基础。例如在垃圾邮件分类器中,你想到一个使用电子邮件标题特征的改进想法。不要凭直觉判断——而是在验证集上运行两个版本,对比准确率。
六、类别不平衡与不对称分类
6.1 不对称分类问题
当某个类别的样本数量远远多于其他类别时,直接使用分类准确率可能是误导性的。一个永远预测没有癌症的分类器将获得 99.5% 的准确率——但这个分类器毫无价值。
6.2 精确率与召回率
- 精确率(Precision) = TP / (TP + FP)——预测为正类中有多少是真的正类
- 召回率(Recall) = TP / (TP + FN)——真实正类中有多少被正确预测
- F1 分数 = 2 · P · R / (P + R)——精确率和召回率的调和平均
6.3 权衡精确率与召回率
在逻辑回归中改变分类阈值可以权衡精确率和召回率:
- 提高阈值:精确率提高,召回率降低
- 降低阈值:召回率提高,精确率降低
具体选择取决于应用场景:
- 疾病筛查:宁可误诊不可漏诊 → 高召回率优先
- 垃圾邮件检测:宁可漏收不可误删 → 高精确率优先
七、机器学习系统设计流程
Andrew Ng 的核心建议:
1. 先建立一个简单的基线系统——用最简单的模型快速实现从训练到评估的完整流程
2. 绘制学习曲线——诊断是高偏差还是高方差问题
3. 做误差分析——手动分析错误样本,找出最值得优先解决的方向
4. 数值评估——用一个数字(如 F1 分数)来量化每次改进的效果
第 6 周的内容是机器学习实践中最重要的方法论。偏差/方差诊断告诉你问题出在哪里。学习曲线告诉你增加数据是否有用。误差分析告诉你下一步该做什么改进。这些工具构成了一个系统化的机器学习工作流。
误差分析的完整案例
以构建一个垃圾邮件分类器为例,系统化的误差分析流程:
- 从验证集中收集 100 封被错误分类的邮件
- 对每封错误邮件进行人工分析,记录其错误类型
- 统计各类错误的分布
- 按照"错误数量 × 改进难度"的优先级排序
可能的错误类型:
| 错误类型 | 数量 | 占比 | 处理方法 |
|---------|------|------|---------|
| 拼写错误型钓鱼邮件 | 30 | 30% | 开发拼写纠正特征 |
| 图片型广告邮件 | 25 | 25% | 引入 OCR 识图 |
| 敏感话题正常邮件 | 20 | 20% | 增加上下文分析 |
| 包含链接的邮件 | 15 | 15% | 分析链接特征 |
| 其他 | 10 | 10% | 后续处理 |
在这个例子中,优先处理拼写错误和图片内容——这两个方向覆盖了 55% 的错误。
模型集成的思想
模型集成(Ensemble)是提升机器学习性能的另一种有效方法。核心思想:训练多个不同的模型,然后取它们的投票或平均值作为最终预测。
常见的集成方法:
1. Bagging:在不同数据子集上训练相同模型(如随机森林)
2. Boosting:顺序训练模型,每个新模型纠正前一个的错误
3. Stacking:用多个模型的输出作为新模型的输入
虽然课程中未深入讲解集成方法,但在第 6 周的误差分析框架下,集成确实是一种降低方差的有效手段。
机器学习项目的完整工作流
Andrew Ng 推荐的项目工作流:
- 定义问题和指标:明确预测目标、选择评估指标
- 建立基线:用简单方法(规则、线性模型)建立性能下限
- 快速实现:尽快跑通一个端到端的流程
- 诊断:绘制学习曲线,判断偏差/方差
- 误差分析:手动分析错误样本,找出改进方向
- 迭代优化:一次只改一个变量,用数值评估每次改进的效果
这个工作流的核心精神是:用数据驱动决策,而不是凭感觉猜测。每次改进都基于诊断结果和误差分析,而不是随机的尝试。
数值评估的重要性
数值评估是机器学习工程的基础。每次代码变更后,都应该在固定的验证集上运行评估,记录指标变化。一个好的实践是建立一个评估仪表盘——记录每次试验的超参数和对应的验证集指标。这样你可以快速回顾哪些变更有效、哪些无效。
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%"——这在医疗诊断等高风险应用中非常重要。
延伸阅读
- 📺 B 站播放列表:吴恩达机器学习 (2014) — 交互式学习笔记
- 📚 更多学习资源,请访问 deeplearning.ai 官网