叢集模型查詢範例
適用於: 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叢集演算法為基礎的模型建立查詢。
內容查詢
使用 DMX 取得模型元數據
傳回叢集 的屬性
尋找叢集 的區分因素
傳回屬於叢集 的案例
預測查詢
傳回機率和距離 的所有可能叢集
尋找模型的相關信息
所有採礦模型都會根據標準化架構、採礦模型架構數據列集來公開演算法所學習的內容。 您可以使用數據採礦延伸模組 (DMX) 語句,針對採礦模型架構數據列集建立查詢。 在 SQL Server 2017 中,您也可以直接將架構數據列集查詢為系統數據表。
範例查詢 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) 保留關鍵詞區別。
範例結果:
排 | 元數據 |
---|---|
MODEL_CATALOG | TM_Clustering |
MODEL_NAME | Adventure Works DW |
NODE_CAPTION | 叢集模型 |
NODE_SUPPORT | 12939 |
CHILDREN_CARDINALITY | 10 |
NODE_DESCRIPTION | 都 |
如需這些數據行在群集模型中的意義定義,請參閱 叢集模型(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 |
DATE_CREATED | 2007/10/12 下午 7:42:51 |
LAST_PROCESSED | 2007/10/12 下午 8:09:54 |
PREDICTION_ENTITY | Bike Buyer |
MINING_PARAMETERS | 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
範例結果:
排 | 元數據 |
---|---|
NODE_NAME | 002 |
NODE_CAPTION | 叢集 2 |
NODE_SUPPORT | 1649 |
NODE_DESCRIPTION | 英文教育=研究生學位,32 <=年齡 <=48,數字汽車擁有=0,35964.0771121808 <=年收入 <=97407.7163393939 57、英文職業=專業、通勤距離 =2-5 英里、Region=North America、Bike Buyer=1、Home=0、Number Cars Owned=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 關鍵詞的名稱。
範例結果:
NODE_NAME | 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:使用系統預存程式傳回叢集配置檔
做為快捷方式,而不是使用 DMX 撰寫自己的查詢,您也可以呼叫 SQL Server Analysis Services 用來處理叢集的系統預存程式。 下列範例說明如何使用內部預存程式傳回標識碼為 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:尋找叢集的辨別因素
叢集查看器叢集辨識 索引標籤可讓您輕鬆地比較叢集與另一個叢集,或比較叢集與所有剩餘案例的叢集(叢集補充)。
不過,建立查詢以傳回這項資訊可能相當複雜,而且您可能需要用戶端上一些額外的處理來儲存暫存結果,並比較兩個或多個查詢的結果。 做為快捷方式,您可以使用系統預存程式。
下列查詢會傳回單一數據表,指出兩個叢集之間具有節點標識碼 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],則這與 叢集辨識 查看器圖表中呈現的資訊相同。 若要比較叢集 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')
若要傳回屬於叢集的案例,您必須知道叢集的標識碼。 您可以在其中一個檢視者中流覽模型,以取得叢集的標識碼。 或者,您可以重新命名叢集以方便參考,之後您可以使用名稱取代標識碼。 不過,請注意,如果重新處理模型,您指派給叢集的名稱將會遺失。
使用模型進行預測
雖然叢集通常用於描述和了解數據,但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時的結果範例:
Bike Buyer | 表達 |
---|---|
1 | 0.592924735740338 |
當使用量設定為 PredictOnly 並重新處理模型時,結果範例:
Bike Buyer | 表達 |
---|---|
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 | NonNormalizedValue |
---|---|
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 |
Note 根據預設,ClusterProbability 函式會傳回最有可能叢集的機率。 不過,您可以使用 語法 ClusterProbability('cluster name')
來指定不同的叢集。 如果您這樣做,請注意每個預測函式的結果與其他結果無關。 因此,第二個數據行中的機率分數可能會參考與第一個數據行中名為的叢集不同的叢集。
範例查詢 10:傳回機率和距離的所有可能叢集
在上一個範例中,機率分數並不高。 若要判斷是否有更好的叢集,您可以使用 PredictHistogram (DMX) 函式搭配 叢集 (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 | Expression.$DISTANCE | Expression.$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-means 演算法建立叢集模型,則每個數據點只能指派一個叢集,而且此查詢只會傳回一個數據列。 若要解譯 PredictCaseLikelihood (DMX) 函式的結果,必須了解這些差異。 如需 EM 與 K-means 叢集之間的差異詳細資訊,請參閱 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) 函式參考。