Naive Bayes 模型查询示例

适用于:SQL Server 2019 及更早版本的 Analysis Services Azure Analysis Services Fabric/Power BI Premium

重要

数据挖掘在 SQL Server 2017 Analysis Services 中已弃用,现在在 SQL Server 2022 Analysis Services 中已停止使用。 对于已弃用和停止使用的功能,文档不会更新。 若要了解详细信息,请参阅 Analysis Services 后向兼容性

在创建针对数据挖掘模型的查询时,您既可以创建内容查询,也可创建预测查询;内容查询提供有关分析过程中发现的模式的详细信息,而预测查询则使用模型中的模式来对新数据进行预测。 您还可以通过使用针对数据挖掘架构行集的查询来检索元数据。 本节说明如何创建针对基于 Microsoft Naive Bayes 算法的模型的查询。

内容查询

使用 DMX 获取模型元数据

检索定型数据的摘要

查找有关属性的详细信息

使用系统存储过程

预测查询

使用单独查询预测结果

获取具有概率和支持值的预测

预测关联

查找有关 Naive Bayes 模型的信息

Naive Bayes 模型的模型内容可提供有关定型数据中值分布的聚合信息。 您还可以通过创建针对数据挖掘架构行集的查询来检索有关模型的元数据的信息。

示例查询 1:使用 DMX 获取模型元数据

通过查询数据挖掘架构行集,您可找到模型的元数据。 这包括模型创建时间、上次处理模型时间、模型所基于的挖掘结构的名称以及用作可预测属性的列的名称。 您还可以返回创建模型时所使用的参数。

SELECT MODEL_CATALOG, MODEL_NAME, DATE_CREATED, LAST_PROCESSED,  
SERVICE_NAME, PREDICTION_ENTITY, FILTER  
FROM $system.DMSCHEMA_MINING_MODELS  
WHERE MODEL_NAME = 'TM_NaiveBayes_Filtered'  

示例结果:

元数据
MODEL_CATALOG AdventureWorks
MODEL_NAME TM_NaiveBayes_Filtered
DATE_CREATED 3/1/2008 19:15
LAST_PROCESSED 3/2/2008 20:00
SERVICE_NAME Microsoft_Naive_Bayes
PREDICTION_ENTITY Bike Buyer,Yearly Income
FILTER [Region] = 'Europe' OR [Region] = 'North America'

此示例所使用的模型基于您在 Basic Data Mining Tutorial中创建的 Naive Bayes 模型,但进行了修改,添加了第二个可预测属性,并对定型数据应用了筛选器。

示例查询 2:检索定型数据的摘要

在 Naive Bayes 模型中,有关定型数据中值分布的聚合信息存储在边际统计节点中。 该摘要获取方便,您不必创建针对定型数据的 SQL 查询,就可找到该摘要。

下面的示例使用 DMX 内容查询,从节点 (NODE_TYPE = 24) 检索数据。 由于统计信息存储在嵌套表中,因此,使用 FLATTENED 关键字是为了使结果更易查看。

SELECT FLATTENED MODEL_NAME,  
(SELECT ATTRIBUTE_NAME, ATTRIBUTE_VALUE, [SUPPORT], [PROBABILITY], VALUETYPE FROM NODE_DISTRIBUTION) AS t  
FROM TM_NaiveBayes.CONTENT  
WHERE NODE_TYPE = 26  

注意

您必须将列名 SUPPORT 和 PROBABILITY 括在括号中,以便将它们与同名的多维表达式 (MDX) 保留关键字区分开来。

部分结果:

MODEL_NAME T.ATTRIBUTE_NAME t.ATTRIBUTE_VALUE t.SUPPORT t.PROBABILITY t.VALUETYPE
TM_NaiveBayes Bike Buyer Missing 0 0 1
TM_NaiveBayes Bike Buyer 0 8869 0.507263784 4
TM_NaiveBayes Bike Buyer 1 8615 0.492736216 4
TM_NaiveBayes 性别 Missing 0 0 1
TM_NaiveBayes 性别 F 8656 0.495081217 4
TM_NaiveBayes 性别 M 8828 0.504918783 4

例如,这些结果告诉您每个离散值 (VALUETYPE = 4) 的定型事例的数量以及计算出的概率,其中进行了缺失值 (VALUETYPE = 1) 调整。

有关 Naive Bayes 模型中NODE_DISTRIBUTION表中提供的值的定义,请参阅 Naive Bayes 模型的挖掘模型内容 (Analysis Services - 数据挖掘) 。 有关缺失值如何影响支持和概率计算的详细信息,请参阅 缺少值 (Analysis Services - 数据挖掘)

示例查询 3:查找有关属性的详细信息

由于 Naive Bayes 模型经常包含有关不同属性之间关系的复杂信息,因此,查看这些关系的最简便的方法是使用 Microsoft Naive Bayes 查看器。 但您也可创建 DMX 查询来返回数据。

下面的示例演示如何从模型返回有关特定属性 Region的信息。

SELECT NODE_TYPE, NODE_CAPTION,   
NODE_PROBABILITY, NODE_SUPPORT, MSOLAP_NODE_SCORE  
FROM TM_NaiveBayes.CONTENT  
WHERE ATTRIBUTE_NAME = 'Region'  

此查询返回两种类型的节点:表示输入属性 (NODE_TYPE = 10) 的节点和属性 (NODE_TYPE = 11) 的每个值的节点。 使用节点标题(而不是节点名称)来标识节点,是因为标题可同时显示属性名称和属性值。

NODE_TYPE NODE_CAPTION NODE_PROBABILITY NODE_SUPPORT MSOLAP_NODE_SCORE NODE_TYPE
10 自行车购买者 -> 区域 1 17484 84.51555875 10
11 自行车购买者 -> 区域 = 缺失 0 0 0 11
11 自行车购买者 -> 区域 = 北美 0.508236102 8886 0 11
11 自行车购买者 -> 区域 = 太平洋 0.193891558 3390 0 11
11 自行车购买者 -> 区域 = 欧洲 0.29787234 5208 0 11

节点中所存储的某些列与您可从边际统计信息获得的相同,如节点概率分数和节点支持值。 但 MSOLAP_NODE_SCORE 是特殊值,只提供给输入属性节点,指示此节点在模型中的相对重要性。 您可以在“依赖关系网络”窗格中查看更多同类信息,但不会提供分数。

下面的查询返回模型中所有属性的重要性分数:

SELECT NODE_CAPTION, MSOLAP_NODE_SCORE  
FROM TM_NaiveBayes.CONTENT  
WHERE NODE_TYPE = 10  
ORDER BY MSOLAP_NODE_SCORE DESC  

示例结果:

NODE_CAPTION MSOLAP_NODE_SCORE
自行车购买者 -> 儿童总数 181.3654836
自行车购买者 -> 通勤距离 179.8419482
自行车购买者 -> 英语教育 156.9841928
自行车购买者 -> 家庭儿童数 111.8122599
自行车购买者 -> 区域 84.51555875
自行车购买者 -> 婚姻状况 23.13297354
自行车购买者 -> 英语职业 2.832069191

通过在 Microsoft 一般内容树查看器中查看模型内容,您可以更好地了解统计信息所关注的内容。 这里演示了一些简单示例;更多时候,您可能需要执行多个示例,或者在客户端存储并处理结果。

示例 4:使用系统存储过程

除了编写自己的内容查询外,您还可以使用 Analysis Services 系统存储过程浏览结果。 若要使用系统存储过程,请为存储过程的名称加上 CALL 关键字前缀:

CALL GetPredictableAttributes ('TM_NaiveBayes')  

部分结果:

ATTRIBUTE_NAME NODE_UNIQUE_NAME
Bike Buyer 100000001

注意

这些系统存储过程用于 Analysis Services 服务器与客户端之间的通信,请仅在开发和测试挖掘模型时使用它们,以为操作提供便利。 创建生产系统的查询时,请始终使用 DMX 编写您自己的查询。

有关 Analysis Services 系统存储过程的详细信息,请参阅 数据挖掘存储过程 (Analysis Services - 数据挖掘)

使用 Naive Bayes 模型进行预测

