内容查询 (数据挖掘)

内容查询是提取有关挖掘模型内部统计信息和结构的信息的方法。 有时,内容查询可以提供在查看器中不可用的详细信息。 还可以使用内容查询的结果以编程方式提取其他用途的信息。

本部分提供有关可以使用内容查询检索的信息类型的常规信息,以及内容查询的常规 DMX 语法。

基本内容查询

示例

使用查询结果

基本内容查询

可以使用预测查询生成器、使用 SQL Server Management Studio 中提供的 DMX 内容查询模板或直接在 DMX 中编写查询来创建内容查询。 与预测查询不同,不需要联接外部数据,因此内容查询易于编写。

本部分概述了可以创建的内容查询类型。

  • 通过对挖掘结构或事例数据的查询,可以查看用于训练的详细数据。

  • 对模型的查询可以返回模式、属性列表、公式等。

有关结构和事例数据的查询

DMX 支持对用于生成挖掘结构和模型的缓存数据的查询。 默认情况下,此缓存是在定义挖掘结构时创建的,并在处理结构或模型时填充。

警告

如果需要将数据分为训练集和测试集,则无法清除或删除此缓存。 如果清除缓存,则无法查询事例数据。

以下示例演示了在事例数据上创建查询的常见模式,或针对挖掘结构中的数据的查询:

获取模型的所有事例
SELECT FROM <model>.CASES

使用此语句从用于生成模型的事例数据中检索指定的列。 必须对模型具有钻取权限才能运行此查询。

查看结构中包含的所有数据
SELECT FROM <structure>.CASES

使用此语句可以查看结构中包含的所有数据,包括特定挖掘模型中不包含的列。 必须对模型以及结构具有钻取权限才能从挖掘结构中检索数据。

获取值范围
SELECT DISTINCT RangeMin(<column>), RangeMax(<column>) FROM <model>

使用此语句可查找连续列或 DISCRETIZED 列存储桶的最小值、最大值和平均值。

获取唯一值
SELECT DISTINCT <column>FROM <model>

使用此语句检索 DISCRETE 列的所有值。 不要将此语句用于 DISCRETIZED 列;请改用 RangeMinRangeMax 函数。

查找用于训练模型或结构的事例
SELECT FROM <mining structure.CASES WHERE IsTrainingCase()

使用此语句获取训练模型中使用的完整数据集。

查找用于测试模型或结构的事例
SELECT FROM <mining structure.CASES WHERE IsTestingCase()

使用此语句获取预留用于测试与特定结构相关的挖掘模型的数据。

从特定模型模式钻取到基础事例数据
SELECT FROM <model>.CASESWHERE IsTrainingCase() AND IsInNode(<node>)

使用此语句从已训练的模型检索详细的事例数据。 必须指定特定的节点:例如,必须知道群集的节点 ID、决策树的特定分支等。此外,必须对模型具有钻取权限才能运行此查询。

有关模型模式、统计信息和属性的查询

数据挖掘模型的内容可用于许多目的。 使用模型内容查询,可以:

  • 提取用于进行自己的计算的公式或概率。

  • 对于关联模型,检索用于生成预测的规则。

  • 检索特定规则的说明,以便可以在自定义应用程序中使用规则。

  • 查看时序模型检测到的移动平均值。

  • 获取趋势线的某些段的回归公式。

  • 检索有关特定群集中的客户的可操作信息。

以下示例演示了创建模型内容的查询的一些常见模式:

从模型获取模式
SELECT FROM <model>.CONTENT

使用此语句检索模型中特定节点的详细信息。 根据算法类型,节点可以包含规则和公式、支持和方差统计信息等。

检索在已训练的模型中使用的属性
CALL System.GetModelAttributes(<model>)

使用此存储过程检索模型使用的属性列表。 此信息可用于确定因特征选择而消除的属性,例如。

检索存储在数据挖掘维度中的内容
SELECT FROM <model>.DIMENSIONCONTENT

使用此语句从数据挖掘维度中检索数据。

此查询类型主要供内部使用。 但是,并非所有算法都支持此功能。 MINING_SERVICES架构行集中的标志指示支持。

如果开发自己的插件算法,则可以使用此语句来验证模型的内容以进行测试。

获取模型的 PMML 表示形式
SELECT * FROM <model>.PMML

获取一个 XML 文档,该文档表示 PMML 格式的模型。 并非所有模型类型都受支持。

例子

尽管某些模型内容是算法的标准,但内容的某些部分因用于生成模型的算法而有很大差异。 因此,在创建内容查询时,必须了解模型中的信息对特定模型最有用。

本部分提供了一些示例,说明算法的选择如何影响模型中存储的信息类型。 有关挖掘模型内容以及特定于每个模型类型的内容的详细信息,请参阅挖掘模型内容(Analysis Services - 数据挖掘)。

示例 1:关联模型中的内容查询

SELECT FROM <model>.CONTENT语句返回不同类型的信息,具体取决于要查询的模型类型。 对于关联模型,关键信息部分是 节点类型。 节点类似于用于模型内容中信息的容器。 在关联模型中,表示规则的节点NODE_TYPE值为 8,而表示项集的节点NODE_TYPE值为 7。

因此,以下查询返回按支持排名的前 10 项集(默认排序)。

SELECT TOP 10 NODE_DESCRIPTION, NODE_PROBABILITY, SUPPORT  
FROM <model>.CONTENT WHERE NODE_TYPE = 7  

以下查询基于此信息生成。 该查询返回三列:节点的 ID、完整规则和项集右侧的产品,即预测作为项集的一部分与其他一些产品关联的产品。

SELECT FLATTENED NODE_UNIQUE_NAME, NODE_DESCRIPTION,  
     (SELECT RIGHT(ATTRIBUTE_NAME, (LEN(ATTRIBUTE_NAME)-LEN('Association model name')))   
FROM NODE_DISTRIBUTION  
WHERE LEN(ATTRIBUTE_NAME)>2  
)   
AS RightSideProduct  
FROM [<Association model name>].CONTENT  
WHERE NODE_TYPE = 8   
ORDER BY NODE_SUPPORT DESC  

FLATTENED 关键字指示应将嵌套行集转换为平展表。 表示规则右侧的产品的属性包含在NODE_DISTRIBUTION表中;因此,我们通过添加长度大于 2 的要求,只检索包含属性名称的行。

一个简单的字符串函数用于从第三列中删除模型的名称。 (模型名称通常以嵌套列的值为前缀。

WHERE 子句指定NODE_TYPE的值应为 8,以仅检索规则。

有关更多示例,请参阅 关联模型查询示例

示例 2:决策树模型的内容查询

决策树模型可用于预测和分类。 此示例假定你使用模型来预测结果,但你还希望找出哪些因素或规则可用于对结果进行分类。

在决策树模型中,节点用于表示树和叶节点。 每个节点的标题包含结果路径的说明。 因此,若要跟踪任何特定结果的路径,需要标识包含它的节点,并获取该节点的详细信息。

在预测查询中,添加预测函数 PredictNodeId (DMX),以获取相关节点的 ID,如以下示例所示:

SELECT  Predict([Bike Buyer]), PredictNodeID([Bike Buyer])   
FROM [<decision tree model name>]  
PREDICTION JOIN   
<input rowset>   

获得包含结果的节点 ID 后,可以通过创建包含NODE_CAPTION的内容查询来检索解释预测的规则或路径,如下所示:

SELECT NODE_CAPTION  
FROM [<decision tree model name>]   
WHERE NODE_UNIQUE_NAME= '<node id>'  

有关更多示例,请参阅 决策树模型查询示例

使用查询结果

如示例所示,内容查询主要返回表格行集,但也可能包含嵌套列中的信息。 可以将返回的行集展平,但这可能会使处理结果变得更复杂。 特别是NODE_DISTRIBUTION节点的内容是嵌套的,但包含有关模型非常有趣的信息。

有关如何使用分层行集的详细信息,请参阅 MSDN 上的 OLEDB 规范。

另请参阅

了解 DMX Select 语句
数据挖掘查询