针对数据挖掘模型创建查询时,可以创建内容查询,该查询提供有关模型中存储的信息的详细信息,也可以创建预测查询,该查询使用模型中的模式根据提供的新数据进行预测。 对于序列聚类分析模型,内容查询通常提供有关找到的群集或这些群集中的转换的其他详细信息。 还可以使用查询检索有关模型的元数据。
对序列聚类分析模型的预测查询通常基于序列和转换、模型中包括的非序列属性或序列和非序列属性的组合提出建议。
本部分介绍如何为基于Microsoft序列聚类分析算法的模型创建查询。 有关创建查询的常规信息,请参阅 数据挖掘查询。
内容查询
预测查询
查找有关序列聚类分析模型的信息
若要对挖掘模型的内容创建有意义的查询,必须了解模型内容的结构,以及哪些节点类型存储了哪些类型的信息。 有关详细信息,请参阅序列聚类分析模型的挖掘模型内容(Analysis Services - 数据挖掘)。
示例查询 1:使用数据挖掘架构行集返回模型参数
通过查询数据挖掘架构行集,可以找到有关模型的各种信息,包括基本元数据、模型创建和上次处理的日期和时间、模型所基于的挖掘结构的名称以及用作可预测属性的列。
以下查询返回用于生成和训练模型的参数。 [Sequence Clustering] 可以在 基本数据挖掘教程的第 5 课中创建此模型。
SELECT MINING_PARAMETERS
from $system.DMSCHEMA_MINING_MODELS
WHERE MODEL_NAME = 'Sequence Clustering'
示例结果:
| 挖矿参数 |
|---|
| CLUSTER_COUNT=15,MINIMUM_SUPPORT=10,MAXIMUM_STATES=100,MAXIMUM_SEQUENCE_STATES=64 |
请注意,此模型是使用默认值 10 为 CLUSTER_COUNT生成的。 为CLUSTER_COUNT指定非零群集数时,该算法会将此数字视为要查找的近似分类数的提示。 但是,在分析过程中,算法可能会发现更多或更少的群集。 在这种情况下,算法发现 15 个聚类最适合训练数据。 因此,已完成模型的参数值列表将报告由算法确定的分类计数,而不是创建模型时传入的值。
此行为与让算法确定最佳群集数有何不同? 作为试验,可以创建另一个使用同一数据的聚类分析模型,但将CLUSTER_COUNT设置为 0。 执行此作时,算法会检测 32 个群集。 因此,通过使用默认值 10 进行CLUSTER_COUNT,可以限制结果数。
默认情况下使用值 10,因为减少群集数可使大多数人更轻松地浏览和了解数据中的分组。 但是,每个模型和数据集不同。 你可能希望试验不同的分类数,以查看哪个参数值生成最准确的模型。
示例查询 2:获取状态序列列表
挖掘模型内容将训练数据中找到的序列存储为第一个状态,以及所有相关第二个状态的列表。 第一个状态用作序列的标签,相关的第二种状态称为转换。
例如,在序列被分组到分类之前,以下查询返回模型中第一个状态列表的完整清单。 可以通过返回将模型根节点作为父节点的序列(NODE_TYPE = 13)列表(PARENT_UNIQUE_NAME = 0)来获取此列表。 FLATTENED 关键字使结果更易于阅读。
注释
列的名称 PARENT_UNIQUE_NAME、Support 和 Probability 必须括在中括号中,才能将它们与同名的保留关键字区分开来。
SELECT FLATTENED NODE_UNIQUE_NAME,
(SELECT ATTRIBUTE_VALUE AS [Product 1],
[Support] AS [Sequence Support],
[Probability] AS [Sequence Probability]
FROM NODE_DISTRIBUTION) AS t
FROM [Sequence Clustering].CONTENT
WHERE NODE_TYPE = 13
AND [PARENT_UNIQUE_NAME] = 0
部分结果:
| 节点_唯一_名称 (NODE_UNIQUE_NAME) | 产品 1 | 序列支持 | 序列概率 |
|---|---|---|---|
| 1081327 | 失踪 | 0 | ####### |
| 1081327 | All-Purpose 自行车停放架 | 十七 | 0.00111 |
| 1081327 | 自行车清洗 | 64 | 0.00418 |
| 1081327 | (省略第 4-36 行) | ||
| 1081327 | 女子登山短裤 | 506 | 0.03307 |
模型中的序列列表始终按升序按字母顺序排序。 序列的排序非常重要,因为可以通过查看序列的订单号找到相关的转换。 该值 Missing 始终为转换 0。
例如,在前面的结果中,产品“妇女山短裤”是模型中的序列号 37。 你可以使用这些信息查看在“妇女山短裤”之后购买的所有产品。
为此,首先,引用在上一个查询中为NODE_UNIQUE_NAME返回的值,以获取包含模型的所有序列的节点的 ID。 将此值作为父节点的 ID 传递给查询,以便仅获取此节点中包含的转换,该转换恰好包含模型的 al 序列列表。 但是,如果想要查看特定群集的转换列表,则可以传入群集节点的 ID,并仅查看与该群集关联的序列。
SELECT NODE_UNIQUE_NAME
FROM [Sequence Clustering].CONTENT
WHERE NODE_DESCRIPTION = 'Transition row for sequence state 37'
AND [PARENT_UNIQUE_NAME] = '1081327'
示例结果:
| 节点_唯一_名称 (NODE_UNIQUE_NAME) |
|---|
| 1081365 |
此 ID 表示的节点包含一个序列列表,这些序列紧随“女士登山短裤”产品,并附有支持值和概率值。
SELECT FLATTENED
(SELECT ATTRIBUTE_VALUE AS Product2,
[Support] AS [P2 Support],
[Probability] AS [P2 Probability]
FROM NODE_DISTRIBUTION) AS t
FROM [Sequence Clustering].CONTENT
WHERE NODE_UNIQUE_NAME = '1081365'
示例结果:
| t.Product2 | t.P2 支持 | t.P2 概率 |
|---|---|---|
| 失踪 | 230.7419 | 0.456012 |
| 经典背心 | 8.16129 | 0.016129 |
| 自行车帽 | 60.83871 | 0.120235 |
| Half-Finger 手套 | 30.41935 | 0.060117 |
| Long-Sleeve 徽标球衣 | 86.80645 | 0.171554 |
| 赛车袜子 | 28.93548 | 0.057185 |
| Short-Sleeve 经典针织运动衫 | 60.09677 | 0.118768 |
请注意,对与女子山短裤相关的各种序列的支持在模型中为 506。 这些转换的支持值总和是506。 但是,如果您期望支持简单地表示包含每种转换过程的实例计数,则这些数字不是整数,这显得有些奇怪。 但是,由于创建分类的方法计算部分成员身份,因此群集中任何转换的概率必须按属于该特定分类的概率来加权。
例如,如果有四个分类,则特定序列可能具有 40 个% 属于群集 1、30 个% 属于群集 2 的机会、20 个属于群集 3 的 20 个% 机会,以及 10 个属于群集 4 的 10 个% 机会。 算法确定转换最有可能属于的分类后,它会按聚类先前概率对分类中的概率进行加权。
示例查询 3:使用系统存储过程
从这些查询示例中可以看到,模型中存储的信息很复杂,可能需要创建多个查询来获取所需的信息。 但是,Microsoft序列聚类分析查看器提供了一组功能强大的工具,用于以图形方式浏览序列聚类分析模型中包含的信息,还可以使用查看器查询和向下钻取模型。
在大多数情况下,Microsoft 序列聚类查看器中展示的信息是通过使用 Analysis Services 系统存储过程来查询模型而创建的。 可以针对模型内容编写数据挖掘扩展插件(DMX)查询来检索相同的信息,但 Analysis Services 系统存储过程在浏览或测试模型时提供了方便的快捷方式。
注释
系统存储过程用于服务器的内部处理以及Microsoft提供的客户端与Analysis Services服务器交互。 因此,Microsoft保留随时更改它们的权利。 尽管为了方便起见,我们在此处介绍它们,但我们不支持他们在生产环境中使用。 为了确保生产环境中的稳定性和兼容性,应始终使用 DMX 编写自己的查询。
本部分提供了有关如何使用系统存储过程针对序列聚类分析模型创建查询的一些示例:
群集概要和示例实例
“分类配置文件”选项卡显示模型中的分类列表、每个分类的大小以及指示群集中包含的状态的直方图。 在查询中可以使用两个系统存储过程来检索类似的信息:
GetClusterProfile返回群集的特征,其中包含在群集的NODE_DISTRIBUTION表中找到的所有信息。GetNodeGraph返回可用于构造分类的数学图形表示形式的节点和边缘,这些表示形式对应于序列聚类分析视图的第一个选项卡上看到的内容。 节点是群集,边缘表示权重或强度。
下面的示例演示如何使用系统存储过程 GetClusterProfiles返回模型中的所有群集及其各自的配置文件。 此存储过程执行一系列 DMX 语句,这些语句返回模型中的完整配置文件集。 但是,若要使用此存储过程,必须知道模型的地址。
CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterProfiles('Sequence Clustering', 2147483647, 0)
以下示例演示如何使用系统存储过程 GetNodeGraph检索特定群集(群集 12)的配置文件,并指定群集 ID,该 ID 通常与群集名称中的数字相同。
CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetNodeGraph('Sequence Clustering','12',0)
如果省略群集 ID,如以下查询所示,GetNodeGraph 则返回所有集群概要文件的有序扁平化列表。
CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetNodeGraph('Sequence Clustering','',0)
“ 群集配置文件 ”选项卡还显示模型示例事例的直方图。 这些示例事例表示模型的理想化事例。 这些事例不以训练数据相同的方式存储在模型中;必须使用特殊语法来检索模型的示例事例。
SELECT * FROM [Sequence Clustering].SAMPLE_CASES WHERE IsInNode('12')
有关更多信息,请参阅 SELECT FROM <模型>.SAMPLE_CASES (DMX)。
分类特征和分类歧视
“ 分类特征 ”选项卡汇总了每个分类的主要属性,按概率排名。 你可以了解属于群集的事例数,以及群集中事例的分布情况:每个特征都有一定的支持。 若要查看特定群集的特征,必须知道群集的 ID。
以下示例使用系统存储过程 GetClusterCharacteristics返回分类 12 的所有特征,这些特征的概率分数超过指定的阈值 0.0005。
CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterCharacteristics('Sequence Clustering','12',0.0005)
若要返回所有群集的特征,可以将群集 ID 留空。
CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterCharacteristics('Sequence Clustering','',0.0005)
以下示例调用系统存储过程 GetClusterDiscrimination 来比较群集 1 和群集 12 的特征。
CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterDiscrimination('Sequence Clustering','1','12',0.0005,true)
如果要在 DMX 中编写自己的查询来比较两个分类,或将群集与其补充进行比较,必须先检索一组特征,然后检索感兴趣的特定分类的特征,并比较这两个集。 此方案更为复杂,通常需要一些客户端处理。
状态和转换
Microsoft序列聚类的“状态转换”选项卡在后端执行复杂查询,以检索和比较不同群集的统计信息。 若要重现这些结果,需要更复杂的查询和一些客户端处理。
但是,可以使用“ 内容查询”部分示例 2 中所述的 DMX 查询来检索序列或单个转换的概率和状态。
使用模型进行预测
对序列聚类分析模型的预测查询可以使用与其他聚类分析模型一起使用的许多预测函数。 此外,可以使用特殊的预测函数 PredictSequence (DMX)提出建议或预测下一个状态。
示例查询 4:预测下一个状态或状态
给定值,可以使用 PredictSequence (DMX) 函数预测下一个最有可能的状态。 还可以预测多个下一个状态:例如,可以返回客户可能购买的前三种产品的列表来提供建议列表。
下面的示例查询是一个单一实例预测查询,它返回前五个预测及其概率。 由于模型包含嵌套表,因此在进行预测时必须使用嵌套表 [v Assoc Seq Line Items]作为列引用。 此外,当您提供值作为输入时,必须联接 Case 表和嵌套表的列,如嵌套的 SELECT 语句所示。
SELECT FLATTENED PredictSequence([v Assoc Seq Line Items], 7)
FROM [Sequence Clustering]
NATURAL PREDICTION JOIN
(SELECT (SELECT 1 as [Line Number],
'All-Purpose Bike Stand' as [Model]) AS [v Assoc Seq Line Items])
AS t
示例结果:
| Expression.$Sequence | 表达式.行号 | Expression.Model |
|---|---|---|
| 1 | 自行车帽 | |
| 2 | 自行车帽 | |
| 3 | Sport-100 | |
| 4 | Long-Sleeve 徽标球衣 | |
| 5 | Half-Finger 手套 | |
| 6 | All-Purpose 自行车停放架 | |
| 7 | All-Purpose 自行车停放架 |
结果中有三列,即使您可能只希望看到一列,因为查询始终会返回一个案例表的列。 此处的结果已被扁平化处理,否则查询将返回一个包含两个嵌套表列的单个列。
列 $sequence 是由函数 PredictSequence 默认返回的一列,用于对预测结果进行排序。 列 [Line Number]是匹配模型中的序列键所必需的,但键不是输出的。
有趣的是,All-Purpose 自行车站之后最可能的预测序列是自行车帽和自行车帽。 这不是一个错误。 根据向客户呈现数据的方式,以及训练模型时数据的分组方式,有可能具有此类序列。 例如,如果无法指定数量,客户可以购买自行车帽(红色),然后购买另一个自行车帽(蓝色),或连续购买两个。
行 6 和 7 中的值是占位符。 到达可能的转换链的末尾时,而不是终止预测结果,作为输入传递的值将添加到结果中。 例如,如果将预测数增加到 20,则第 6-20 行的值将相同,All-Purpose Bike Stand。
函数列表
所有Microsoft算法都支持一组常见的函数。 但是,Microsoft序列聚类分析算法支持下表中列出的其他函数。
| 预测函数 | 用法 |
| 群集(DMX) | 返回最有可能包含输入事例的群集 |
| ClusterDistance (DMX) | 返回输入事例与指定分类的距离,如果未指定任何分类,则输入事例与最有可能的分类距离。 此函数可用于任何类型的聚类分析模型(EM、K-Means 等),但结果因算法而异。 |
| ClusterProbability (DMX) | 返回输入事例属于指定分类的概率。 |
| IsInNode (DMX) | 指示指定的节点是否包含当前案例。 |
| PredictAdjustedProbability (DMX) | 返回指定状态的调整概率。 |
| PredictAssociation (DMX) | 预测关联成员身份。 |
| PredictCaseLikelihood (DMX) | 返回输入案例适合现有模型的可能性。 |
| PredictHistogram (DMX) | 返回一个表,表示给定列的预测的直方图。 |
| PredictNodeId (DMX) | 返回分类事例的节点Node_ID。 |
| PredictProbability (DMX) | 返回指定状态的概率。 |
| PredictSequence (DMX) | 预测指定序列数据集的未来序列值。 |
| PredictStdev (DMX) | 返回指定列的预测标准偏差。 |
| PredictSupport (DMX) | 返回指定状态的支持值。 |
| PredictVariance (DMX) | 返回指定列的方差。 |
有关所有Microsoft算法通用的函数的列表,请参阅“常规预测函数”(DMX)。 有关特定函数的语法,请参阅 数据挖掘扩展插件(DMX)函数参考。
另请参阅
数据挖掘查询
Microsoft序列聚类分析算法技术参考
Microsoft序列聚类分析算法
序列聚类模型的挖掘模型内容(Analysis Services - 数据挖掘)