假如你有一個購物類的網站,那么你如何給你的客戶來推薦產品呢?這個功能在很多電商類網站都有,那么,通過SQL Server Analysis Services的數據挖掘功能,你也可以輕松的來構建類似的功能。
前幾篇中,簡要的介紹如何建立挖掘模型並且編寫程序用簡單的DMX查詢挖掘模型從而實現預測,然后簡要介紹如何在Excel中獨立地進行預測分析。此篇講簡單介紹如何通過DMX語句創建挖掘結構和挖掘模型,並且訓練模型,然后進行預測查詢。
在分析服務中涉及到很多門查詢語言,首先,SQL語言是我們最熟悉不過的了。在分析服務中,可以通過 SQL來為多維數據集建立分區,或者在數據挖掘中指定訓練數據或者預測數據。其次,MDX,可以用它來查詢多維數據集。然后就是本文所介紹的DMX,它主要面向分析服務中的數據挖掘部分,通過它可以建立挖掘結構和挖掘模型,以及訓練數據和做預測查詢。
在微軟的文檔及示例還有很多圖書著作中,通過DMX的方式通常被分為三個步驟:
- 建立挖掘結構
- 建立挖掘模型
- 訓練數據
- 預測查詢
在現有的一個分析服務數據庫進行如上操作之前,還需要手動創建分析服務數據庫並且手動建立數據源連接,在SQL中我們知道是由CREATE DATABASE的,但是在分析服務實例下不可以(只能通過XMLA),所以這里需要手動創建。具體方法:
首先,打開SQL Server Management Studio。連接到分析服務。
右鍵單擊Databases節點選擇New Database。
給數據庫起名DMTest,身份模擬選擇指定用戶名和密碼。這里為了示例能夠順利運行,建議輸入登錄機器的管理員密碼。當然實際生產環境不建議這么做,需要根據具體的權限分配在這里給定指定的用戶。
數據庫建立完畢,可以在對象瀏覽器里看到剛剛建立的數據庫。
接下來打開SQL Data Tools,點擊File->Open->Analysis Services Database…
這個功能可以打開一個正在運行的分析服務數據庫。
服務器輸入本地localhost或者一個"點",數據庫選擇剛才在分析服務實例下建立的SSAS數據庫DMTest。
點擊OK后可以看到分析服務數據庫的結構被加載到項目中。這里需要留意的一點是,不同於離線打開,這種方法是在線打開,在這里做的任何修改保存后,都是直接同步到服務器上。
以下步驟跟第一步差不多,這里簡單略過。
創建數據源連接。
指定模擬信息。
為數據源起名:DSAW。
可以在解決方案瀏覽器下看到新建立的數據源連接。
以上SSAS數據庫的數據源連接家里完畢。需要注意的是,跟往常不同,這里只需要創建數據源連接就可以了,不需要創建數據源視圖。
關閉SQL Data Tools,回到Management Studio中。選擇工具欄中的DMX圖標,新建一個DMX查詢。
可以發現DMX的查詢界面跟MDX的比較像。
接下來,輸入下面的語句。這條語句用來創建挖掘結構。
CREATE MINING STRUCTURE [Market Basket] (
OrderNumber TEXT KEY,
[Products] TABLE (
[Model] TEXT KEY
)
)
運行完畢后可以看到新建立好的挖掘結構。
然后,為挖掘結構添加挖掘模型。每個模型都需要指定挖掘算法,比如對於商品推薦問題,選用的是關聯規則。在創建挖掘模型的同時,還需要用PREDICT指定需要預測的元素。
ALTER MINING STRUCTURE [Market Basket]
ADD MINING MODEL [Default Association]
(
OrderNumber,
[Products] PREDICT (
[Model]
)
)
Using Microsoft_Association_Rules
留意Using后面的部分,這里指定了模型是關聯規則模型。
運行完畢后可以在挖掘結構下的挖掘模型。
挖掘模型是位於挖掘結構之下的,同一個挖掘結構可以擁有不同的挖掘模型,擁有多個挖掘模型的好處在於,對於同一個問題,可以應用不同的挖掘模型然后評估哪一個挖掘模型的預測最准確。
接下來需要做的就是訓練模型,用到的是INSERT語句。由於訂單和訂單商品是個嵌套關系,所以留意下面語句的SHAPE和APPEND,以及語句中的RELATE將事例表和嵌套表關聯到一起:
INSERT INTO MINING STRUCTURE [Market Basket]
(
[OrderNumber],[Products] (SKIP, [Model])
)
SHAPE {
OPENQUERY([DSAW],'SELECT OrderNumber
FROM vAssocSeqOrders ORDER BY OrderNumber')}
APPEND
(
{OPENQUERY([DSAW],'SELECT OrderNumber, Model FROM
dbo.vAssocSeqLineItems ORDER BY OrderNumber, Model')
}
RELATE OrderNumber to OrderNumber
) AS [Products]
點擊運行后系統會根據指定的訓練數據處理挖掘結構,處理時間的長短通常由樣本數據的大小,以及算法參數決定。
訓練完畢后,可以右鍵點擊挖掘結構瀏覽一下剛才建立的挖掘模型。
在Rules標簽下,可以看到系統生成了多少條規則。
Itemsets下可以查看數據項集。
以及依賴關系網絡,這個是一個很直觀的工具,項之間的關聯可以很直觀的看出,並且可以通過左面的滑塊查看項之間的關聯程度。
以上,數據挖掘結構就建立好了,可以看到建立的結構跟第一篇中介紹的通過工具向導的方式是一樣的。也就是說,在不通過圖形界面的操作之下,也可以像在數據引擎中創建各種對象。
至此,熟悉SQL語句的朋友看DMX可能感覺再親切不過了,DMX中除了加了幾個關鍵字以及跟算法模型相關的參數外,基本結構似乎都似曾相識。
本篇中用到的示例DMX查詢全部來自於微軟的教程,關於DMX更詳細的信息,大家可以參考教程地址:
http://technet.microsoft.com/zh-cn/library/bb895168(v=sql.100).aspx
關於文中提及到的DMX語句的更多詳細信息,大家都可以去參考上面這個地址。
這個DMX教程中包括了自行車購買者,購物籃以及時序預測,雖然沒有覆蓋全部挖掘算法,但是足以為大家提供參考了。
關於如何把數據挖掘應用到項目中,請參考本系列的第二篇和第三篇。
關於數據挖掘算法的參考,可以參考這個地址:
http://technet.microsoft.com/zh-cn/library/ms175595(v=sql.100).aspx
關於DMX的參考:
http://technet.microsoft.com/zh-cn/library/ms132058(v=sql.100).aspx
以下附加幾條測試查詢。
測試查詢一:
SELECT FLATTENED
PredictAssociation([Default Association].[Products],INCLUDE_STATISTICS,3)
FROM
[Default Association]
NATURAL PREDICTION JOIN
(SELECT (SELECT 'Touring Tire' AS [Model]
) AS [v Assoc Seq Line Items]) AS t
結果:
測試查詢二:
SELECT
PREDICT([Default Association].[Products],INCLUDE_STATISTICS,3)
From
[Default Association]
NATURAL PREDICTION JOIN
(SELECT (SELECT 'Mountain Bottle Cage' AS [Model]
UNION SELECT 'Mountain Tire Tube' AS [Model]
UNION SELECT 'Mountain-200' AS [Model]) AS [Products]) AS t
結果: