数据挖掘中的功能选择

“功能选择”是任何数据挖据产品所必需的。其原因是,在生成数据挖掘模型时,数据集包含的信息通常多于生成该模型所需的信息。例如,一个数据集可能包含 500 个用来说明客户特征的列,但是这些列中可能只有 50 个被用于生成一个特定的模型。如果在生成模型时保留不需要的列,则定型期间需要更多的 CPU 和内存,并且已完成的模型需要更多的存储空间。

即使资源不存在任何问题,由于不需要的列可能因为下列原因而降低发现的模式的质量,因此通常需要删除这些列:

  • 某些列存在干扰或冗余。此干扰会使从数据中发现有意义的模式更困难;

  • 若要发现质量模式,大多数数据挖掘算法需要高维数据集上的较大定型数据集。但是某些数据挖掘应用程序中的定型数据非常少。

功能选择有助于解决数据很多但值很小,或者数据很少但值很大的问题。

Analysis Services 数据挖掘中的功能选择

通常,功能选择的工作方式是为每个属性计算一个分数,然后仅选择具有最高分数的属性。您可以调整最高分数的阈值。功能选择始终在对模型进行定型之前执行,以自动选择数据集中最有可能在该模型中使用的属性。

Analysis Services 提供了多种功能选择方法。选择具有最大值的属性的准确方法取决于您的模型中使用的算法以及您可能对模型设置的任何参数。功能选择应用于输入、可预测属性或列中的状态。只有算法选择的属性和状态才会包含在模型生成过程中并可用于预测。功能选择忽略的可预测列也可用于预测,但这些预测只是基于模型中存在的全局统计信息进行的。

注意注意

功能选择仅影响模型中使用的列,而对挖掘结构的存储没有任何影响。留在挖掘模型之外的列仍在结构中可用,并将缓存挖掘结构列中的数据。

功能选择方法的定义

实现功能选择的方法很多,具体取决于使用的数据类型以及为分析选择的算法。SQL Server Analysis Services 提供了用于对属性进行计分的若干现成的常用方法。在任何算法或数据集中应用的方法取决于数据类型和列的用法。

“兴趣性”分数用于对包含非二进制连续数值数据的列中的属性进行排列和排序。

对于包含离散和离散化数据的列,您可以从“Shannon 平均信息量”和两个 Bayesian 分数中进行选择;但是,如果模型包含任何连续列,则兴趣性分数将用于评估所有的输入列,以确保一致性。

本部分对功能选择的每种方法分别进行了介绍。

兴趣性分数

如果某个功能可以提供一些有用的信息,则该功能很令人感兴趣。由于有用的定义因具体方案而异,因此数据挖掘行业开发了多种方法来度量“兴趣性”。例如,“新奇”在离群监测中也许令人感兴趣,但是在密切关联的项之间区分的功能(或称为“区分权重”)对于分类来说或许更令人感兴趣。

SQL Server Analysis Services 中所使用的兴趣性度量“基于平均信息量”,意味着随机分布的属性具有较高的平均信息量和较低的信息增益,因此,这类属性不是很令人感兴趣。任何特定属性的平均信息量都将与所有其他属性的平均信息量进行比较,如下所示:

Interestingness(Attribute) = - (m - Entropy(Attribute)) * (m - Entropy(Attribute))

中央平均信息量(即 m)表示整个功能集的平均信息量。通过用中央平均信息量减去目标属性的平均信息量,可以评估该属性提供了多少信息。

每当列包含非二进制连续数值数据时,就会默认使用此分数。

Shannon 平均信息量

Shannon 平均信息量针对特定的结果度量随机变量的不确定性。例如,抛硬币的平均信息量可以表示为其正面朝上概率的函数。

Analysis Services 使用以下公式来计算 Shannon 平均信息量:

H(X) = - P(xi) log(P(xi))

此计分方法适用于离散和离散化的属性。

Bayesian with K2 Prior

Analysis Services 提供了两种基于 Bayesian 网络的功能选择分数。Bayesian 网络是状态的“定向”或“非循环”曲线图,也是状态间的转换,这意味着某些状态始终早于当前的状态,某些状态是较晚的,曲线图不会重复或循环。根据定义,Bayesian 网络允许使用先前的知识。但是,对于算法设计、性能和精确度而言,关于在以后状态的概率计算中要使用以前的哪一个状态的问题是很重要的。

从 Bayesian 网络中了解的 K2 算法是由 Cooper 和 Herskovits 开发的,经常在数据挖掘中使用。该算法是可伸缩的,并可以分析多个变量,但需要对用作输入的变量进行排序。有关详细信息,请参阅由 Chickering、Geiger 和 Heckerman 编写的了解 Bayesian 网络

此计分方法适用于离散和离散化的属性。

