* 这表明模型能很好地泛化到训练-开发集与训练集同分布但无法泛化到标准开发集。原因只能是标准开发集与训练集的分布差异很大。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_15.png具体示例猫图像分类器让我们通过一个具体例子来理解。假设我们正在构建一个猫图像分类器。训练集包含猫和其他动物的图像。训练-开发集从训练集中抽样因此也包含猫和其他动物。开发集和测试集只包含猫的图像因为我们最终只评估对猫的分类性能。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_17.png现在观察以下误差模式高方差示例训练误差 2%训练-开发误差 6%标准开发误差 6%模型能完美拟合训练集但即使在同分布的训练-开发集上误差也更大这表明过拟合。高偏差示例训练误差 10%训练-开发误差 11%标准开发误差 12%人类误差 1%即使训练误差也远未接近人类误差这是高可避免偏差的典型例子。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_19.png分布不匹配示例训练误差 4%训练-开发误差 5%标准开发误差 13%模型能泛化到训练-开发集但不能泛化到标准开发集这明确指向了分布不匹配。量化分布不匹配误差我们可以在之前学习的误差分解基础上增加一个分布不匹配分量从而更精确地量化开发误差。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_21.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_22.png开发误差可以分解为开发误差 (可避免偏差) (方差) (分布不匹配) (不可避免偏差)更形式化地我们可以这样表示Err_dev (Err_train - Err_bayes) (Err_dev_train - Err_train) (Err_dev - Err_dev_train)其中Err_train - Err_bayes近似为可避免偏差。Err_dev_train - Err_train代表了分布不匹配因为训练-开发集与训练集同分布此差值反映了模型对同分布新数据的泛化能力若差值大则说明训练集本身可能有问题但这里我们主要关注下一项。Err_dev - Err_dev_train是关键的分布不匹配量化指标它直接衡量了开发集分布与训练集分布之间的差异所导致的额外误差。剩余部分为不可避免偏差。这是一种更定量化的方式来表述我们刚刚描述的概念。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_24.png检测开发集与测试集的“陈旧化”尽管这个想法是在训练集和开发集的背景下描述的但我们也可以在其他上下文中使用它。例如我们可以使用相同的思路来检测开发集和测试集是否“陈旧”即它们是否不再代表生产数据分布。为了确定它们是否陈旧我们会收集额外的真实世界数据并将其作为另一个开发集或测试集可称为“真实世界数据集”。如果我们的模型在旧的开发集上泛化得很好但在新数据集上表现不佳那就意味着我们的旧数据已经变得陈旧是时候更新我们的数据集了。在实践中当机器学习系统部署到生产环境后数据最终都会变得陈旧因此监控这种行为非常重要。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_26.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_27.png如何解决数据不匹配问题 ️最后如何解决数据不匹配问题本质上这需要理解导致不匹配的数据属性。我们需要弄清楚不匹配是因为我们在不同环境中收集数据例如用户来自不同国家不同数据集的国家分布不同还是因为数据采集条件不同例如一些声音在汽车内录制另一些在安静房间内录制或者是其他原因例如语音录音中有不同口音。理解导致差异的具体属性非常重要。一旦理解了这些属性我们就希望最小化它们的影响。我们可以选择移除导致不匹配的数据部分。添加更多匹配良好的数据来弥补任何缺陷。理解数据的哪些属性导致了不匹配以及应该移除或添加哪些数据最好的方法是通过检查数据。这可以通过我们之前学过的误差分析来完成。误差分析是一个有效且通用的过程用于理解如何修复机器学习模型、模型主要犯哪些错误。同样的过程可以应用在这里以解释机器学习系统的错误并解释数据或分布不匹配在此过程中的作用。总结https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_29.png在本节课中我们一起学习了机器学习中的分布不匹配问题。我们了解到当训练数据与评估数据开发集/测试集来自不同分布时模型的性能会受到影响。我们介绍了使用训练-开发集来诊断这一问题的方法并通过分析训练误差、训练-开发误差和开发误差的模式来区分高方差、高偏差和分布不匹配。我们还探讨了如何量化分布不匹配误差以及如何检测数据集的“陈旧化”。最后我们讨论了解决数据不匹配的策略核心在于理解数据差异的属性并通过误差分析指导数据集的修正。掌握这些诊断和解决方法对于构建鲁棒且能在真实世界中良好工作的机器学习系统至关重要。
康奈尔 CS5787 应用机器学习笔记(六)
发布时间:2026/7/13 8:30:45
* 这表明模型能很好地泛化到训练-开发集与训练集同分布但无法泛化到标准开发集。原因只能是标准开发集与训练集的分布差异很大。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_15.png具体示例猫图像分类器让我们通过一个具体例子来理解。假设我们正在构建一个猫图像分类器。训练集包含猫和其他动物的图像。训练-开发集从训练集中抽样因此也包含猫和其他动物。开发集和测试集只包含猫的图像因为我们最终只评估对猫的分类性能。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_17.png现在观察以下误差模式高方差示例训练误差 2%训练-开发误差 6%标准开发误差 6%模型能完美拟合训练集但即使在同分布的训练-开发集上误差也更大这表明过拟合。高偏差示例训练误差 10%训练-开发误差 11%标准开发误差 12%人类误差 1%即使训练误差也远未接近人类误差这是高可避免偏差的典型例子。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_19.png分布不匹配示例训练误差 4%训练-开发误差 5%标准开发误差 13%模型能泛化到训练-开发集但不能泛化到标准开发集这明确指向了分布不匹配。量化分布不匹配误差我们可以在之前学习的误差分解基础上增加一个分布不匹配分量从而更精确地量化开发误差。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_21.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_22.png开发误差可以分解为开发误差 (可避免偏差) (方差) (分布不匹配) (不可避免偏差)更形式化地我们可以这样表示Err_dev (Err_train - Err_bayes) (Err_dev_train - Err_train) (Err_dev - Err_dev_train)其中Err_train - Err_bayes近似为可避免偏差。Err_dev_train - Err_train代表了分布不匹配因为训练-开发集与训练集同分布此差值反映了模型对同分布新数据的泛化能力若差值大则说明训练集本身可能有问题但这里我们主要关注下一项。Err_dev - Err_dev_train是关键的分布不匹配量化指标它直接衡量了开发集分布与训练集分布之间的差异所导致的额外误差。剩余部分为不可避免偏差。这是一种更定量化的方式来表述我们刚刚描述的概念。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_24.png检测开发集与测试集的“陈旧化”尽管这个想法是在训练集和开发集的背景下描述的但我们也可以在其他上下文中使用它。例如我们可以使用相同的思路来检测开发集和测试集是否“陈旧”即它们是否不再代表生产数据分布。为了确定它们是否陈旧我们会收集额外的真实世界数据并将其作为另一个开发集或测试集可称为“真实世界数据集”。如果我们的模型在旧的开发集上泛化得很好但在新数据集上表现不佳那就意味着我们的旧数据已经变得陈旧是时候更新我们的数据集了。在实践中当机器学习系统部署到生产环境后数据最终都会变得陈旧因此监控这种行为非常重要。https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_26.pnghttps://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_27.png如何解决数据不匹配问题 ️最后如何解决数据不匹配问题本质上这需要理解导致不匹配的数据属性。我们需要弄清楚不匹配是因为我们在不同环境中收集数据例如用户来自不同国家不同数据集的国家分布不同还是因为数据采集条件不同例如一些声音在汽车内录制另一些在安静房间内录制或者是其他原因例如语音录音中有不同口音。理解导致差异的具体属性非常重要。一旦理解了这些属性我们就希望最小化它们的影响。我们可以选择移除导致不匹配的数据部分。添加更多匹配良好的数据来弥补任何缺陷。理解数据的哪些属性导致了不匹配以及应该移除或添加哪些数据最好的方法是通过检查数据。这可以通过我们之前学过的误差分析来完成。误差分析是一个有效且通用的过程用于理解如何修复机器学习模型、模型主要犯哪些错误。同样的过程可以应用在这里以解释机器学习系统的错误并解释数据或分布不匹配在此过程中的作用。总结https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/crnl-cs5787-appml/img/1c34be1fd80b3b04a4b5249596399026_29.png在本节课中我们一起学习了机器学习中的分布不匹配问题。我们了解到当训练数据与评估数据开发集/测试集来自不同分布时模型的性能会受到影响。我们介绍了使用训练-开发集来诊断这一问题的方法并通过分析训练误差、训练-开发误差和开发误差的模式来区分高方差、高偏差和分布不匹配。我们还探讨了如何量化分布不匹配误差以及如何检测数据集的“陈旧化”。最后我们讨论了解决数据不匹配的策略核心在于理解数据差异的属性并通过误差分析指导数据集的修正。掌握这些诊断和解决方法对于构建鲁棒且能在真实世界中良好工作的机器学习系统至关重要。