你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在生成机器学习模型时,过度拟合和不均衡数据是常见的错误。 默认情况下,Azure 机器学习中的自动化 ML 功能提供图表和指标来帮助识别这些风险。 本文介绍如何在自动化 ML 中实现最佳做法,帮助解决常见问题。
识别过度拟合
如果模型过于适合训练数据,则将发生机器学习中的过度拟合。 这会导致模型无法对没见过的测试数据进行准确的预测。 模型会记住训练数据中的特定模式和噪音,并且对实际数据进行预测不够灵活。
请考虑以下经过训练的模型及其相应的训练和测试准确度:
| 模型 | 定型准确度 | 测试准确度 |
|---|---|---|
| A | 99.9% | 95% |
| B | 87% | 87% |
| C | 99.9% | 45% |
模型 A:此模型的测试生成的准确度略低于模型训练。 存在一种常见的误解:对于没见过的数据,如果测试准确度低于训练准确度,则该模型过度拟合。 但是,测试准确度应始终低于训练准确度。 过度拟合与拟合适当的数据之间的区别在于测量准确度的减少程度。
模型 A 对比模型 B:模型 A 更好,因为它的测试准确度更高。 虽然测试准确度 (95%) 略低,但这一误差并不显著,不能说明存在过度拟合。 模型 B 不是首选项,因为训练和测试的准确度相似。
模型 C:此模型明显表示存在过度拟合。 训练准确度很高,测试准确度较低。 这种分辨方式虽然较主观,但却是从对问题和数据的了解以及可接受的误差大小中得出的。
防止过度拟合
在大多数极端情况下,过度拟合的模型假定在训练期间可见的特征值组合始终会导致目标输出完全相同。 若要避免过度拟合数据,请遵循机器学习最佳做法。 可以在模型实现中配置多种方法。 默认情况下,自动化 ML 还提供其他选项来帮助防止过度拟合。
下表总结了常见最佳做法:
| 最佳做法 | 实现 | 自动化机器学习 |
|---|---|---|
| 使用更多训练数据并消除统计偏差 | X | |
| 防止目标泄漏 | X | |
| 合并更少的特征 | X | |
| 支持正则化和超参数优化 | X | |
| 应用模型复杂性限制 | X | |
| 使用交叉验证 | X |
应用最佳做法以防止过度拟合
以下部分介绍可在机器学习模型实现中使用的防止过度拟合最佳做法。
使用更多数据
使用更多数据是防止过度拟合的最简单和最佳方法,此方法通常会提高准确性。 使用更多数据时,模型更难记住确切的模式。 这能迫使模型给出更灵活的解决方案,以适应更多条件。 识别统计偏差也很重要,确保你的定型数据不包含实时预测数据中不存在的独立模式。 这种情况可能很难解决,因为与实时测试数据相比,可能存在过度拟合的情况。
防止目标泄漏
目标泄露是一个类似的问题。 在训练集和测试集之间可能没有出现过度拟合,但泄露问题会出现在预测时。 当你的模型在训练期间“作弊”,访问在预测时不应有的数据时,就会发生目标泄露。 例如,模型在星期一预测商品在星期五的价格。 如果特征意外包含来自星期四的数据,则模型能够访问预测时不可用的数据,因为它看不到未来。 目标泄露是一个容易忽略的错误。 通常在问题的准确度异常高的情况下能看到发生此错误。 如果你正在尝试预测股票价格,并且定型模型的准确度为 95%,则功能中可能存在目标泄漏。
合并更少的特征
移除功能也有助于避免过度拟合,因为这样做可防止模型使用太多字段来记住特定模式,从而使模型更加灵活。 很难量化衡量。 如果可以移除特征并保留相同的准确度,则模型可能更加灵活,并降低过度拟合的风险。
查看自动化 ML 功能以防止过度拟合
以下部分介绍自动化 ML 中默认提供的最佳做法,以帮助防止过度拟合。
支持正则化和超参数优化
正则化是最小化代价函数以惩罚复杂和过度拟合模型的过程。 正则化函数有很多不同类型。 通常,所有函数都会惩罚模型系数大小、方差和复杂性。 自动化 ML 以不同的组合使用 L1(套索)、L2(岭)和 ElasticNet(同时使用 L1 和 L2),各个组合使用不同的模型超参数设置来控制过度拟合。 自动化 ML 会改变模型的管控程度,并选择最佳结果。
应用模型复杂性限制
自动化 ML 还实现了显式的模型复杂性限制来防止过度拟合。 在大多数情况下,此实现专门用于决策树或林算法。 单个树的最大深度有限,林或集成技术中使用的树总数有限。
使用交叉验证
交叉验证 (CV) 是从完整训练数据提取许多子集并针对每个子集训练一个模型的过程。 其思路是,针对某个子集时,模型可能会“幸运地”具有高准确度,但在使用多个子集时,模型无法每次都实现高准确度。 当执行 CV 时,你需要提供一个验证维持数据集并指定你的 CV 折叠数(子集数),自动化 ML 会训练你的模型并调整超参数以最大程度地减少验证集上的错误。 可能有一个 CV 折过度拟合,但如果使用许多折,该过程可以减少最终模型过度拟合的可能性。 缺点是 CV 会导致训练时间变长,从而导致成本增加,因为你针对 CV 子集中的每个 n 对某个模型训练一次。
注意
默认情况下不启用交叉验证。 必须在自动化机器学习设置中配置此功能。 但是,在配置交叉验证并提供验证数据集后,此过程将自动执行。
标识具有不均衡数据的模型
机器学习分类方案中常见的不均衡数据。 它是指数据中每个类别的观察值比例不均衡。 这种不平衡可能导致错误地认为模型的准确性有积极影响,因为输入数据偏向于一个类别,结果导致训练的模型也模拟这种偏见。
此外,自动化 ML 作业还自动生成以下图表。 这些图表有助于了解模型分类的正确性,并识别可能会受到不均衡数据影响的模型。
| 图表 | 说明 |
|---|---|
| 混淆矩阵 | 针对数据的实际标签评估正确分类的标签。 |
| 精准率-召回率 | 针对找到的数据标签实例的比率,评估正确标签的比率。 |
| ROC 曲线 | 针对假正标签的比率评估正确标签的比率。 |
处理不均衡数据
为了简化机器学习工作流,自动化 ML 提供内置功能来帮助处理不平衡的数据:
自动化 ML 将创建一个 权重列 作为输入,使数据行的权重上升或下降。 可以使用此列来调整类的重要性,使其更加或较不“重要”。
当少数类的样本数等于或小于多数类的样本数的 20% 时,自动化 ML 所使用的算法会检测到不平衡。 少数类是指样本最少的类,多数类是指样本最多的类。 然后,自动化机器学习会使用子采样的数据运行试验,以检查使用类权重是否可以纠正此问题并提高性能。 如果通过此试验确定性能得到提高,则采用此补救措施。
使用可更好地处理不均衡数据的性能指标。 例如,AUC_weighted 是一项主要指标,它基于表示每个类的样本的相对数量计算该类的贡献。 此指标在存在不平衡时更可靠。
除自动化 ML 之外,下面提供了一些可用于处理不平衡数据的其他方法:
重新采样,使类的不平衡变为平衡。 可以上采样较小的类或下采样更大的类。 这些方法需要专业技能来处理和分析。
查看不平衡数据的性能指标。 例如,F1 分数是精准率和召回率的调和平均值。 精度测量分类器的精确性,精度更高表示误报更少。 召回率测量分类器的完整性,召回率更高表示误报更少。