交叉验证 是分析中的标准工具,是帮助你开发和微调数据挖掘模型的重要功能。 创建挖掘结构和相关挖掘模型后,可以使用交叉验证来确定模型的有效性。 交叉验证具有以下应用程序:
验证特定挖掘模型的稳定性。
从单个语句评估多个模型。
生成多个模型,然后根据统计信息确定最佳模型。
本部分介绍如何使用为数据挖掘提供的交叉验证功能,以及如何根据单个数据集解释单个模型或多个模型的交叉验证结果。
交叉验证过程概述
交叉验证包括两个阶段:训练和结果生成。 这些阶段包括以下步骤:
选择目标数据挖掘结构。
指定要测试的模型。 此步骤是可选的;还可以仅测试挖掘结构。
指定用于测试已训练模型的参数。
可预测属性、预测值和准确性阈值。
将结构或模型数据分为指定数量的折叠。
Analysis Services 会创建和训练尽可能多的模型,因为有折叠。
Analysis Services 为每个模型中的每个折叠或整个数据集返回一组准确性指标。
配置交叉验证
可以自定义交叉验证的工作方式,以控制交叉部分的数量、测试的模型以及预测的准确性条。 如果使用交叉验证存储过程,还可以指定用于验证模型的数据集。 这种丰富的选择意味着可以轻松生成许多不同的结果集,然后必须进行比较和分析。
本部分提供有助于正确配置交叉验证的信息。
设置分区数
指定分区数时,可以确定将创建多少个临时模型。 对于每个分区,数据交叉部分将标记为用作测试集,并通过训练分区中未包含的剩余数据创建一个新模型。 此过程将重复,直到 Analysis Services 创建并测试指定数量的模型。 指定为可用于交叉验证的数据在所有分区之间均匀分布。
该图中的示例演示了指定三折叠时数据的用法。
在示意图中的场景中,挖掘结构包含一个用于测试的保留数据集,但用于交叉验证的测试数据集尚未被纳入。 因此,训练数据集中的所有数据(挖掘结构中 70% 的数据)用于交叉验证。 交叉验证报告显示每个分区中使用的案例总数。
还可以通过指定要使用的总体事例数来指定交叉验证期间使用的数据量。 案例均匀分布于所有分组中。
对于存储在 SQL Server Analysis Services 实例中的挖掘结构,可以为折叠数设置的最大值为 256,或事例数(以较小者为准)。 如果使用会话挖掘结构,最大折叠数为 10。
注释
随着折叠数的增加,执行交叉验证所需的时间会相应地增加,因为必须为每个折叠生成并测试模型。 如果折叠数过高,可能会遇到性能问题。
设置准确性阈值
状态门槛让您可以设置预测的准确性标准。 对于每个情况,模型都会计算 预测概率,这意味着预测状态是正确的概率。 如果预测概率超过准确性栏,则预测计数为正确;如果不是,则预测计算为不正确。 通过将 状态阈值 设置为介于 0.0 和 1.0 之间的数字来控制此值,其中接近 1 的数字表示预测的强烈置信度,接近 0 的数字表示预测不太可能为 true。 状态阈值的默认值为 NULL,这意味着具有最高概率的预测状态被视为目标值。
应注意,状态阈值的设置会影响模型准确性的度量值。 例如,假设你有三个要测试的模型。 所有项目都基于相同的数据挖掘结构,并且都预测名为 [Bike Buyer] 的列。 此外,你想要预测单个值 1,这意味着“是的,将购买”。这三个模型返回预测概率为 0.05、0.15 和 0.8。 如果将状态阈值设置为 0.10,则其中两个预测计数为正确。 如果将状态阈值设置为 0.5,则只有一个模型被视为返回了正确的预测。 如果使用默认值 null,则最可能预测的计算结果为正确。 在这种情况下,所有三个预测都将计为正确。
注释
可以为阈值设置值 0.0,但该值毫无意义,因为每个预测都将计为正确,即使概率为零的预测也是如此。 请注意不要意外将 状态阈值 设置为 0.0。
选择要验证的模型和列
使用数据挖掘设计器中的 “交叉验证 ”选项卡时,必须先从列表中选择可预测列。 通常,挖掘结构可以支持许多挖掘模型,并非所有模型都使用相同的可预测列。 运行交叉验证时,只有那些使用同一可预测列的模型才能包含在报表中。
若要选择可预测属性,请单击 “目标属性 ”,然后从列表中选择列。 如果目标属性是嵌套列或嵌套表中的列,则必须使用嵌套表名称>(键)格式<键入嵌套列的名称。<嵌套列>。 如果嵌套表中使用的唯一列是键列,则可以使用 <嵌套表名称>(键)。
选择可预测属性后,Analysis Services 会自动测试使用同一可预测属性的所有模型。 如果目标属性包含离散值,则选择可预测列后,可以选择键入目标状态(如果有要预测的特定值)。
目标状态的选择会影响返回的度量值。 如果指定目标属性,即列名,并且不选取希望模型预测的特定值,则默认情况下,模型将根据其预测最可能的状态进行评估。
对聚类分析模型使用交叉验证时,没有可预测的列;而是从“目标属性”列表框中的列表中选择 #Cluster。 选择此选项后,将禁用与聚类分析模型无关的其他选项,例如 目标状态。 然后,Analysis Services 将测试与挖掘结构关联的所有聚类分析模型。
用于交叉验证的工具
可以使用数据挖掘设计器中的交叉验证,也可以通过运行存储过程来执行交叉验证。
如果使用数据挖掘设计器工具执行交叉验证,则可以在单个对话框中配置训练和准确性结果参数。 这样可以更轻松地设置和查看结果。 可以测量与单个挖掘结构相关的所有挖掘模型的准确性,然后在 HTML 报表中立即查看结果。 但是,存储过程提供了一些优势,例如添加自定义项和编写过程脚本的功能。
数据挖掘设计器中的交叉验证
可以使用 SQL Server Management Studio 或 SQL Server Development Studio 中挖掘准确性图表视图的 交叉验证 选项卡执行交叉验证。
若要查看如何使用用户界面创建交叉验证报表的示例,请参阅 “创建交叉验证报告”。
交叉验证存储过程
对于高级用户,交叉验证也以完全参数化系统存储过程的形式提供。 可以通过从 SQL Server Management Studio 或任何托管代码应用程序连接到 SQL Server 2014 Analysis Services(SSAS)实例来运行存储过程。
存储过程按挖掘模型类型进行分组。 一组存储过程仅适用于聚类分析模型。 另一组存储过程适用于其他挖掘模型。
对于每种类型的挖掘模型(聚集或非聚集),存储过程在两个单独的阶段执行交叉验证。
对数据进行分区并为分区生成指标
在第一个阶段中,你调用一个系统存储过程,该过程根据数据集指定分区数创建分区,并返回每个分区的精确度结果。 对于每个指标,Analysis Services 然后计算分区的平均值和标准偏差。
生成整个数据集的指标
在第二个阶段中,调用一组不同的存储过程。 这些存储过程不对数据集进行分区,而是为整个指定的数据集生成准确性结果。 如果已对挖掘结构进行分区和处理,则可以调用第二组存储过程来获取结果。
定义测试数据
运行计算准确性的交叉验证存储过程(SystemGetAccuracyResults 或 SystemGetClusterAccuracyResults),可以指定在交叉验证期间用于测试的数据源。 此选项在用户界面中不可用。
可以将以下任一选项指定为测试数据源:
仅使用训练数据。
包括现有的测试数据集。
仅使用测试数据集。
将现有筛选器应用于每个模型。
训练集、测试集和模型筛选器的任意组合。
若要指定测试数据源,请为 DataSet
存储过程的参数提供整数值。 有关参数值的列表,请参阅相关存储过程参考主题的“备注”部分。
如果在数据挖掘设计器中使用 交叉验证 报表执行交叉验证,则无法更改使用的数据集。 默认情况下,使用每个模型的训练事例。 如果筛选器与模型关联,则应用筛选器。
交叉验证的结果
如果使用数据挖掘设计器,这些结果将显示在类似网格的 Web 查看器中。 如果使用交叉验证存储过程,这些结果将作为表返回。
报告包含两种类型的度量:表示数据集在划分成折叠时变化性的数据汇总,以及针对每个折叠的模型特定准确性度量。 以下主题提供有关这些指标的详细信息:
按测试类型列出所有度量值。 一般描述如何解释度量值。
描述用于计算每个度量值的公式,并列出每个度量值可应用于的属性类型。
交叉验证的限制
如果在 SQL Server Development Studio 中使用交叉验证报表执行交叉验证,则可以测试的模型和可以设置的参数存在一些限制。
默认情况下,与所选挖掘结构关联的所有模型都经过交叉验证。 不能指定模型或模型列表。
基于Microsoft时序算法或Microsoft序列聚类分析算法的模型不支持交叉验证。
如果挖掘结构不包含任何可通过交叉验证测试的模型,则无法创建报表。
如果挖掘结构同时包含聚类分析和非聚类分析模型,并且未选择 #Cluster 选项,则这两种类型的模型的结果都会在同一报表中显示,即使属性、状态和阈值设置可能不适合聚类分析模型。
某些参数值受到限制。 例如,如果折叠数超过 10,则会显示警告,因为生成这么多模型可能会导致报表显示缓慢。
如果要测试多个挖掘模型,并且模型具有筛选器,则会单独筛选每个模型。 不能在交叉验证期间向模型添加筛选器或更改模型的筛选器。
由于默认情况下交叉验证会测试与结构关联的所有挖掘模型,因此如果某些模型具有筛选器,而其他模型没有筛选器,则可能会收到不一致的结果。 为了确保仅比较具有相同筛选器的模型,应使用存储过程并指定挖掘模型列表。 或者,仅使用没有筛选器的挖掘结构测试集,以确保对所有模型使用一致的数据集。
如果使用存储过程执行交叉验证,可以选择测试数据源的其他选项。 如果使用数据挖掘设计器执行交叉验证,则必须使用与模型或结构关联的测试数据集(如果有)。 通常,如果要指定高级设置,则应使用交叉验证存储过程。
交叉验证不能与时序或序列聚类分析模型一起使用。 具体而言,不能在交叉验证中包含包含 KEY TIME 列或 KEY SEQUENCE 列的模型。
相关内容
有关交叉验证的详细信息,请参阅以下主题,或有关测试挖掘模型的相关方法的信息,例如准确性图表。
主题 | 链接 |
---|---|
介绍如何在 SQL Server Development Studio 中设置交叉验证参数。 | 交叉验证选项卡 (挖掘准确性图表视图) |
描述交叉验证提供的指标 | 交叉验证公式 |
介绍交叉验证报告格式,并定义为每个模型类型提供的统计度量值。 | 交叉验证报表中的度量值 |
列出用于计算交叉验证统计信息的存储过程。 | 数据挖掘存储过程 (Analysis Services - 数据挖掘) |
介绍如何为挖掘结构和相关模型创建测试数据集。 | 训练和测试数据集 |
请参阅其他准确性图表类型的示例。 |
分类矩阵 (Analysis Services - 数据挖掘) 增益图(Analysis Services - 数据挖掘) 利润图表 (Analysis Services - 数据挖掘) 散点图(Analysis Services - 数据挖掘功能) |
介绍创建各种准确性图表的步骤。 | 测试与验证任务及操作指南(数据挖掘) |