和用于浏览输入属性与可预测属性之间的关系相比,Microsoft Naive Bayes 算法通常较少用于预测。 但模型支持使用预测函数进行预测和关联。

示例查询 5:使用单独查询预测结果

下面的查询使用单独查询提供新值,并基于模型预测具有这些特征的客户是否会购买自行车。 创建针对回归模型的查询的最简便方法是使用 “单独查询输入” 对话框。 例如,创建下面的 DMX 查询可以使用以下方法:依次选择 TM_NaiveBayes 模型、 “单独查询”,然后从 [Commute Distance]Gender的下拉列表中选择值。

SELECT  
  Predict([TM_NaiveBayes].[Bike Buyer])  
FROM  
  [TM_NaiveBayes]  
NATURAL PREDICTION JOIN  
(SELECT '5-10 Miles' AS [Commute Distance],  
  'F' AS [Gender]) AS t  

示例结果:

Expression
0

预测函数返回可能性最大的值,在本例中为 0,这意味着此种类型的客户不会购买自行车。

示例查询 6:获取具有概率和支持值的预测

除了预测结果外,您可能经常想知道概率的可靠性。 以下查询使用与上一示例相同的单一实例查询,但添加了预测函数 PredictHistogram (DMX) ,以返回包含支持预测的统计信息的嵌套表。

SELECT  
  Predict([TM_NaiveBayes].[Bike Buyer]),  
  PredictHistogram([TM_NaiveBayes].[Bike Buyer])  
FROM  
  [TM_NaiveBayes]  
NATURAL PREDICTION JOIN  
(SELECT '5-10 Miles' AS [Commute Distance],  
  'F' AS [Gender]) AS t  

示例结果:

Bike Buyer $SUPPORT $PROBABILITY $ADJUSTEDPROBABILITY $VARIANCE $STDEV
0 10161.5714 0.581192599 0.010530981 0 0
1 7321.428768 0.418750215 0.008945684 0 0
0.999828444 5.72E-05 5.72E-05 0 0

表的最后一行显示对支持和概率的缺失值调整。 方差和标准偏差值始终为 0,因为 Naive Bayes 模型无法对连续值建立模型。

示例查询 7:预测关联

如果挖掘结构包含以可预测属性作为键的嵌套表,则不可将 Microsoft Naive Bayes 算法用于关联分析。 例如,可以使用第 3 课:生成市场篮方案 (数据挖掘教程 ) 中创建的挖掘结构来生成 Naive Bayes 模型。 此示例中使用的模型经过修改,目的是向事例表中添加收入和客户区域。

下面的查询示例给出了一个单独查询,该查询预测购买产品 'Road Tire Tube'时还可能会购买产品。 您可使用这些信息,向特定类型的客户推荐产品。

SELECT   PredictAssociation([Association].[v Assoc Seq Line Items])  
FROM [Association_NB]  
NATURAL PREDICTION JOIN  
(SELECT 'High' AS [Income Group],  
  'Europe' AS [Region],  
  (SELECT 'Road Tire Tube' AS [Model])   
AS [v Assoc Seq Line Items])   
AS t  

部分结果:

型号
Women's Mountain Shorts
Water Bottle
Touring-3000
Touring-2000
Touring-1000

函数列表

所有 Microsoft 算法都支持一组通用函数。 但是,Microsoft Naive Bayes 算法支持下表中列出的其他函数。

预测函数 使用情况
IsDescendant (DMX) 确定一个节点是否是模型中另一个节点的子节点。
Predict (DMX) 返回指定列的一个预测值或一组值。
PredictAdjustedProbability (DMX) 返回加权的概率。
PredictAssociation (DMX) 预测关联数据集中的成员身份。
PredictNodeId (DMX) 返回每个事例的 Node_ID。
PredictProbability (DMX) 返回预测值的概率。
PredictSupport (DMX) 返回指定状态的支持值。

若要查看特定函数的语法,请参阅 DMX (数据挖掘扩展) 函数参考

另请参阅

Microsoft Naive Bayes 算法技术参考
Microsoft Naive Bayes Algorithm
Naive Bayes 模型的挖掘模型内容(Analysis Services - 数据挖掘)