內容查詢是擷取採礦模型內部統計數據和結構相關信息的方法。 有時候,內容查詢可以提供查看器中無法輕易取得的詳細數據。 您也可以使用內容查詢的結果,以程序設計方式擷取其他用途的資訊。
本節提供您可以使用內容查詢擷取之資訊類型的一般資訊,以及內容查詢的一般 DMX 語法。
基本內容查詢
您可以使用預測查詢產生器建立內容查詢、使用 SQL Server Management Studio 中提供的 DMX 內容查詢範本,或直接在 DMX 中撰寫查詢。 不同於預測查詢,您不需要聯結外部數據,因此內容查詢很容易撰寫。
本節提供您可以建立之內容查詢類型的概觀。
挖礦結構或案例資料的查詢可讓您檢視用於訓練的詳細資料。
模型的查詢可以傳回模式、屬性清單、公式等等。
結構和案例數據的查詢
DMX 支援對用來建置採礦結構和模型的快取數據進行查詢。 根據預設,當您定義採礦結構時,會建立此快取,並在處理結構或模型時填入。
警告
此快取無法被清除或刪除,如果您需要將數據分成訓練集和測試集。 如果清除快取,您就無法查詢案例數據。
下列範例示範在案例數據上建立查詢的常見模式,或採礦結構中數據的查詢:
獲取模型的所有案例
SELECT FROM <model>.CASES
使用此語句可從用來建置模型的案例數據擷取指定的數據行。 您必須擁有模型的鑽研許可權,才能執行此查詢。
檢視 結構中包含的所有數據
SELECT FROM <structure>.CASES
使用此語句來檢視結構中包含的所有數據,包括未包含在特定採礦模型中的數據行。 要從採礦結構擷取數據,您必須擁有模型的鑽取權限以及結構的鑽取權限。
取得值範圍
SELECT DISTINCT RangeMin(<column>), RangeMax(<column>) FROM <model>
使用此語句來尋找連續資料行的最小值、最大值和平均值,或離散化資料行的分箱。
取得相異值
SELECT DISTINCT <column>FROM <model>
使用此語句來擷取 DISCRETE 資料行的所有值。 請勿將此語句用於 DISCRETIZED 資料行,應該改用 RangeMin 和 RangeMax 函式。
尋找用來定型模型或結構的案例
SELECT FROM <mining structure.CASES WHERE IsTrainingCase()
使用此語句取得定型模型中使用的完整數據集。
尋找用於測試模型或結構的案例
SELECT FROM <mining structure.CASES WHERE IsTestingCase()
使用此語句來取得已保留的數據,以測試與特定結構相關的採礦模型。
從特定模型模式鑽研到基礎案例數據
SELECT FROM <model>.CASESWHERE IsTrainingCase() AND IsInNode(<node>)
使用此語句可從定型的模型擷取詳細的案例數據。 您必須指定特定的節點:例如,您必須知道叢集的節點標識碼、判定樹的特定分支等等。此外,您必須擁有模型的鑽研許可權,才能執行此查詢。
模型模式、統計數據和屬性的查詢
數據採礦模型的內容適用於許多用途。 透過模型內容查詢,您可以:
擷取公式或機率,以便進行您自己的計算。
針對關聯模型,擷取用來產生預測的規則。
擷取特定規則的描述,讓您可以在自定義應用程式中使用規則。
檢視時間序列模型偵測到的移動平均值。
取得趨勢線某個區段的回歸公式。
擷取識別為特定叢集一部分的客戶可採取動作的資訊。
下列範例示範在模型內容上建立查詢的一些常見模式:
從模型取得模式
SELECT FROM <model>.CONTENT
使用此語句來擷取模型中特定節點的詳細資訊。 根據演算法類型,節點可以包含規則和公式、支援和變異數統計數據等等。
擷取定型模型中所使用的屬性
CALL System.GetModelAttributes(<model>)
使用此預存程式來擷取模型所使用的屬性清單。 這項資訊有助於判斷因特徵選取而排除的屬性,例如。
擷取儲存在數據採礦維度中的內容
SELECT FROM <model>.DIMENSIONCONTENT
使用此語句從數據採礦維度擷取數據。
此查詢類型主要是供內部使用。 不過,並非所有演算法都支援這項功能。 MINING_SERVICES 綱要列集中,支援通過旗標來表示。
如果您開發自己的外掛程式演算法,您可以使用此語句來驗證模型的內容以進行測試。
取得模型的PMML表示法
SELECT * FROM <model>.PMML
取得一份表示模型為 PMML 格式的 XML 文件。 並非所有模型類型都受到支援。
範例
雖然某些模型內容是演算法的標準,但內容的某些部分會根據您用來建置模型的演算法而有很大的差異。 因此,當您建立內容查詢時,必須瞭解模型中哪些資訊對特定模型最有用。
本節提供一些範例,說明演算法的選擇如何影響模型中儲存的資訊種類。 如需採礦模型內容的詳細資訊,以及每個模型類型特有的內容,請參閱採礦模型內容(Analysis Services - 數據採礦)。
範例 1:關聯模型的內容查詢
根據您要查詢的模型類型,語句 SELECT FROM <model>.CONTENT會傳回不同類型的資訊。 對於關聯模型,資訊的主要部分是 節點類型。 節點就像是模型內容中資訊的容器。 在關聯模型中,代表規則的節點具有8的NODE_TYPE值,而代表專案集的節點NODE_TYPE值為7。
因此,下列查詢會傳回前 10 個項目集,依支持度排名(預設順序)。
SELECT TOP 10 NODE_DESCRIPTION, NODE_PROBABILITY, SUPPORT
FROM <model>.CONTENT WHERE NODE_TYPE = 7
下列查詢是以這項資訊為基礎。 查詢會傳回三個數據行:節點的標識碼、完整規則,以及專案集右側的產品,也就是預測要與某些其他產品建立關聯的產品,做為專案集的一部分。
SELECT FLATTENED NODE_UNIQUE_NAME, NODE_DESCRIPTION,
(SELECT RIGHT(ATTRIBUTE_NAME, (LEN(ATTRIBUTE_NAME)-LEN('Association model name')))
FROM NODE_DISTRIBUTION
WHERE LEN(ATTRIBUTE_NAME)>2
)
AS RightSideProduct
FROM [<Association model name>].CONTENT
WHERE NODE_TYPE = 8
ORDER BY NODE_SUPPORT DESC
FLATTENED 關鍵詞表示巢狀數據列集應該轉換成扁平化數據表。 代表規則右側產品的屬性包含在NODE_DISTRIBUTION數據表中;因此,我們只會藉由新增長度大於 2 的需求,只擷取包含屬性名稱的數據列。
簡單的字串函式可用來從第三個數據行中移除模型的名稱。 (通常模型名稱前面會加上巢狀數據行的值。
WHERE 子句指定NODE_TYPE的值應該是 8,只擷取規則。
如需更多範例,請參閱 關聯模型查詢範例。
範例 2:判定樹模型的內容查詢
判定樹模型可用於預測和分類。 此範例假設您使用模型來預測結果,但您也想要找出哪些因素或規則可用來分類結果。
在判定樹模型中,節點可用來表示樹狀結構和分葉節點。 每個節點的標題都包含結果路徑的描述。 因此,若要追蹤任何特定結果的路徑,您必須識別包含它的節點,並取得該節點的詳細數據。
在預測查詢中,您會新增預測函數 PredictNodeId (DMX)來取得相關節點的標識碼,如下列範例所示:
SELECT Predict([Bike Buyer]), PredictNodeID([Bike Buyer])
FROM [<decision tree model name>]
PREDICTION JOIN
<input rowset>
一旦您擁有包含結果之節點的標識符,您可以藉由建立包含NODE_CAPTION的內容查詢來擷取說明預測的規則或路徑,如下所示:
SELECT NODE_CAPTION
FROM [<decision tree model name>]
WHERE NODE_UNIQUE_NAME= '<node id>'
如需更多範例,請參閱 判定樹模型查詢範例。
處理查詢結果
如範例所示,內容查詢大多會傳回表格式數據列集,但也可能包含巢狀數據行的資訊。 您可以扁平化傳回的數據列集,但這會使使用結果更加複雜。 特別是NODE_DISTRIBUTION節點的內容是巢狀的,但包含模型的相關有趣資訊。
如需如何使用階層式數據列集的詳細資訊,請參閱 MSDN 上的 OLEDB 規格。