聚类分析模型查询示例

针对数据挖掘模型创建查询时,可以检索有关模型的元数据,或创建内容查询,该查询提供有关分析中发现的模式的详细信息。 或者,可以创建一个预测查询,该查询使用模型中的模式对新数据进行预测。 每种类型的查询都会提供不同的信息。 例如,内容查询可能会提供有关找到的群集的其他详细信息,而预测查询可能会告诉你哪些群集最有可能属于新数据点。

本部分介绍如何为基于Microsoft聚类分析算法的模型创建查询。

内容查询

使用 DMX 获取模型元数据

从模式行集检索模型元数据

返回群集或群集列表

返回群集的属性

使用系统存储过程返回群集配置文件

寻找聚类的区分因素

返回属于群集的事例

预测查询

从聚类分析模型预测结果

确定群集成员身份

返回所有可能的聚类及其概率和距离。

查找有关模型的信息

所有挖掘模型都根据标准化架构(挖掘模型架构行集)公开算法学习的内容。 可以使用数据挖掘扩展插件 (DMX) 语句针对挖掘模型架构行集创建查询。 在 SQL Server 2014 中,还可以直接以系统表的形式查询架构行集。

返回到顶部

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

以下查询返回有关在基本数据挖掘教程中创建的聚类分析模型 TM_Clustering的基本元数据。 聚类分析模型的父节点中提供的元数据包括模型的名称、存储模型的数据库以及模型中的子节点数。 此查询使用 DMX 内容查询从模型的父节点检索元数据:

SELECT MODEL_CATALOG, MODEL_NAME, NODE_CAPTION,   
NODE_SUPPORT, [CHILDREN_CARDINALITY], NODE_DESCRIPTION  
FROM TM_Clustering.CONTENT  
WHERE NODE_TYPE = 1  

注释

必须将列的名称(CHILDREN_CARDINALITY)括在括号中,以便将其与同名的多维表达式(MDX)保留关键字区分开来。

示例结果:

模型目录 TM_Clustering
MODEL_NAME Adventure Works DW
节点标题 群集模型
节点支持 12939
儿童基数 10
节点描述 全部

有关聚类分析模型中这些列的含义的定义,请参阅聚类分析模型的挖掘模型内容(Analysis Services - 数据挖掘)。

返回到顶部

示例查询 2:从架构行集中检索模型元数据

通过查询数据挖掘架构行集,可以找到 DMX 内容查询中返回的相同信息。 但是,架构行集提供了一些其他列。 其中包括创建模型时使用的参数、模型上次处理的日期和时间以及模型的所有者。

以下示例返回模型创建、修改和上次处理的日期,以及用于生成模型的聚类分析参数以及训练集的大小。 此信息可用于记录模型,或确定哪些聚类分析选项用于创建现有模型。

SELECT MODEL_NAME, DATE_CREATED, LAST_PROCESSED, PREDICTION_ENTITY, MINING_PARAMETERS   
from $system.DMSCHEMA_MINING_MODELS  
WHERE MODEL_NAME = 'TM_Clustering'  

示例结果:

MODEL_NAME TM_Clustering
创建日期 2007/10/12 下午 7:42:51
最后处理 2007/10/12 下午 8:09:54
预测实体 自行车购买者
挖矿参数 CLUSTER_COUNT=10,

CLUSTER_SEED=0,

CLUSTERING_METHOD=1,

MAXIMUM_INPUT_ATTRIBUTES=255,

MAXIMUM_STATES=100,

MINIMUM_SUPPORT=1,

MODELLING_CARDINALITY=10,

SAMPLE_SIZE=50000,

STOPPING_TOLERANCE=10

返回到顶部

查找有关群集的信息

对聚类分析模型最有用的内容查询通常返回可以使用 群集查看器浏览的相同类型的信息。 这包括集群配置文件、集群特征和集群区分。 本部分提供检索此信息的查询示例。

示例查询 3:返回群集或群集列表

由于所有群集的节点类型为 5,因此只需查询该类型的节点的模型内容即可轻松检索群集列表。 还可以按概率或支持筛选返回的节点,如以下示例所示。

SELECT NODE_NAME, NODE_CAPTION ,NODE_SUPPORT, NODE_DESCRIPTION  
FROM TM_Clustering.CONTENT  
WHERE NODE_TYPE = 5 AND NODE_SUPPORT > 1000  

示例结果:

