假如你有一個購物類的網站,那麼你如何給你的客戶來推薦產品呢?這個功能在很多電商類網站都有,那麼,通過SQL Server Analysis Services的資料採礦功能,你也可以輕鬆的來構建類似的功能。
前幾篇中,簡要的介紹如何建立採礦模型並且編寫程式用簡單的DMX查詢採礦模型從而實現預測,然後簡要介紹如何在Excel中獨立地進行預測性分析。此篇講簡單介紹如何通過DMX語句建立採礦結構和採礦模型,並且訓練模型,然後進行預測查詢。
在分析服務中涉及到很多門查詢語言,首先,SQL語言是我們最熟悉不過的了。在分析服務中,可以通過 SQL來為Cube建立分區,或者在資料採礦中指定訓練資料或者預測資料。其次,MDX,可以用它來查詢Cube。然後就是本文所介紹的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
結果: