内容查询是提取有关挖掘模型内部统计信息和结构的信息的方法。 有时,内容查询可以提供在查看器中不可用的详细信息。 还可以使用内容查询的结果以编程方式提取其他用途的信息。
本部分提供有关可以使用内容查询检索的信息类型的常规信息,以及内容查询的常规 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 列;请改用 RangeMin
和 RangeMax
函数。
查找用于训练模型或结构的事例
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 规范。