针对数据挖掘模型创建查询时,可以检索有关模型的元数据,或创建内容查询,该查询提供有关分析中发现的模式的详细信息。 或者,可以创建一个预测查询,该查询使用模型中的模式对新数据进行预测。 每种类型的查询都会提供不同的信息。 例如,内容查询可能会提供有关找到的群集的其他详细信息,而预测查询可能会告诉你哪些群集最有可能属于新数据点。
本部分介绍如何为基于Microsoft聚类分析算法的模型创建查询。
内容查询
预测查询
返回所有可能的聚类及其概率和距离。
查找有关模型的信息
所有挖掘模型都根据标准化架构(挖掘模型架构行集)公开算法学习的内容。 可以使用数据挖掘扩展插件 (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)函数参考。