SQL Server 2008中使用數據挖掘模型
為一個數據挖掘模型定型后,可以通過使用 SQL Server Management Studio 或 Business Intelligence Development Studio 中提供的自定義查看器來瀏覽此模型。但是,如果您希望進行預測或者從模型中獲取更深入的或更具體的信息,則必須依據此數據挖掘模型創建一個查詢。在以下情況下,查詢可幫助您更好地理解和處理模型中的信息:
進行單個預測和批預測。
了解有關模型發現的模式的更多信息。
查看有關模型的特定模式或子集的詳細信息或定型事例。
在挖掘模型中鉆取到事例的詳細信息。
提取有關全部或部分模型和數據的公式、規則或統計信息。
SQL Server Analysis Services 提供用于創建查詢的圖形設計界面,以及一種稱為數據挖掘擴展插件 (DMX) 的查詢語言,這種語言對于創建自定義預測和復雜查詢很有用。若要生成 DMX 預測查詢,可以使用 SQL Server Management Studio 和 Business Intelligence Development Studio 中均提供的查詢生成器。SQL Server Management Studio 中還提供了一組 DMX 查詢模板。
有關如何使用查詢生成器的詳細信息,請參閱使用預測查詢生成器創建 DMX 預測查詢。
有關如何使用 DMX 查詢模板的詳細信息,請參閱在 SQL Server Management Studio 中創建 DMX 查詢或如何在 SQL Server Management Studio 中使用模板。
預測查詢
許多數據挖掘項目的主要目標是使用挖掘模型來進行預測。例如,您可能要在十二月期間預測公司明年銷售的產品數量,或者可能要預測在某個廣告活動后潛在客戶是否會購買產品。
創建預測時,通常會提供一些新數據,并要求模型基于新數據生成一個預測。可以通過在“預測聯接”中將模型映射到一個外部數據源來以批方式進行預測。或者,可以通過創建一個“單獨”查詢一次提供一個值。
單獨預測查詢和批預測查詢都使用 PREDICTION JOIN 語法來定義新數據:不同之處在于預測聯接輸入端的指定方式。在單獨查詢中,數據是作為查詢的一部分內聯提供的。在批查詢中,數據來自使用 OPENQUERY 語法指定的外部數據源。有關詳細信息,請參閱 OPENQUERY (DMX)。
此外,使用時序模型可以僅僅基于模型來進行預測,即不需要提供任何新數據,而僅僅基于現有序列來請求預測。
下面提供有關如何創建上述每一類查詢的信息:
查詢類型; 查詢選項; 單獨預測查詢 針對在查詢中鍵入的單個新事例或者多個新事例進行預測。 批預測 將外部數據源中的新事例映射到模型并進行預測。 時序預測 基于現有模型預測指定數目的將來步驟。
通過添加新數據來擴展現有模型,并基于組合序列來進行預測。
通過使用 REPLACE_MODEL_CASES 選項向新數據序列應用現有模型。 除了預測特定值,例如,下個月的銷售額,或者要向客戶建議的產品,您還可以自定義預測查詢,以返回與預測有關的各種類型的信息。例如,知道預測正確的概率可能很有幫助,這樣您就可以決定是否向用戶提出建議。
若要自定義預測查詢所返回的信息,應向查詢中添加“預測函數”。每個模型或查詢類型都支持特定的函數。例如,聚類分析模型支持特殊預測函數,這些函數提供有關模型創建的分組的額外詳細信息。時序模型支持計算隨時間的變化的預測函數。還有可處理幾乎所有模型類型的通用預測函數。有關不同查詢類型支持的預測函數的列表,請參閱將函數映射到查詢類型 (DMX)。有關預測函數的完整列表,請參閱數據挖掘擴展插件 (DMX) 函數參考。
單獨查詢 如果要實時創建簡單預測,則單獨查詢很有用。例如,您可能通過使用網站從客戶那里獲取信息,然后使用這些數據返回預測,這些預測以特定于該客戶的建議信息的形式呈現。或者,您也可能分析電子郵件的內容,然后使用現有分類模型來對電子郵件進行分類,并相應地傳送郵件。
單獨查詢不需要包含輸入的單獨表。只需將一行數據傳遞給模型,便會實時地返回一個預測。您還可以將單獨查詢擴展為進行多個預測,方法是鍵入包含單個事例的 SELECT 語句,再添加 UNION 運算符,然后鍵入另一個 SELECT 語句以指定另一個事例。
可以通過以下方式基于現有模型創建單獨查詢:
使用數據挖掘設計器。
使用單獨查詢模板。
以編程方式或者在另一個 Analysis Services 客戶端中創建 DMX 語句。
創建單獨查詢時,必須以 PREDICTION JOIN 的形式向模型提供新數據。這意味著即使不映射到實際表,也必須確保新數據與挖掘模型中的現有列匹配。如果新數據列與新數據完全匹配,則 Analysis Services 將自動映射列。這稱為“NATURAL PREDICTION JOIN”。但是,如果列不匹配,或者新數據在類型和量上與模型所包含的數據并不相同,則必須指定模型映射中的哪些列映射到新數據,或者指定缺少的值。
批預測查詢 執行預測聯接時,應將模型映射到新數據源,之后 Analysis Services 將基于模型中的模式針對新數據中的每一行進行預測。如果表或其他外部數據源中有許多信息,并且您要使用經過定型的模型來進行預測,則預測聯接很有用。
可以通過以下方式基于現有模型創建批預測查詢:
使用數據挖掘設計器。
使用模板。
以編程方式或者在另一個 Analysis Services 客戶端中創建 DMX 語句。
如果通過使用數據挖掘設計器來創建批預測查詢,則必須先將外部數據源定義為一個數據源視圖。
如果使用 DMX 來創建預測聯接,則可以通過使用 OPENQUERY、OPENROWSET 或 SHAPE 命令來指定外部數據源。DMX 模板中的默認數據訪問方法是 OPENQUERY。有關這些方法的信息,請參閱 <source data query>。
無論您如何定義外部數據,指定的數據源都必須包含其數據與模型中的數據類似的列。但是,新的信息可以是不完整的。例如,您的客戶列表可能包含年齡列,但不包含有關收入的信息。即使在為模型定型時使用了收入數據,仍可以將新數據映射到該模型并創建一個預測;但是,在某些情況下,缺少完整的信息可能會影響預測的質量。
為獲得最佳結果,應當在新數據與模型之間聯接盡可能多的匹配列。但是,即使沒有匹配項,查詢也會成功。如果不聯接任何列,則查詢將返回邊緣預測,這與不含 PREDICTION JOIN 子句的語句 SELECT <predictable-column> FROM <model> 是等效的。
處理預測查詢的結果
預測查詢與關系數據庫中的查詢不同。您添加到查詢中的每個預測函數都返回它自己的行集。因此,當您針對一個事例進行預測時,結果可能是一個預測的值,以及包含其他詳細信息的幾個嵌套表列。
只要在一個查詢中組合多個函數,返回結果都將組合為一個分層行集。但是,如果提供程序無法處理分層的行集,則可以通過在預測查詢中使用 FLATTEN 關鍵字來對結果進行平展處理。
時序挖掘模型中的預測
在使用新數據和創建預測的方法這一方面,時序模型具有更高的靈活性。您既可以在需要創建預測時使用此模型,也可以向模型提供新數據,以基于最近的趨勢更新預測。如果您添加新數據,則可以指定新數據的使用方式,以擴展或更換模型事例。
擴展模型事例時,應向時序模型添加新的事實數據,從而使進一步的預測基于新的組合序列。更換模型事例時,應保留定型后的模型,但將基礎事例更換為新的一組事例數據。
無論您使用那種方法,預測的起點都總是原始序列的終點。
例如,假定您有一個現有的時序模型,它的上一年銷售數據已定型。收集了幾個月的新銷售數據后,您決定更新今年的銷售預測。您可以添加新數據并擴展模型以進行新預測,從而創建更新模型的預測聯接。
或者,可以基于現有數據生成模型,然后創建將事例數據更換為新數據的預測聯接。這在某些情況下是很有用的,例如,當一個存儲缺少很多數據,并且您希望使用基于其他存儲數據生成的模型來進行預測時。有關如何在時序模型上創建預測聯接的詳細信息,請參閱“查詢時序模型”或 PredictTimeSeries (DMX)。
內容查詢
內容查詢是一種提取有關內部統計信息以及挖掘模型結構信息的一種方式。有時,內容查詢可提供在查看器中不易查看的詳細信息。您還可以使用內容查詢的結果以編程方式提取信息以供他用。例如,可以提取公式或概率進行自己的計算,或者檢索有關模型中的事例的可操作信息。
查詢類型; 查詢選項; SELECT FROM <模型>.CASES 查找用于定型或測試模型的事例。鉆取到數據,包括基礎挖掘結構中的列。 SELECT FROM <結構>.CASES 查看結構中包含的所有數據,包括特定挖掘模型中不包括的列。 SELECT FROM <模型>.CONTENT 檢索有關模型中特定節點的詳細信息,包括規則和公式、支持和方差統計信息等。 SELECT FROM <模型>.DIMENSIONCONTENT 支持對數據挖掘維度的查詢。
此查詢類型主要供內部使用。如果您開發自己的插件算法,則可使用此語法測試您的模型。
并非所有算法都支持此功能。是否支持將通過 MINING_SERVICES 架構行集中的一個標志來指示。 一些模型內容在所有算法中都是標準的。但是,通常而言,每個模型的內容都依賴于用來生成模型的算法。因此,在創建內容查詢時,必須了解模型中哪些類型的信息是最有用的。
例如,如果創建一個使用 SELECT FROM <model>.CONTENT 語法的查詢,則根據模型是順序分析和聚類分析模型、決策樹模型還是時序模型,此查詢會返回差異很大的信息。對于關聯模型,您可能要檢索特定規則的說明,以便可以在自定義應用程序中使用規則,而在時序或順序分析和聚類分析模型中,您可能要查找有關模型所檢測的時間模式的更多信息。
以下部分提供了一些示例,以說明可以從內容查詢中獲得的信息的廣度和深度;但是,有關挖掘模型內容以及特定于每種模型類型的內容的信息,請參閱挖掘模型內容(Analysis Services - 數據挖掘)。
示例 1:關聯模型中的內容查詢 可以使用 SELECT FROM <模型>.CONTENT 語句來返回不同類型的內容,具體取決于所查詢的模型的類型。對于關聯模型,表示規則的節點具有 NODE_TYPE 值 8,而項集則具有 NODE_TYPE 值 7。因此,下面的查詢將返回最前面的 10 個項集,這些項集按支持度排序(默認排序順序)。
SELECT TOP 10 NODE_DESCRIPTION, NODE_PROBABILITY, SUPPORT FROM <model>.CONTENT WHERE NODE_TYPE = 7下面的示例返回三個列:節點的 ID、完整規則以及項集右側的產品,也就是被預測將作為項集的一部分與其他某些產品關聯的產品。
FLATTENED 關鍵字表示嵌套行集應轉換為平面表。表示規則右側產品的屬性包含在 NODE_DISTRIBUTION 表中;因此,我們通過添加長度大于 2 的要求來僅檢索包含屬性名的行。使用一個簡單的字符串函數從第三列中刪除模型的名稱。通常,模型名稱總是作為嵌套列的值的前綴。WHERE 子句指定 NODE_TYPE 的值應當為 8,這表示僅僅檢索規則。
SELECT FLATTENED NODE_UNIQUE_NAME , NODE_DESCRIPTION, (SELECT RIGHT(ATTRIBUTE_NAME, (LEN(ATTRIBUTE_NAME)-LEN('Association model name'))) FROM NODE_DISTRIBUTIONWHERE LEN(ATTRIBUTE_NAME)>2) AS RightSideProductFROM [Association model name].CONTENTWHERE NODE_TYPE = 8 ORDER BY NODE_SUPPORT DESC有關詳細信息,請參閱查詢關聯模型(Analysis Services – 數據挖掘)。
示例 2:決策樹模型的內容查詢 查詢模型內容非常重要的一種情況是:您想返回規則,說明預測該狀態的原因,從而對預測查詢執行進一步的操作。例如,可以通過使用如下語法向查詢中添加預測函數 PredictNodeId,以獲取包含規則的節點的 ID:
SELECT; Predict([College Plans]), PredictNodeID([College Plans]) FROM [College Plans Tree]PREDICTION JOIN <input rowset> 對于決策樹模型,標題包含指向輸出的路徑的說明。因此,一旦您具有包含輸出的節點的 ID,就可通過創建如下所示的內容查詢來檢索說明此預測的規則或路徑:
SELECT NODE_CAPTIONFROM [College Plans Tree] WHERE NODE_UNIQUE_NAME= '<node id>'
