查询决策树模型(Analysis Services - 数据挖掘)
在对数据挖掘模型创建查询时,可以创建内容查询,也可以创建预测查询。内容查询提供有关分析时发现的模式的详细信息,预测查询使用模型中的模式来对新数据进行预测。例如,决策树模型的内容查询可能提供有关树在每个级别上的事例数的统计信息或者区分事例的规则。而预测查询则是将模型映射到新数据,以生成建议、分类等等。也可以使用查询来检索有关模型的元数据。
本节说明如何为基于 Microsoft 决策树算法的模型创建查询。
内容查询
从数据挖掘架构行集检索模型参数
通过使用 DMX 返回与模型中的树有关的详细信息
从决策树模型返回回归节点
预测查询
返回预测和概率
根据决策树预测关联
查找有关决策树模型的信息
若要对决策树模型的内容创建有意义的查询,您应该了解模型内容的结构以及哪些节点类型存储哪类信息。有关详细信息,请参阅决策树模型的挖掘模型内容(Analysis Services - 数据挖掘)。
返回页首
示例查询 1:从数据挖掘架构行集检索模型参数
通过查询数据挖掘架构行集,您可以找到关于模型的元数据,如模型创建时间、上次处理模型的时间、模型基于的挖掘结构的名称和用作可预测属性的列的名称。也可以返回首次创建模型时所使用的参数。
select MINING_PARAMETERS
from $system.DMSCHEMA_MINING_MODELS
WHERE MODEL_NAME = 'TM_Decision Tree'
示例结果:
MINING_PARAMETERS
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 |
NODE_CAPTION |
NODE_SUPPORT |
CHILDREN_CARDINALITY |
---|---|---|---|---|
TM_DecisionTree |
000000001 |
All |
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 |
NODE_CAPTION |
T.ATTRIBUTE_NAME |
T.ATTRIBUTE_VALUE |
SUPPORT |
---|---|---|---|---|
00000000100 |
Number Cars Owned = 0 |
Bike Buyer |
Missing |
0 |
00000000100 |
Number Cars Owned = 0 |
Bike Buyer |
0 |
1067 |
00000000100 |
Number Cars Owned = 0 |
Bike Buyer |
1 |
1875 |
00000000101 |
Number Cars Owned = 3 |
Bike Buyer |
Missing |
0 |
00000000101 |
Number Cars Owned = 3 |
Bike Buyer |
0 |
678 |
00000000101 |
Number Cars Owned = 3 |
Bike Buyer |
1 |
473 |
根据这些结果,您可以知道购买了自行车的客户数 ([Bike Buyer] = 1),1067 个客户拥有 0 辆汽车,473 个客户拥有 3 辆汽车。
假定您希望发现有关购买了自行车的客户的更多信息。您可以通过在查询中使用 IsDescendant 函数来查看任何子树的其他详细信息,如下面的示例所示。通过从包含 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 |
NODE_CAPTION |
t.SUPPORT |
---|---|---|
000000001000100 |
Yearly Income >= 26000 and < 42000 |
266 |
00000000100010100 |
Total Children = 3 |
75 |
0000000010001010100 |
Number Children At Home = 1 |
75 |
返回页首
示例查询 3:从决策树模型返回回归节点
在创建包含连续属性的回归的决策树模型时,可使用回归公式进行预测,也可以提取有关回归公式的信息。有关回归模型的查询的详细信息,请参阅查询线性回归模型(Analysis Services - 数据挖掘)。
如果模型由回归节点和根据离散属性或范围进行拆分的节点混合组成,则可以创建仅返回回归节点的查询。NODE_DISTRIBUTION 表包含回归公式的详细信息。在本示例中,对列进行了平展,对 NODE_DISTRIBUTION 表使用了别名,以便于查看。但在此模型中,找不到将 Income 与其他连续属性相关联的回归量。在这些情况下,Analysis Services 将返回属性的平均值和模型中该属性的总体方差。
SELECT FLATTENED NODE_DISTRIBUTION AS t
FROM DT_Predict. CONTENT
WHERE NODE_TYPE = 25
示例结果:
t.ATTRIBUTE_NAME |
t.ATTRIBUTE_VALUE |
t.SUPPORT |
t.PROBABILITY |
t.VARIANCE |
t.VALUETYPE |
---|---|---|---|---|---|
Yearly Income |
Missing |
0 |
0.000457142857142857 |
0 |
1 |
Yearly Income |
57220.8876687257 |
17484 |
0.999542857142857 |
1041275619.52776 |
3 |
|
57220.8876687257 |
0 |
0 |
1041216662.54387 |
11 |
有关回归模型中使用的值类型和统计信息的详细信息,请参阅线性回归模型的挖掘模型内容(Analysis Services - 数据挖掘)。
返回页首
使用模型进行预测
由于决策树可用于各种任务(包括分类、回归以及关联),因此对决策树模型创建预测查询时,您可以使用许多选项。必须了解创建模型的目的才能明白预测的结果。以下查询示例说明了三种不同的情况:
返回分类模型的预测以及正确预测的概率,然后根据该概率筛选结果;
创建一个单独查询来预测关联;
检索部分决策树的回归公式,其中输入和输出之间的关系是线性的。
返回页首
示例查询 4:返回预测和概率
以下示例查询使用在数据挖掘基础教程中创建的决策树模型并将 AdventureWorks DW、dbo.ProspectiveBuyers 中的示例数据表传递到该模型中,来预测列表中哪些客户将购买自行车。查询包括预测函数 PredictHistogram,该函数将返回一个嵌套表,其中包含有关该模型发现的概率的有用信息。通过添加 WHERE 子句来筛选预测,以便仅返回被预测为概率大于 50% 的潜在自行车购买者。
SELECT
[TM_DecisionTree].[Bike Buyer],
PredictHistogram([Bike Buyer]) as Results
FROM
[TM_DecisionTree]
PREDICTION JOIN
OPENQUERY([Adventure Works DW],
'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 将返回具有列标签 Expression 的嵌套表。可以通过对返回的列使用别名来更改此标签。如果使用别名,则该别名(本例中为 Results)将用作嵌套表中的列标题和值。必须展开嵌套表才能查看结果。
示例结果:
Bike Buyer |
Results |
---|---|
1 |
Results
Bike Buyer$SUPPORT$PROBABILITY$ADJUSTEDPROBABILITY$VARIANCE$STDEV
125400.6348492420456440.01356216828156200
014600.3649841745793770.0066133693255091500
00.0001665833749791770.00016658337497917700
|
如果您的提供程序不支持分层行集(如此处显示的结果),则可以在查询中使用 FLATTENED 关键字将结果返回为包含 Null(替代重复的列值)的表。有关详细信息,请参阅嵌套表(Analysis Services – 数据挖掘)或了解 Select 语句 (DMX)。
返回页首
示例查询 5:根据决策树预测关联
若要使用以下查询,可以为教程中的关联模型创建一个副本,然后将算法更改为决策树算法。有关详细信息,请参阅第 3 课:生成市场篮方案(数据挖掘中级教程)。
以下示例查询是一个单独查询,您可以在 Business Intelligence Development Studio 中轻松创建该查询,方法是选择字段,然后从下拉列表中选择这些字段的值。
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
预期的结果:
Model |
---|
Mountain-200 |
Mountain Tire Tube |
Touring Tire Tube |
结果告诉您要向已购买 Patch Kit 产品的客户推荐的三款最佳产品。也可以在您进行推荐时提供多款产品作为输入,方法是键入值,或使用**“单独查询输入”**对话框,然后添加或删除值。以下示例查询演示如何提供用来进行预测的多个值。这些值用定义输入值的 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
预期的结果:
Model |
---|
Long-Sleeve Logo Jersey |
Mountain-400-W |
Classic Vest |
返回页首
预测函数的列表
所有 Microsoft 算法均支持一组通用的函数,但 Microsoft 决策树算法还支持下表中列出的其他函数。
有关对所有 Microsoft 算法均通用的函数的列表,请参阅将函数映射到查询类型 (DMX)。有关特定函数的语法,请参阅 数据挖掘扩展插件 (DMX) 函数参考。
更改历史记录
更新的内容 |
---|
添加了主题内链接,更便于查看查询示例了。 |
将回归节点示例移到了内容查询上的适当部分。 |