节点名称 002
节点标题 群集 2
节点支持 1649
节点描述 英语教育=研究生学位,32 <=年龄 <=48,拥有的汽车数量=0, 35964.0771121808 <=年收入 <=97407.7163393957,英语职业=专业,通勤距离=2-5 英里,地区=北美,自行车买家=1,家庭中的儿童数=0,拥有的汽车数量=1,通勤距离=0-1 英里,英语教育=学士学位,总儿童=1,家庭儿童数=2,英语职业=技能工人,婚姻状况=S,总儿童=0,房屋所有者标志=0,性别=F,总儿童=2,地区=太平洋

定义群集的属性可以在数据挖掘架构行集中的两列中找到。

  • NODE_DESCRIPTION列包含逗号分隔的属性列表。 请注意,为了显示目的,可能会缩写属性列表。

  • NODE_DISTRIBUTION列中的嵌套表包含群集属性的完整列表。 如果客户端不支持分层行集,则可以通过在 SELECT 列列表之前添加 FLATTENED 关键字来返回嵌套表。 有关使用 FLATTENED 关键字的详细信息,请参阅 SELECT FROM <模型>.CONTENT (DMX)

返回到顶部

示例查询 4:返回群集的属性

对于每个群集, 群集查看器 显示一个配置文件,其中列出了属性及其值。 查看器还显示直方图,该直方图显示模型中事例总体的值分布情况。 如果要在查看器中浏览模型,可以轻松地从挖掘图例复制直方图,然后将其粘贴到 Excel 或 Word 文档中。 还可以使用查看器的“群集特征”窗格以图形方式比较不同分类的属性。

但是,如果一次必须获取多个群集的值,则查询模型会更容易。 例如,浏览模型时,你可能会注意到前两个分类在一个属性 Number Cars Owned方面有所不同。 因此,需要提取每个群集的值。

SELECT TOP 2 NODE_NAME,   
(SELECT ATTRIBUTE_VALUE, [PROBABILITY] FROM NODE_DISTRIBUTION WHERE ATTRIBUTE_NAME = 'Number Cars Owned')  
AS t  
FROM [TM_Clustering].CONTENT  
WHERE NODE_TYPE = 5  

代码的第一行指定只需要前两个群集。

注释

默认情况下,群集按支持进行排序。 因此,可以省略NODE_SUPPORT列。

代码的第二行添加一个子选择语句,该语句仅返回嵌套表列中的某些列。 此外,它将嵌套表中的行限制为与目标属性 Number Cars Owned相关的行。 为了简化显示,给嵌套表赋予了一个别名。

注释

嵌套表列 PROBABILITY必须括在括号中,因为它也是保留的 MDX 关键字的名称。

示例结果:

节点名称 T.ATTRIBUTE_VALUE T.PROBABILITY
001 2 0.829207754
001 1 0.109354156
001 3 0.034481552
001 4 0.013503302
001 0 0.013453236
001 失踪 0
002 0 0.576980023
002 1 0.406623939
002 2 0.016380082
002 3 1.60E-05
002 4 0
002 失踪 0

返回到顶部

示例查询 5:使用系统存储过程返回群集配置文件

