共用方式為


叢集模型查詢範例

適用於: 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:從群集模型預測結果

如果您建立的叢集模型包含可預測的屬性,您可以使用模型來預測結果。 不過,此模型會根據您是否將可預測數據行設定為 PredictPredictOnly,以不同的方式處理可預測屬性。 如果您將數據行的使用方式設定為 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) 函式參考

另請參閱

數據採礦查詢
Microsoft 叢集演算法技術參考
Microsoft 叢集演算法