共用方式為


叢集模型查詢範例

當您針對數據採礦模型建立查詢時,可以擷取模型的相關元數據,或建立內容查詢,以提供分析中所探索模式的詳細數據。 或者,您可以建立預測查詢,該查詢會使用模型中的模式來為新數據進行預測。 每種查詢類型都會提供不同的資訊。 例如,內容查詢可能會提供有關找到之叢集的其他詳細數據,而預測查詢可能會告訴您哪些叢集最有可能屬於新數據點。

本節說明如何針對以Microsoft叢集演算法為基礎的模型建立查詢。

內容查詢

使用 DMX 取得模型元數據

從架構數據列集擷取模型元數據

傳回叢集或叢集清單

回傳叢集的屬性

使用系統預存程式傳回叢集配置檔

尋找叢集的辨別因素

傳回屬於群組的案例

預測查詢

從群集模型預測結果

判斷叢集成員資格

依據機率和距離傳回所有可能的叢集

尋找關於模型的資訊

所有採礦模型都會根據標準化架構、採礦模型架構數據列集來公開演算法所學習的內容。 您可以使用數據採礦延伸模組 (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_群集
MODEL_NAME Adventure Works DW
節點標題 叢集模型
節點支援 12939
CHILDREN_CARDINALITY (子項目基數) 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_分群分析
建立日期 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 英哩,地區=北美洲,Bike Buyer=1,家中幼童數量=0,擁有汽車數量=1,通勤距離=0-1 英哩,英文教育=學士學位,總計兒童=1,家中幼童數量=2,英文職業=技術工,婚姻狀態=S,兒童總數=0,房屋擁有者旗標=0,性別=F,兒童總數=2,地區=太平洋

定義叢集的屬性可以在數據採礦架構數據列集中的兩個數據行中找到。

  • NODE_DESCRIPTION數據列包含以逗號分隔的屬性清單。 請注意,屬性清單可能為了顯示目的而縮寫。

  • NODE_DISTRIBUTION數據列中的巢狀數據表包含叢集屬性的完整清單。 如果您的用戶端不支援階層式數據列集,您可以在 SELECT 資料行清單之前加入 FLATTENED 關鍵詞,以傳回巢狀數據表。 如需使用 FLATTENED 關鍵詞的詳細資訊,請參閱 SELECT FROM <model>.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:使用系統預存程式傳回叢集配置檔

做為快捷方式,而不是使用 DMX 撰寫自己的查詢,您也可以呼叫 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時的結果範例:

自行車買家 表現
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  

範例結果︰

標準化值 非正規化值
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])  
表達式.$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-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叢集演算法