交叉验证(Analysis Services – 数据挖掘)
交叉验证是分析中的一个标准工具,同时也是一项重要的功能,可帮助您开发和优化数据挖掘模型。在创建了一个挖掘结构及其关联的挖掘模型之后,可使用交叉验证来确定该模型的有效性。交叉验证具有以下应用:
验证特定挖掘模型的可靠性。
通过一条语句评估多个模型。
构建多个模型,然后根据统计标识最好的模型。
本节介绍了如何使用 SQL Server 2008 中提供的交叉验证功能以及如何解释特定模型或数据集的交叉验证的结果。可以将交叉验证作为一组存储过程来执行。还可以使用 Business Intelligence Development Studio 的数据挖掘设计器中的交叉验证。
交叉验证过程概述
交叉验证包括两个阶段,即定型阶段和生成结果阶段。这些阶段包括以下步骤:
选择目标挖掘结构。
指定要进行测试的模型。
指定要对结构数据进行分区的折叠数。
Analysis Services 根据现有折叠数量创建相同数量的模型并对这些模型进行定型。
若要生成结果,必须指定用于对已定型的模型进行测试的参数。
指定测试数据的源。(这项功能只有在使用存储过程时才可用。)
指定可预测属性、预测值以及准确性阈值。
Analysis Services 随后会为每个模型中的每个折叠返回一组准确性度量。您还可以为整个数据集返回准确性度量。
使用数据挖掘设计器中的交叉验证
如果您使用 Business Intelligence Development Studio 中的“挖掘准确性图表”视图的**“交叉验证”**选项卡执行交叉验证,则可以在单个表单中配置定型和准确性结果参数。这样更容易设置和查看结果。可以度量与单个挖掘结构关联的所有挖掘模型的准确性,并立即查看 HTML 报告中的结果。
有关交叉验证提供的报告格式以及准确性度量的详细信息,请参阅交叉验证报表(Analysis Services - 数据挖掘)。
有关如何在 Business Intelligence Development Studio 中配置交叉验证参数的信息,请参阅“交叉验证”选项卡(“挖掘准确性图表”视图)。
使用交叉验证存储过程
对于高级用户,交叉验证还可充当四个系统存储过程。从 SQL Server Management Studio 或从任何托管代码应用程序连接到 Analysis Services 2008 的实例,即可运行这些存储过程。
存储过程按照挖掘模型类型进行分组。第一对过程仅与聚类分析模型一起工作。第二对过程与其他挖掘模型一起工作。
注意 |
---|
交叉验证不能与任何包含 KEY TIME 列或 KEY SEQUENCE 列的模型一起使用。 |
对于每一种类型的挖掘模型,都有两个存储过程。第一个过程根据在数据集中指定的数量创建相同数量的分区,并返回每个分区的准确性结果。对于每个度量,Analysis Services 都会计算各个分区的平均偏差和标准偏差。
第二个存储过程不对数据集进行分区,但会生成整个指定数据集的准确性结果。如果挖掘结构及其模型已进行分区和处理,则您还可以使用第二个存储过程。
对数据进行分区并生成分区度量
SystemGetCrossValidationResults(Analysis Services - 数据挖掘)
SystemGetClusterCrossValidationResults(Analysis Services - 数据挖掘)
生成整个数据集的度量
配置交叉验证
您可以自定义交叉验证的工作方式,以便控制交叉部分的数目、测试的模型以及预测的准确性栏。如果使用交叉验证存储过程,还可以指定用于验证模型的数据集。大量的选择意味着可以轻松生成多组不同的结果,随后必须对这些结果进行比较和分析。
本节提供用于帮助您正确配置交叉验证的信息。
设置分区的数目
在指定分区数目的同时,将要创建的临时模型的数量也随之确定。对于每个分区,数据的交叉部分都标记为用作测试集,并通过对不在分区中的其余数据进行定型来创建一个新的模型。此过程将一直重复,直到 Analysis Services 创建并测试指定数目的模型后才停止。将指定用于交叉验证的数据在所有分区之间平均分发。
关系图中的示例说明了数据的用法(如果指定三个折叠)。
在该关系图显示的方案中,挖掘结构包含用于测试的维持数据集,但并未包含用于交叉验证的测试数据集。因此,定型数据集中的所有数据(即挖掘结构中 70% 的数据)都将用于交叉验证。交叉验证报告显示每个分区中使用的事例总数。
您还可以通过指定要使用的总事例数,从而指定交叉验证中使用的数据量。这些事例在所有的折叠间平均分发。
如果挖掘结构存储在 SQL Server Analysis Services 的一个实例中,则可以设置的折叠数最大值为 256,或者是事例数,以二者中少者计。如果使用的是会话挖掘结构,则折叠数的最大值为 10。
注意 |
---|
因为必须生成和测试每个折叠的模型,所以执行交叉验证所需的时间会随着折叠数的增加而相应增加。如果折叠数太多,则可能会遇到性能问题。 |
定义测试数据
运行计算准确性的存储过程(SystemGetAccuracyResults(Analysis Services - 数据挖掘) 或 SystemGetClusterAccuracyResults(Analysis Services - 数据挖掘))时,可以指定交叉验证过程中用于测试的数据源,其方式是使用下列选项组合:
仅使用定型数据。
包括现有测试数据集。
仅使用测试数据集。
对每个模型都应用现有的筛选器。
定型集、测试集以及模型筛选器的任意组合。
通过提供 DataSet 参数的值控制测试数据集的组合。
如果使用数据挖掘设计器中的**“交叉验证”**报告执行交叉验证,则无法更改使用的数据集。默认情况下使用每个模型的定型事例。如果筛选器与模型关联,则应用筛选器。
筛选的挖掘模型的交叉验证
如果您正测试多个挖掘模型,并且模型都具有筛选器,则分别对每个模型进行筛选。不能在交叉验证过程中向模型添加筛选器或更改模型的筛选器。
因为交叉验证在默认情况下对与结构关联的所有挖掘模型进行测试,所以,如果某些模型有筛选器而另一些没有筛选器,则可能会收到不一致的结果。若要确保仅对具有相同筛选器的模型进行比较,应使用存储过程并指定一个挖掘模型列表。或者,仅使用没有筛选器的挖掘结构测试集以确保对所有模型使用一致的数据集。
设置准确性阈值
可以使用状态阈值设置预测的准确性栏。对于每个事例,模型都将计算预测的状态为正确的可能性,即预测概率。如果预测概率超出了准确性栏,则将预测计为正确;如果未超出,则将预测计为错误。通过将**“状态阈值”**设置为介于 0.0 和 1.0 之间的数值来控制此值,其中比较靠近 1 的数字表示在预测方面具有较高的可信度,比较靠近 0 的数字则表示预测的可信度较低。状态阈值的默认值为 NULL,意味着将具有最高概率的预测状态视为目标值。
注意 |
---|
可以将值设为 0.0,但是这并没有任何意义,原因是每一个预测都将计为正确,即使那些具有 0 概率的预测也是如此。请务必小心,勿将“状态阈值”意外设置为 0.0。 |
例如,您有三个预测列 [Bike Buyer] 的模型,并且需要预测的值为 1,这意味着“是,将要购买”。三个模型将返回预测概率分别为 0.05、0.15 和 0.8 的预测。如果将状态阈值设置为 0.10,则其中两个预测将计为正确。如果将状态阈值设置为 0.5,则仅有一个模型计为已返回正确的预测。如果使用默认值 null,则将可能性最大的预测计为正确。在这种情况下,所有三个预测都将计为正确。
交叉验证中的度量
根据特定类型的挖掘模型、可预测属性的数据类型以及可预测属性值(如果有)生成不同的准确性度量。本节定义用于参考的主要度量。对于每个模型报告中返回的、按类型进行分组的准确性度量列表,请参阅交叉验证报表(Analysis Services - 数据挖掘)。
度量值 |
适用范围 |
实现 |
---|---|---|
分类:真正、假正、真负和假负 |
离散属性,值已指定 |
预测概率大于状态阈值并且预测的状态与目标状态匹配的分区中行或值的计数。 |
分类:通过/失败 |
离散属性,无指定的目标 |
预测的状态与目标状态匹配并且预测概率值大于 0 的分区中行或值的计数。 |
提升 |
离散属性。可以指定目标值,但目标值并不是必需的。 |
具有目标属性值的所有行的平均对数可能性,其中,每个事例的对数可能性作为 Log(ActualProbability/MarginalProbability) 计算。若要计算该平均值,用对数可能性值的合计除以输入数据集中的行数(不包括具有目标属性缺失值的行)。提升值可以为负,也可以为正。正值意味着比随机推测好的有效模型。 |
对数得分 |
离散属性。可以指定目标值,但目标值并不是必需的。 |
每个事例的实际可能性的对数,求和,然后除以输入数据集中的行数(不包括具有目标属性缺失值的行)。因为可能性表示为小数部分,所以,对数得分始终为负数。 |
事例可能性 |
分类 |
所有事例的分类可能性得分的合计,然后除以输入分区中的事例的数目(不包括具有目标属性缺失值的行)。 |
平均绝对误差 |
连续属性 |
分区中所有事例的绝对误差之和除以分区中的事例数(不包括具有缺失值的事例)。 |
均方根误差 |
连续属性 |
分区的平均平方误差的平方根。 |
均方根误差 |
离散属性。可以指定目标值,但目标值并不是必需的。 |
概率得分补数的平方的平均平方根除以输入分区中事例的数目(不包括具有目标属性缺失值的行)。 |
均方根误差 |
离散属性,无指定的目标。 |
概率得分补数的平方的平均平方根除以输入分区中事例的数目(不包括具有目标属性缺失值的事例)。 |