交叉验证模型
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
通过将数据分区来交叉验证分类或回归模型的参数估计值
类别:机器学习/评估
模块概述
本文介绍如何使用 机器学习 Studio 中的交叉验证模型模块 (经典) 。 交叉验证 是机器学习中经常用于评估数据集的可变性以及使用该数据训练的任何模型的可靠性的重要技术。
交叉 验证模型模块 将标记数据集与未训练的分类或回归模型一起用作输入。 它将数据集分割成某个数量的子集(折),在每个折上生成一个模型,然后为每个折返回一组准确度统计信息。 通过比较所有折叠的准确性统计信息,可以解释数据集的质量并了解模型是否容易受到数据变化的影响。
交叉验证还会返回数据集的预测结果和概率,以便评估预测的可靠性。
交叉验证的工作原理
交叉验证随机将训练数据划分为多个分区,也称为 折叠。
- 如果未事先将数据集分区,则算法默认使用 10 个折。
- 若要将数据集分割成不同数量的折,可以使用分区和采样模块并指定要使用的折数。
模块将折叠 1 中用于验证的数据 (这有时称为"保持折叠) ,并使用剩余的折叠来训练模型。
例如,如果创建五个折叠,该模块将在交叉验证期间生成五个模型,每个模型使用 4/5 的数据进行训练,并针对剩余的 1/5 进行测试。
在测试每个折叠的模型期间,将评估多个准确性统计信息。 使用哪些统计信息取决于要评估的模型类型。 不同的统计信息用于评估分类模型与回归模型。
当所有折叠的生成和评估过程完成后,交叉验证模型会生成一组性能指标,并生成所有数据的评分结果。 应查看这些指标,以查看任何单个折叠的准确度是否特别高或低
交叉验证的优势
另一种非常常见的模型评估方法就是使用拆分数据将数据划分为训练集和测试集,然后根据训练数据验证模型。 但是,交叉验证有一些优点:
交叉验证使用更多的测试数据。
交叉验证使用较大数据空间中指定的参数来度量模型的性能。 也就是说,交叉验证使用整个训练数据集进行训练和评估,而不是使用某些部分。 与此相反,如果使用随机拆分生成的数据验证模型,通常你只能在 30% 或更少的可用数据上评估模型。
但是,由于交叉验证在较大的数据集上多次训练和验证模型,因此它的计算密集型要长得多,并且比对随机拆分进行验证要长得多。
交叉验证评估数据集和模型。
交叉验证不仅可以度量模型的准确性,还可以让你了解数据集的代表性,以及模型对数据变体的敏感性。
如何使用交叉验证模型
使用交叉验证有两种主要方法。
如果使用大量的数据,则交叉验证可能需要很长时间才能运行。 因此,在生成和测试模型的初始阶段,可以使用交叉验证模型来评估模型参数 (假设计算时间可承受的) ,然后使用已建立的参数和训练模型和评估模型模块来训练和评估模型。
简单交叉验证
在此方案中,使用交叉验证模型训练 和测试模型。
将 交叉验证模型模块 添加到试验。 可以在 机器学习 Studio (经典) 的"机器学习"下找到它。
-
例如,如果使用双类贝叶斯点计算机进行分类,请用你选择的参数配置模型,然后将一个连接器从分类器未训练的模型端口拖动到交叉验证模型的匹配端口。
提示
无需训练模型,因为 交叉验证模型 会在评估时自动训练模型。
在交叉 验证 模型的数据集 端口上,连接任何标记的训练数据集。
在交叉验证模型的"属性"窗格中,单击"启动列选择器",然后选择包含类标签或可预测值的单个列。
如果要在同一数据上的连续运行中重复交叉验证的结果,请为 Random 种子 参数设置一个值。
运行试验。
有关报告的说明,请参阅结果部分。
若要获取模型的副本供以后使用,请右键单击包含算法的模块的输出 (例如 Two Class Bayes Point Machine) ,然后单击"另存为训练模型"。
使用参数扫描进行交叉验证
在此方案中,使用优化模型 超 参数通过执行参数扫描来识别最佳模型,然后使用 交叉 验证模型来检查其可靠性。 这是确定最佳模型机器学习并生成指标的最简单方法。
添加用于模型训练的数据集,并添加一个用于创建分类或回归模型的机器学习模块。
将 "优化模型超参数"模块 添加到试验。 可以在"训练"下的"机器学习"类别中找到它。
将分类或回归模型附加到 优化模型 超参数的未训练 模型输入。
将 交叉验证模型模块 添加到试验。 可以在 机器学习 Studio (经典) 的"机器学习"下找到它。
找到"优化模型超参数"的"训练的最佳模型输出",将其连接到交叉验证模型的未训练模型输入。
连接训练数据到交叉验证模型的训练数据集输入。
运行试验。
查看结果和评估分数后,若要获取最佳模型的副本供以后使用,只需右键单击"优化模型超参数"模块,选择"训练的最佳模型",然后单击"另存为已训练模型"。
注意
如果将优化模型超参数模块中的输入用于可选验证数据集 , 可能会 获得不同的结果。
这是因为使用此选项时,实际上指定了静态训练数据集和测试数据集。 因此,交叉验证过程还使用指定的训练和测试数据集,而不是将数据拆分为 n 组进行训练和测试。 但是,指标以 n 倍为基础生成。
结果
完成所有迭代后,交叉验证模型将创建整个数据集的分数,以及可用于评估模型质量的性能指标。
评分结果
模块的第一个输出提供每个行的源数据,以及一些预测值和相关概率。
若要查看这些结果,请在试验中右键单击"交叉验证模型"模块,选择"评分结果",然后单击"可视化"。
新列名 | 说明 |
---|---|
折叠分配 | 指示在交叉验证期间将数据的每行分配到的折叠的从 0 开始索引。 |
评分标签 | 此列在数据集的末尾添加,并包含每行的预测值 |
评分概率 | 此列将添加到数据集的末尾,并指示评分标签中值 的估计概率。 |
评估结果
第二份报告已按折分组。 请记住,在执行期间, 交叉 验证模型将训练数据随机拆分为 n 个折叠 (,默认为 10) 。 在数据集的每次迭代中, 交叉 验证模型使用一个折作为验证数据集,并使用剩余的 n-1 折来训练模型。 将会根据所有其他折中的数据测试 n 个模型中的每个模型。
在此报告中,将按索引值的升序列出折。 若要对其他任何列进行排序,可以将结果保存为数据集。
若要查看这些结果,请在试验中右键单击 交叉验证模型 模块,选择 " 通过折叠计算结果",然后单击 " 可视化"。
列名称 | 说明 |
---|---|
折编号 | 每个折的标识符。 如果创建了5个折叠,则会有5个数据子集,编号为0到4。 |
折中的示例数 | 分配给每个折的行数。 它们应大致相等。 |
建模 | 模型中使用的算法,由 API 名称标识 |
此外,对于每个折页,都包含以下度量值,具体取决于您要评估的模型的类型。
分类模型:精度、回调、F 评分、AUC、平均日志丢失、定型日志丢失
回归模型:否定日志可能性,平均绝对错误,根本平均平方误差,相对绝对错误和确定系数
示例
有关如何在机器学习中使用交叉验证的示例,请参阅 Azure AI 库:
二元分类器的交叉验证:演示如何使用二进制分类模型的交叉验证。
交叉验证回归:自动导入数据集:演示如何使用回归模型的交叉验证以及如何解释结果。
技术说明
在将数据集用于交叉验证之前对其进行规范化是最佳做法。
因为 交叉验证模型 会多次定型和验证模型,所以,计算工作量要多得多,并且完成时间比使用随机分割的数据集验证模型要长得多。
我们建议你使用交叉验证模型根据给定的指定参数确立模型的优点。 使用 调谐模型超参数 来标识最佳参数。
使用交叉验证衡量模型的准确性时,无需将数据集拆分为定型集和测试集。
但是,如果在上游提供验证数据集,则该模块将使用指定的定型和测试数据集,而不是拆分为 n 个折叠。 也就是说,第一个数据集用于定型每个参数组合的模型,并且对验证数据集计算模型。 请参阅有关 使用带有交叉验证的参数扫描的部分。
尽管本文使用的是较旧版本的模块,但它对交叉验证过程有一个很好的解释:如何在机器学习中选择用于优化算法的参数
预期输入
名称 | 类型 | 说明 |
---|---|---|
未训练的模型 | ILearner 接口 | 用来对数据集进行交叉验证的未训练模型 |
数据集 | 数据表 | 输入数据集 |
模块参数
名称 | 范围 | 类型 | 默认 | 说明 |
---|---|---|---|---|
标签列 | any | ColumnSelection | 选择包含用于验证的标签的列 | |
随机种子 | any | Integer | 0 | 随机数生成器的种子值 此值是可选的。 如果未指定 |
Outputs
名称 | 类型 | 说明 |
---|---|---|
评分结果 | 数据表 | 评分的结果 |
按折叠列出的评估结果 | 数据表 | 评估结果(按折叠和整体) |
例外
异常 | 描述 |
---|---|
错误 0035 | 如果没有提供给定用户或项的任何特征,将出现异常。 |
错误 0032 | 如果参数不是数字,将出现异常。 |
错误 0033 | 如果参数是无穷大,将出现异常。 |
错误 0001 | 如果找不到数据集的一个或多个指定列,将出现异常。 |
错误 0003 | 如果一个或多个输入为 NULL 或为空,将出现异常。 |
错误 0006 | 如果参数大于或等于指定值,将出现异常。 |
错误 0008 | 如果参数不在范围内,将出现异常。 |
错误 0013 | 如果传递给该模块的学习器具有无效的类型,则会出现异常。 |
有关特定于 Studio (经典) 模块的错误列表,请参阅机器学习错误代码。
有关 API 异常的列表,请参阅机器学习 REST API 错误代码。