作为一种简便的方法,您可以调用 Analysis Services 用于处理群集的系统存储过程,而不是使用 DMX 编写自己的查询。 以下示例演示如何使用内部存储过程返回 ID 为 002 的群集的配置文件。

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterProfiles('TM_Clustering", '002',0.0005  

同样,可以使用系统存储过程返回特定群集的特征,如以下示例所示:

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterCharacteristics('TM_Clustering", '009',0.0005  

示例结果:

特性 价值观 频率 支持
家庭儿童数 0 0.999999829076798 899
区域 北美洲 0.999852875241508 899
总儿童人数 0 0.993860958572323 893

注释

数据挖掘系统存储过程供内部使用,Microsoft保留根据需要更改它们的权利。 对于生产用途,我们建议使用 DMX、AMO 或 XMLA 创建查询。

返回到顶部

示例查询 6:查找聚类的区分因素

使用群集查看器“分类歧视”选项卡,可以轻松地将群集与其他群集进行比较,或者将群集与所有剩余事例(群集的补充)进行比较。

但是,创建查询以返回此信息可能比较复杂,并且可能需要在客户端上进行一些额外的处理来存储临时结果,并比较两个或多个查询的结果。 作为快捷方式,可以使用系统存储过程。

以下查询返回一个表,该表指示节点 ID 为 009 和 007 的两个群集之间的主要区分因素。 具有正值的属性支持分类 009,而负值的属性则有利于分类 007。

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterDiscrimination('TM_Clustering','009','007',0.0005,true)  

示例结果:

特性 价值观 得分
区域 北美洲 100
英语职业 技能手册 94.9003803898654
区域 欧洲 -72.5041051379789
英语职业 手动 -69.6503163202722

如果从第一个下拉列表中选择“分类 9”,并从第二个下拉列表中选择“分类 7”,则这是分类 歧视 查看器图表中显示的相同信息。 若要将 cluster 9 与其补充进行比较,请使用第二个参数中的空字符串,如以下示例所示:

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterDiscrimination('TM_Clustering','009','',0.0005,true)  

注释

数据挖掘系统存储过程供内部使用,Microsoft保留根据需要更改它们的权利。 对于生产用途,我们建议使用 DMX、AMO 或 XMLA 创建查询。

返回到顶部

示例查询 7:返回属于群集的事例

如果在挖掘模型上启用了钻取功能,您可以创建查询,以返回有关模型中使用的数据实例的详细信息。 此外,如果在数据挖掘结构上启用了钻取功能,则可以使用StructureColumn (DMX)函数将数据结构中的列包括在内。

以下示例返回模型中使用的两列:Age 和 Region,以及模型中未使用的另外一列“名字”。 查询仅返回分类为群集 1 的事例。

SELECT [Age], [Region], StructureColumn('First Name')  
FROM [TM_Clustering].CASES  
WHERE IsInNode('001')  

若要返回属于群集的事例,必须知道群集的 ID。 可以通过浏览其中一个查看器中的模型来获取群集的 ID。 或者,可以重命名群集以便更轻松地引用,之后可以使用名称代替 ID 号。 请注意,如果重新处理模型,您分配给群集的名称将会丢失。

返回到顶部

使用模型进行预测

尽管聚类分析通常用于描述和理解数据,但Microsoft实现还允许对群集成员身份进行预测,并返回与预测关联的概率。 本部分提供了有关如何在聚类分析模型上创建预测查询的示例。 可以通过指定表格数据源来预测多个实例,也可以通过生成单一查询逐个输入新值。 为确保清晰,本节中的示例都是单项查询。

有关如何使用 DMX 创建预测查询的详细信息,请参阅 数据挖掘查询接口

返回到顶部

示例查询 8:从聚类分析模型预测结果

如果创建的聚类分析模型包含可预测属性,则可以使用该模型对结果进行预测。 但是,模型根据您将可预测列设置为Predict还是PredictOnly,以不同的方式处理可预测属性。 如果将列 Predict的用法设置为,该属性的值将添加到聚类分析模型,并在完成的模型中显示为属性。 但是,如果将列 PredictOnly的用法设置为,则值不用于创建群集。 相反,在模式完成后,聚类分析算法会基于每个事例所属的 PredictOnly 分类为属性创建新值。

以下查询为模型提供了一个新案例,其中该案例的唯一信息是年龄和性别。 SELECT 语句指定你感兴趣的可预测属性/值对, PredictProbability (DMX) 函数告知这些属性的事例具有目标结果的概率。

SELECT  
  [TM_Clustering].[Bike Buyer], PredictProbability([Bike Buyer],1)  
FROM  
  [TM_Clustering]  
NATURAL PREDICTION JOIN  
(SELECT 40 AS [Age],  
  'F' AS [Gender]) AS t  

结果示例,当使用情况设置为 Predict

自行车购买者 表达式
1 0.592924735740338

将使用情况设置为 PredictOnly 并重新处理模型时的结果示例:

自行车购买者 表达式
1 0.55843544003102

在此示例中,模型的差异并不重要。 但是,有时检测值的实际分布与模型预测值之间的差异可能很重要。 在此方案中, PredictCaseLikelihood (DMX) 函数非常有用,因为它告知给定模型的情况的可能性。

PredictCaseLikelihood 函数返回的数字是概率,因此始终介于 0 和 1 之间,值为 .5 表示随机结果。 因此,小于 .5 的分数意味着,给定模型的情况下,预测事例不太可能,并且评分超过.5 表示预测事例更有可能不适合模型。

例如,以下查询返回两个值,用于描述新示例事例的可能性。 非规范化值表示给定当前模型的概率。 使用 NORMALIZED 关键字时,函数返回的可能性分数通过将“概率与模型”除以“不带模型的概率”来调整。

SELECT  
PredictCaseLikelihood(NORMALIZED) AS [NormalizedValue], PredictCaseLikelihood(NONNORMALIZED) AS [NonNormalizedValue]  
FROM  
  [TM_Clustering_PredictOnly]  
NATURAL PREDICTION JOIN  
(SELECT 40 AS [Age],  
  'F' AS [Gender]) AS t  

示例结果:

NormalizedValue 非规范化值
5.56438372679893E-11 8.65459953145182E-68

请注意,这些结果中的数字以科学表示法表示。

返回到顶部

示例查询 9:确定群集成员身份

此示例使用 Cluster (DMX) 函数返回新事例最有可能所属的群集,并使用 ClusterProbability (DMX) 函数返回该群集的成员资格的概率。

SELECT Cluster(), ClusterProbability()  
FROM  
  [TM_Clustering]  
NATURAL PREDICTION JOIN  
(SELECT 40 AS [Age],  
  'F' AS [Gender],  
  'S' AS [Marital Status]) AS t  

示例结果:

$CLUSTER 表达式
群集 2 0.397918596951617

注意 默认情况下,该 ClusterProbability 函数返回最有可能的聚类的概率。 但是,可以使用语法 ClusterProbability('cluster name')指定其他群集。 如果执行此作,请注意每个预测函数的结果与其他结果无关。 因此,第二列中的概率分数可以引用与第一列中命名的分类不同的分类。

返回到顶部

示例查询 10:返回所有可能簇,并附带概率和距离信息

在前面的示例中,概率分数不高。 若要确定是否有更好的聚类,可以使用 PredictHistogram (DMX) 函数和 Cluster (DMX) 函数返回包含所有可能的分类的嵌套表,以及属于每个分类的新事例的概率。 FLATTENED 关键字用于将分层行集更改为平面表,以便更轻松地查看。

SELECT FLATTENED PredictHistogram(Cluster())  
From  
  [TM_Clustering]  
NATURAL PREDICTION JOIN  
(SELECT 40 AS [Age],  
  'F' AS [Gender],  
  'S' AS [Marital Status])  
Expression.$CLUSTER 表达式.$DISTANCE 表达式.$PROBABILITY
群集 2 0.602081403048383 0.397918596951617
群集 10 0.719691686785675 0.280308313214325
群集 4 0.867772590378791 0.132227409621209
群集 5 0.931039872200985 0.0689601277990149
群集 3 0.942359230072167 0.0576407699278328
群集 6 0.958973668972756 0.0410263310272437
群集 7 0.979081275926724 0.0209187240732763
群集 1 0.999169044818624 0.000830955181376364
群集 9 0.999831227795894 0.000168772204105754
群集 8 1 0

默认情况下,结果按概率排名。 结果告诉你,尽管分类 2 的概率相当低,但聚类 2 仍然是最适合新数据点的结果。

注意 其他列 $DISTANCE表示从数据点到群集的距离。 默认情况下,Microsoft聚类分析算法使用可缩放的 EM 聚类分析,它将多个群集分配给每个数据点,并对可能的群集进行排名。 但是,如果使用 K 平均值算法创建聚类分析模型,则每个数据点只能分配一个分类,并且此查询将仅返回一行。 理解这些差异是解释 PredictCaseLikelihood (DMX) 函数的结果所必需的。 有关 EM 与 K 平均值聚类分析之间的差异的详细信息,请参阅 Microsoft聚类分析算法技术参考

返回到顶部

函数列表

所有Microsoft算法都支持一组常见的函数。 但是,使用 Microsoft 聚类分析算法生成的模型支持下表中列出的其他函数。

预测函数 用法
群集(DMX) 返回最有可能包含输入事例的群集。
ClusterDistance (DMX) 返回输入事例与指定分类的距离,如果未指定任何分类,则输入事例与最有可能的分类距离。

返回输入事例属于指定分类的概率。
ClusterProbability (DMX) 返回输入事例属于指定分类的概率。
IsDescendant (DMX) 确定一个节点是否是模型中另一个节点的子节点。
IsInNode (DMX) 指示指定的节点是否包含当前案例。
PredictAdjustedProbability (DMX) 返回加权概率。
PredictAssociation (DMX) 预测关联数据集中的成员身份。
PredictCaseLikelihood (DMX) 返回输入案例适合现有模型的可能性。
PredictHistogram (DMX) 返回与当前预测值相关的值的表。
PredictNodeId (DMX) 返回每个事例的Node_ID。
PredictProbability (DMX) 返回预测值的概率。
PredictStdev (DMX) 返回指定列的预测标准偏差。
PredictSupport (DMX) 返回指定状态的支持值。
PredictVariance (DMX) 返回指定列的方差。

有关特定函数的语法,请参阅 数据挖掘扩展插件(DMX)函数参考

另请参阅

数据挖掘查询
Microsoft聚类分析算法技术参考
Microsoft聚类分析算法