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