Bayesian Dirichlet Equivalent with Uniform Prior

Bayesian Dirichlet Equivalent (BDE) 分数还使用 Bayesian 分析来评估给定数据集的网络。BDE 计分方法是由 Heckerman 开发的,并基于 Cooper 和 Herskovits 开发的 BD 指标。Dirichlet 分布是描述网络中每个变量的条件概率的多项分布,其中很多属性对学习很有用。

Bayesian Dirichlet Equivalent with Uniform Prior (BDEU) 方法假定一个 Dirichlet 分布的特殊事例,在这个事例中使用一个数学常量创建一个以前状态的固定或均匀分布。BDE 分数还假定可能性均等,这意味着数据不应当用来区分相等的结构。也就是说,如果 If A Then B 的分数与 If B Then A 的分数相同,则该结构将无法基于数据进行区分,也无法推断其原因。

有关 Bayesian 网络和这些计分方法实现的详细信息,请参阅 Learning Bayesian Networks(了解 Bayesian 网络)。

Analysis Services 算法使用的功能选择方法

下表列出了支持功能选择的算法、该算法所使用的功能选择方法以及设置用于控制功能选择行为的参数:

算法

分析方法

注释

Naive Bayes

Shannon 平均信息量

Bayesian with K2 Prior

Bayesian Dirichlet with uniform prior(默认值)

Microsoft Naïve Bayes 算法仅接受离散或离散化的属性,因此它不能使用兴趣性分数。

有关此算法的详细信息,请参阅 Microsoft Naive Bayes 算法技术参考

决策树

兴趣性分数

Shannon 平均信息量

Bayesian with K2 Prior

使用统一先验的 Bayesian Dirichlet(默认)

如果任何列包含非二进制连续值,则兴趣性分数将用于所有列,以确保一致性。否则,将使用默认的功能选择方法或者您在创建模型时指定的方法。

有关此算法的详细信息,请参阅 Microsoft 决策树算法技术参考

神经网络

兴趣性分数

Shannon 平均信息量

Bayesian with K2 Prior

Bayesian Dirichlet with uniform prior(默认值)

只要数据包含连续列,Microsoft 神经网络算法就可同时使用这两种方法。

有关此算法的详细信息,请参阅 Microsoft 神经网络算法技术参考

逻辑回归

兴趣性分数

Shannon 平均信息量

Bayesian with K2 Prior

Bayesian Dirichlet with uniform prior(默认值)

虽然 Microsoft 逻辑回归算法基于 Microsoft 神经网络算法,但您不能自定义逻辑回归模型以控制功能选择行为;因此,功能选择始终默认为最适合该属性的方法。

如果所有属性均为离散或离散化属性,则默认值为 BDEU。

有关此算法的详细信息,请参阅 Microsoft 逻辑回归算法技术参考

聚类分析

兴趣性分数

Microsoft 聚类分析算法可以使用离散或离散化数据。但是,每个属性的分数仍将作为距离进行计算并且表示为连续数字,因此必须使用兴趣性分数。

有关此算法的详细信息,请参阅 Microsoft 聚类分析算法技术参考

线性回归

兴趣性分数

因为仅支持连续列,Microsoft 线性回归性算法只能使用兴趣性分数。

有关此算法的详细信息,请参阅 Microsoft 线性回归算法技术参考

关联规则

序列聚类分析

未使用

不使用这些算法调用功能选择。

但在必要时,可以通过设置参数 MINIMUM_SUPPORT 和 MINIMUM_PROBABILIITY 的值来控制算法的行为和减小输入数据的大小。

有关详细信息,请参阅 Microsoft 关联算法技术参考Microsoft 顺序分析和聚类分析算法技术参考(Analysis Services – 数据挖掘)

时序

未使用

功能选择不适用于时序模型。

有关此算法的详细信息,请参阅 Microsoft 时序算法技术参考

控制功能选择行为

在支持功能选择的算法中,可以使用下列参数来控制何时打开功能选择。对于所允许的输入数目,每个算法都有一个默认值,您可以覆盖此默认值并指定属性的数目。

MAXIMUM_INPUT_ATTRIBUTES

如果某个模型包含的列多于 MAXIMUM_INPUT_ATTRIBUTES 参数中指定的数目,算法将忽略它计算后认为无用的任何列。

MAXIMUM_OUTPUT_ATTRIBUTES

同样,如果某个模型包含的可预测列多于 MAXIMUM_OUTPUT_ATTRIBUTES 参数中指定的数目,算法将忽略它计算后认为无用的任何列。

MAXIMUM_STATES

如果某个模型包含的事例多于 MAXIMUM_STATES 参数中指定的数目,则最不常见的状态将被分组在一起且被视为不存在。如果这些参数中的任何一个被设置为 0,则功能选择将被关闭,这会影响处理时间和性能。