叢集模型查詢範例
適用于: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) 陳述式來針對採礦模型結構描述資料列集建立查詢。 在 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 | 10/12/2007 7:42:51 下午 |
LAST_PROCESSED | 10/12/2007 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 | English Education=Degree , 32 < =Age < =48 , Number Cars Owned=0 , 35964.0771121808 < =Yearly Income < =97407.7163393957、English Factory=Professional、通勤 Distance=2-5 英哩、Region=北美洲、Bike Buyer=1、Home=0、Number Cars Owned=1 、通勤Distance=0-1 英哩、英文教育版=單位、總計子系=1、住家的數位子系=2、英文教師=技能手冊、Marital Status=S 、Total Children=0 、House Owner Flag=0 、Gender=F 、Total Children=2 、Region=Pacific |
您可在資料採礦結構描述資料列集中的兩個資料行中找到定義群集的屬性。
NODE_DESCRIPTION 資料行包含以逗號分隔的屬性清單。 請注意屬性清單可以針對顯示用途而進行縮寫。
NODE_DISTRIBUTION 資料行中的巢狀資料表包含群集的完整屬性清單。 如果用戶端不支援階層式資料列集,則您可以在 SELECT 資料行清單之前加入 FLATTENED 關鍵字傳回巢狀資料表。 如需使用 FLATTENED 關鍵字的詳細資訊,請參閱 SELECT FROM < 模型 > 。內容 (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 資料行可以省略。
程式碼的第二行會加入子 SELECT 陳述式,此陳述式僅會從巢狀資料表資料行傳回特定的資料行; 此外,它也會將巢狀資料表的資料列限制為與目標屬性 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 | Missing | 0 |
002 | 0 | 0.576980023 |
002 | 1 | 0.406623939 |
002 | 2 | 0.016380082 |
002 | 3 | 1.60E-05 |
002 | 4 | 0 |
002 | Missing | 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
範例結果︰
屬性 | 值 | 頻率 | 支援 |
---|---|---|---|
Number Children At Home | 0 | 0.999999829076798 | 899 |
區域 | 北美洲 | 0.999852875241508 | 899 |
Total Children | 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)
範例結果︰
屬性 | 值 | Score |
---|---|---|
區域 | 北美洲 | 100 |
English Occupation | Skilled Manual | 94.9003803898654 |
區域 | 歐洲 | -72.5041051379789 |
English Occupation | 手動 | -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,以及另一個未用於模型中的資料行 First Name。 該查詢只會傳回分類為 Cluster 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 |
注意 :根據預設, 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 | 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 |
根據預設值,結果是依機率排序。 結果會告訴您,即使 Cluster 2 的機率相當低,Cluster 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) 函數參考 (資料採礦延伸模組。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應