通过


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'  

示例结果:

Metadata
MODEL_CATALOG AdventureWorks
MODEL_NAME TM_NaiveBayes_Filtered
DATE_CREATED 3/1/2008 19:15
LAST_PROCESSED 3/2/2008 20:00
服务名称 Microsoft_Naive_Bayes
PREDICTION_ENTITY 自行车买家,年收入
过滤器 [Region] = 'Europe' OR [Region] = 'North America'

用于此示例的模型基于在 基本数据挖掘教程中创建的 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 自行车购买者 失踪 0 0 1
TM_NaiveBayes 自行车购买者 0 8869 0.507263784 4
TM_NaiveBayes 自行车购买者 1 8615 0.492736216 4
TM_NaiveBayes 性别 失踪 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
自行车购买者 100000001

注释

这些系统存储过程用于 Analysis Services 服务器和客户端之间的内部通信,仅在开发和测试挖掘模型时才应用于方便。 为生产系统创建查询时,应始终使用 DMX 编写自己的查询。

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

使用 Naive Bayes 模型进行预测

Microsoft Naive Bayes 算法通常用于预测,而不是用于探索输入和可预测属性之间的关系。 但是,模型支持对预测和关联使用预测函数。

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

以下查询使用单一实例查询基于模型提供新的值和预测,这些特征的客户是否可能购买自行车。 在回归模型中创建单一实例查询的最简单方法是使用 “单一实例查询输入 ”对话框。 例如,可以通过选择TM_NaiveBayes模型、选择 Singleton Query 和从下拉列表[Commute Distance]Gender中选择值来生成以下 DMX 查询。

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  

示例结果:

自行车购买者 $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  

部分结果:

型号
女子山短裤
水瓶
Touring-3000
Touring-2000
Touring-1000

函数列表

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

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

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

另请参阅

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