针对数据挖掘模型创建查询时,可以创建内容查询,该查询提供有关分析中发现的模式的详细信息,也可以创建预测查询,该查询使用模型中的模式对新数据进行预测。 例如,决策树模型的内容查询可能会提供有关树的每个级别的事例数或区分事例的规则的统计信息。 或者,预测查询会将模型映射到新数据,以便生成建议、分类等。 还可以使用查询检索有关模型的元数据。
本部分介绍如何为基于Microsoft决策树算法的模型创建查询。
内容查询
预测查询
查找有关决策树模型的信息
若要对决策树模型的内容创建有意义的查询,应了解模型内容的结构,以及哪些节点类型存储了哪些类型的信息。 有关详细信息,请参阅决策树模型的挖掘模型内容(Analysis Services - 数据挖掘)。
示例查询 1:从数据挖掘模式行集检索模型参数
通过查询数据挖掘架构行集,可以找到有关模型的元数据,例如创建模型的时间、上次处理模型时、模型所基于的挖掘结构的名称以及用作可预测属性的列的名称。 还可以返回首次创建模型时使用的参数。
select MINING_PARAMETERS
from $system.DMSCHEMA_MINING_MODELS
WHERE MODEL_NAME = 'TM_Decision Tree'
示例结果:
挖矿参数
COMPLEXITY_PENALTY=0.5,MAXIMUM_INPUT_ATTRIBUTES=255,MAXIMUM_OUTPUT_ATTRIBUTES=255,MINIMUM_SUPPORT=10,SCORE_METHOD=4,SPLIT_METHOD=3,FORCE_REGRESSOR=
示例查询 2:使用 DMX 返回有关模型内容的详细信息
以下查询返回有关在 基本数据挖掘教程中生成模型时创建的决策树的一些基本信息。 每个树结构都存储在其自己的节点中。 由于此模型包含单个可预测属性,因此只有一个树节点。 但是,如果使用决策树算法创建关联模型,则可能存在数百棵树,每个产品都有一个树。
此查询返回类型 2 的所有节点,这些节点是表示特定可预测属性的树的顶级节点。
注释
列 CHILDREN_CARDINALITY
必须括在括号中,才能将其与同名的 MDX 保留关键字区分开来。
SELECT MODEL_NAME, NODE_NAME, NODE_CAPTION,
NODE_SUPPORT, [CHILDREN_CARDINALITY]
FROM TM_DecisionTrees.CONTENT
WHERE NODE_TYPE = 2
示例结果:
MODEL_NAME | NODE_NAME | 节点标题 | 节点支持 | 儿童基数 |
---|---|---|---|---|
TM_决策树 | 000000001 | 全部 | 12939 | 5 |
这些结果告诉你什么? 在决策树模型中,特定节点的基数会告诉你该节点具有多少个直接子节点。 此节点的基数为 5,这意味着模型将潜在自行车购买者的目标群体划分为 5 个子组。
以下相关查询返回这五个子组的子节点,以及特性及其值在子节点中的分布。 由于支持、概率和方差等统计信息存储在嵌套表中, NODE_DISTRIBUTION
因此此示例使用 FLATTENED
关键字输出嵌套表列。
注释
嵌套表列 SUPPORT
必须括在括号中,才能将其与同名的保留关键字区分开来。
SELECT FLATTENED NODE_NAME, NODE_CAPTION,
(SELECT ATTRIBUTE_NAME, ATTRIBUTE_VALUE, [SUPPORT]
FROM NODE_DISTRIBUTION) AS t
FROM TM_DecisionTree.CONTENT
WHERE [PARENT_UNIQUE_NAME] = '000000001'
示例结果:
NODE_NAME | 节点标题 | T.ATTRIBUTE_NAME | T.ATTRIBUTE_VALUE | Support |
---|---|---|---|---|
00000000100 | 拥有的汽车数 = 0 | 自行车购买者 | 失踪 | 0 |
00000000100 | 拥有的汽车数 = 0 | 自行车购买者 | 0 | 1067 |
00000000100 | 拥有的汽车数 = 0 | 自行车购买者 | 1 | 1875 |
00000000101 | 拥有的汽车数 = 3 | 自行车购买者 | 失踪 | 0 |
00000000101 | 拥有的汽车数 = 3 | 自行车购买者 | 0 | 678 |
00000000101 | 拥有的汽车数 = 3 | 自行车购买者 | 1 | 473 |
从这些结果中,你可以判断购买自行车的客户([Bike Buyer]
= 1),1067个客户有0辆车,473个客户有3辆车。
示例查询 3:从模型检索子树
假设你想发现更多关于购买自行车的客户的信息。 可以在查询中使用 IsDescendant (DMX) 函数查看任何子树的其他详细信息,如以下示例所示。 该查询通过从包含年龄超过 42 岁的客户的树中检索叶节点(NODE_TYPE = 4)来返回自行车购买者的计数。 查询将嵌套表中的行限制为 Bike Buyer = 1 的行。
SELECT FLATTENED NODE_NAME, NODE_CAPTION,NODE_TYPE,
(
SELECT [SUPPORT] FROM NODE_DISTRIBUTION WHERE ATTRIBUTE_NAME = 'Bike Buyer' AND ATTRIBUTE_VALUE = '1'
) AS t
FROM TM_DecisionTree.CONTENT
WHERE ISDESCENDANT('0000000010001')
AND NODE_TYPE = 4
示例结果:
NODE_NAME | 节点标题 | 技术支持 |
---|---|---|
000000001000100 | 年收入 >= 26000 和 < 42000 | 266 |
00000000100010100 | 总计儿童 = 3 | 75 |
0000000010001010100 | 家庭儿童数 = 1 | 75 |
使用决策树模型进行预测
由于决策树可用于各种任务,包括分类、回归甚至关联,因此在决策树模型上创建预测查询时,有许多选项可供使用。 必须了解创建模型的目的是了解预测结果。 以下查询示例演示了三种不同的方案:
返回分类模型的预测,以及预测正确概率,然后按概率筛选结果;
创建用于预测关联的单例查询
检索决策树的一部分的回归公式,其中输入和输出之间的关系是线性的。
示例查询 4:返回带有概率的预测
以下示例查询使用在 基本数据挖掘教程中创建的决策树模型。 查询传入来自 AdventureWorks2012 DW 的 dbo.ProspectiveBuyers 表的一组新的示例数据,以预测新数据集中哪些客户将购买自行车。
该查询使用预测函数 PredictHistogram (DMX),该函数返回一个嵌套表,其中包含有关模型发现的概率的有用信息。 查询的最终 WHERE 子句用于筛选结果,只返回那些被预测为可能购买自行车且概率大于 0%的客户。
SELECT
[TM_DecisionTree].[Bike Buyer],
PredictHistogram([Bike Buyer]) as Results
From
[TM_DecisionTree]
PREDICTION JOIN
OPENQUERY([Adventure Works DW Multidimensional 2012],
'SELECT
[FirstName],
[LastName],
[MaritalStatus],
[Gender],
[YearlyIncome],
[TotalChildren],
[NumberChildrenAtHome],
[HouseOwnerFlag],
[NumberCarsOwned]
FROM
[dbo].[ProspectiveBuyer]
') AS t
ON
[TM_DecisionTree].[First Name] = t.[FirstName] AND
[TM_DecisionTree].[Last Name] = t.[LastName] AND
[TM_DecisionTree].[Marital Status] = t.[MaritalStatus] AND
[TM_DecisionTree].[Gender] = t.[Gender] AND
[TM_DecisionTree].[Yearly Income] = t.[YearlyIncome] AND
[TM_DecisionTree].[Total Children] = t.[TotalChildren] AND
[TM_DecisionTree].[Number Children At Home] = t.[NumberChildrenAtHome] AND
[TM_DecisionTree].[House Owner Flag] = t.[HouseOwnerFlag] AND
[TM_DecisionTree].[Number Cars Owned] = t.[NumberCarsOwned]
WHERE [Bike Buyer] = 1
AND PredictProbability([Bike Buyer]) >'.05'
默认情况下,Analysis Services 返回包含列标签“ 表达式”的嵌套表。 可以通过对返回的列进行别名来更改此标签。 如果执行此作,别名(在本例中, 结果)既用作列标题,又用作嵌套表中的值。 必须展开嵌套表才能查看结果。
自行车买家 = 1 的示例结果:
自行车购买者 | $SUPPORT | $PROBABILITY | $ADJUSTEDPROBABILITY | 方差 | $STDEV |
---|---|---|---|---|---|
1 | 2540 | 0.634849242045644 | 0.013562168281562 | 0 | 0 |
0 | 1460 | 0.364984174579377 | 0.00661336932550915 | 0 | 0 |
0 | 0.000166583374979177 | 0.000166583374979177 | 0 | 0 |
如果提供程序不支持分层行集,例如此处所示的行集,则可以在查询中使用 FLATTENED 关键字将结果作为包含 null 的表来代替重复列值。 有关详细信息,请参阅 嵌套表(Analysis Services - 数据挖掘) 或 了解 DMX Select 语句。
示例查询 5:从决策树模型预测关联
以下示例查询基于关联挖掘结构。 若要遵循此示例,可以将新模型添加到此挖掘结构,并选择Microsoft决策树作为算法。 有关如何创建关联挖掘结构的详细信息,请参阅第 3 课:构建市场篮方案(中间数据挖掘教程)。
以下示例查询是一个单一实例查询,可以通过选择字段,然后从下拉列表中选择这些字段的值,在 SQL Server Data Tools (SSDT)中轻松创建该查询。
SELECT PredictAssociation([DT_Association].[v Assoc Seq Line Items],3)
FROM
[DT_Association]
NATURAL PREDICTION JOIN
(SELECT (SELECT 'Patch kit' AS [Model]) AS [v Assoc Seq Line Items]) AS t
预期的结果:
型号 |
---|
Mountain-200 |
山轮胎管 |
旅游轮胎管 |
结果告诉你三种最佳产品,以推荐给已购买修补工具包的客户。 当您进行推荐时,可以通过输入值或使用单例查询输入对话框,并添加或删除值,来提供多个产品作为输入。 以下示例查询演示了如何提供多个值,以便进行预测。 值由 SELECT 语句中的 UNION 子句连接,该子句定义输入值。
SELECT PredictAssociation([DT_Association].[v Assoc Seq Line Items],3)
From
[DT_Association]
NATURAL PREDICTION JOIN
(SELECT (SELECT 'Racing Socks' AS [Model]
UNION SELECT 'Women''s Mountain Shorts' AS [Model]) AS [v Assoc Seq Line Items]) AS t
预期的结果:
型号 |
---|
Long-Sleeve 徽标球衣 |
Mountain-400-W |
经典背心 |
示例查询 6:从决策树模型检索回归公式
创建包含连续属性回归的决策树模型时,可以使用回归公式进行预测,也可以提取有关回归公式的信息。 有关回归模型查询的详细信息,请参阅 线性回归模型查询示例。
如果决策树模型中包含回归节点和对离散属性或范围进行拆分的节点的混合体,则可以创建一个查询以仅返回回归节点。 NODE_DISTRIBUTION表包含回归公式的详细信息。 在这个示例中,列被整理为平面形式,并且将NODE_DISTRIBUTION表加上别名以便于查看。 但是,在此模型中,没有发现回归器将收入与其他连续属性相关联。 在这种情况下,Analysis Services 将返回该属性的平均值和该属性的模型中的总方差。
SELECT FLATTENED NODE_DISTRIBUTION AS t
FROM DT_Predict. CONTENT
WHERE NODE_TYPE = 25
示例结果:
t.ATTRIBUTE_NAME | t.ATTRIBUTE_VALUE | 技术支持 | t.概率 | t.方差 | t.VALUETYPE |
---|---|---|---|---|---|
年收入 | 失踪 | 0 | 0.000457142857142857 | 0 | 1 |
年收入 | 57220.8876687257 | 17484 | 0.999542857142857 | 1041275619.52776 | 3 |
57220.8876687257 | 0 | 0 | 1041216662.54387 | 11 |
有关回归模型中使用的值类型和统计信息的详细信息,请参阅线性回归模型的挖掘模型内容(Analysis Services - 数据挖掘)。
预测函数列表
所有Microsoft算法都支持一组常见的函数。 但是,Microsoft决策树算法支持下表中列出的其他函数。
预测函数 | 用法 |
IsDescendant (DMX) | 确定一个节点是否是模型中另一个节点的子节点。 |
IsInNode (DMX) | 指示指定的节点是否包含当前情况。 |
PredictAdjustedProbability (DMX) | 返回加权概率。 |
PredictAssociation (DMX) | 预测关联数据集中的成员身份。 |
PredictHistogram (DMX) | 返回与当前预测值相关的值的表。 |
PredictNodeId (DMX) | 返回每个事例的Node_ID。 |
PredictProbability (DMX) | 返回预测值的概率。 |
PredictStdev (DMX) | 返回指定列的预测标准偏差。 |
PredictSupport (DMX) | 返回指定状态的支持值。 |
PredictVariance (DMX) | 返回指定列的方差。 |
有关所有Microsoft算法通用的函数的列表,请参阅“常规预测函数”(DMX)。 有关特定函数的语法,请参阅 数据挖掘扩展插件(DMX)函数参考。
另请参阅
数据挖掘查询
Microsoft决策树算法
Microsoft决策树算法技术参考
决策树模型的挖掘模型内容(Analysis Services - 数据挖掘)