新聞中心
將分為三個(gè)部分來(lái)演示如何實(shí)現(xiàn)這個(gè)功能。

1.構(gòu)建挖掘模型
2.為挖掘模型編寫服務(wù)接口
3.開發(fā)簡(jiǎn)單的前端應(yīng)用
此篇介紹如何使用SQL Server Analysis Services基于此問(wèn)題來(lái)構(gòu)建簡(jiǎn)單的挖掘模型。
關(guān)于數(shù)據(jù)挖掘,簡(jiǎn)單的就是說(shuō)從海量數(shù)據(jù)中發(fā)現(xiàn)信息的一個(gè)過(guò)程。如果說(shuō)商業(yè)智能分為三個(gè)層次:告訴你發(fā)生了什么,為什么會(huì)發(fā)生,將來(lái)會(huì)發(fā)生什么。那么,數(shù)據(jù)挖掘絕對(duì)算是商業(yè)智能中最高的一個(gè)層次,告訴你將來(lái)會(huì)發(fā)生什么,也就是預(yù)測(cè)。而預(yù)測(cè)的基礎(chǔ)就是根據(jù)海量的歷史數(shù)據(jù),結(jié)合一定的算法,以概率為基礎(chǔ),告訴你一條新數(shù)據(jù)某條屬性的趨勢(shì)。
數(shù)據(jù)挖掘的模型很多,貝葉斯,時(shí)間序列,關(guān)聯(lián)規(guī)則等都是常用的模型,根據(jù)不同的問(wèn)題特征可以套用不同的模型算法。比如此篇提到的商品推薦,就是典型的適合用關(guān)聯(lián)規(guī)則來(lái)解決。在數(shù)據(jù)挖掘中典型的啤酒和尿布的問(wèn)題,大體上就是基于這個(gè)方法。
創(chuàng)建挖掘模型項(xiàng)目
筆者注:如果你是一個(gè)c#或者相關(guān)的應(yīng)用程序開發(fā)人員,以下的內(nèi)容看起來(lái)可能會(huì)有些陌生,筆者建議此部分跟著文章中介紹的步驟來(lái)做就可以,相關(guān)細(xì)節(jié)我會(huì)盡量以開發(fā)人員的角度去解釋。后面有適合開發(fā)人員邏輯的一些介紹可以幫助你更好的理解數(shù)據(jù)挖掘項(xiàng)目。
打開SQL Server Data Tools,點(diǎn)擊File->New->Project
選擇項(xiàng)目類型:
Analysis Services Multidimensional and Data Mining Models
為項(xiàng)目添加數(shù)據(jù)源。
如圖,在Solution Explorer中,右鍵單擊Data Sources,選擇New Data Source:
這里用到的數(shù)據(jù)源是微軟官方示例庫(kù)Adventure Works DW 2012,是Data Warehouse的示例庫(kù)。
關(guān)于如何獲取并且部署這些示例庫(kù),可以參考此篇下面的文章列表。
然后,添加數(shù)據(jù)源視圖,在Solution Explorer中右鍵Data Source Views,選擇New Data Source View。
在Relational data source中,選擇剛才建立的數(shù)據(jù)源名稱:
點(diǎn)擊下一步。
這個(gè)界面中選擇用到的表。根據(jù)微軟官方教程以及示例數(shù)據(jù),只選擇vAssocSeqLineItems和vAssocSeqOrders兩個(gè)視圖就可以。
如果要用關(guān)聯(lián)規(guī)則來(lái)解決問(wèn)題,那么你的數(shù)據(jù)就要符合一定的結(jié)構(gòu)。而具體的結(jié)構(gòu)要求就可以參考這兩個(gè)視圖。
vAssocSeqOrders是訂單主表,里面記錄了基本的訂單信息,一條訂單一行記錄。
vAssocSeqLineItems是訂單相信信息表,里面記錄了每條訂單里都包含了哪些商品。
兩張表邏輯上通過(guò)OrderNumber關(guān)聯(lián),我們關(guān)注的字段是Model,這里面記錄了商品名稱。
選擇好用到的表之后,可以直接點(diǎn)擊完成結(jié)束數(shù)據(jù)源視圖的設(shè)置。
這兩個(gè)視圖是沒有邏輯關(guān)系的,但這里需要指定一下。
方法就是在數(shù)據(jù)源視圖里,拖拽vAssocSeqLineItems里的OrderNumber字段到vAssocSeqOrders的OrderNumber字段。完成后可以看到一個(gè)從vAssocSeqLineItems視圖指向vAssocSeqOrders的箭頭。
到這里數(shù)據(jù)源視圖設(shè)置完畢。
下面建立基于關(guān)聯(lián)規(guī)則的挖掘模型。在Solution Explorer中,右鍵單擊Mining Structures,選擇New Mining Structure。
第一個(gè)界面,使用已經(jīng)存在的關(guān)系數(shù)據(jù)庫(kù)或者數(shù)據(jù)倉(cāng)庫(kù),所以直接下一步。
然后在這個(gè)界面中指定挖掘結(jié)構(gòu)要采用的挖掘模型。點(diǎn)擊下拉框,選擇Microsoft Association Rules,也就是關(guān)聯(lián)規(guī)則。點(diǎn)下一步。
這里指定數(shù)據(jù)源視圖,默認(rèn)選擇剛才建立的就可以,直接點(diǎn)擊下一步。
這一步比較關(guān)鍵,理解起來(lái)也比較繞。這里主要是要指定事例表和嵌套表。在這里,記錄訂單基本信息的是事例表,而記錄訂單里有哪些產(chǎn)品的表為嵌套表。
在這個(gè)模型當(dāng)中,我們要清楚的是,我們的事例單位,是一條條訂單,而不是訂單里的一個(gè)個(gè)產(chǎn)品。如果每次在建立模型的過(guò)程中無(wú)法區(qū)分哪個(gè)應(yīng)該是事例表哪個(gè)應(yīng)該是嵌套表的話,那么可以回頭來(lái)先想下這個(gè)問(wèn)題。
指定完畢事例表和嵌套表,點(diǎn)擊下一步。
這里指定在分析模型中如何使用這些列。首先指定鍵列為OrderNumber和Model,然后再把Model列指定為輸入列和可預(yù)測(cè)列。因?yàn)檫@里就是要根據(jù)已經(jīng)選擇的商品來(lái)預(yù)測(cè)客戶將會(huì)購(gòu)買什么商品。
按如圖所示的方法指定完畢后,點(diǎn)擊下一步。
選擇列的類型,這里根據(jù)系統(tǒng)自動(dòng)判斷的類型選擇就可以,直接點(diǎn)擊下一步。
然后這個(gè)界面中主要是用來(lái)指定測(cè)試數(shù)據(jù)集的多少。默認(rèn)是30%,也就是在數(shù)據(jù)中,保留30%的數(shù)據(jù)來(lái)驗(yàn)證建立好的挖掘模型的正確性。此篇不對(duì)其做過(guò)詳細(xì)的介紹,所以先設(shè)置成0,然后直接點(diǎn)擊Finish完成模型設(shè)置向?qū)А?/p>
可以看到建立好的挖掘結(jié)構(gòu)。
模型建立好了之后,需要將其部署到一個(gè)分析服務(wù)的實(shí)例上去,然后將其處理。
這里直接右鍵點(diǎn)擊Solution Explorer根目錄的項(xiàng)目名稱,然后右鍵菜單中選擇Process。
系統(tǒng)會(huì)提示服務(wù)器內(nèi)容已過(guò)期,VS的判斷是只要你的Source Code比目標(biāo)服務(wù)器的版本新,那么都會(huì)報(bào)這個(gè)out of date錯(cuò)誤,即使目標(biāo)服務(wù)器上根本沒有這個(gè)庫(kù)。所以這里選擇Yes。
第一次 部署可能會(huì)彈出這個(gè)提示框讓你指定可以方位數(shù)據(jù)源鏈接的賬戶,這里通常直接敲本地管理員的賬戶就 ok。
出現(xiàn)這個(gè)界面,直接點(diǎn)擊Run處理挖掘模型。
然后系統(tǒng)會(huì)自動(dòng)去做很多工作,這里的細(xì)節(jié)你可以不去關(guān)心。(當(dāng)然在其不報(bào)Error的情況下)
處理完成之后,挖掘模型就建立好了。后續(xù)的實(shí)現(xiàn)商品推薦的功能,就是基于此模型來(lái)實(shí)現(xiàn)的。
這里再介紹一個(gè)概念,叫DMX,也許你從沒聽說(shuō)過(guò),但你一定知道SQL,簡(jiǎn)單的來(lái)說(shuō)SQL就是用來(lái)查表得,那么DMX就是用來(lái)查數(shù)據(jù)挖掘模型的。
它跟SQL一樣,也是SELECT FROM的結(jié)構(gòu)。具體的語(yǔ)法信息大家有興趣的可以去參考微軟的SQL Server聯(lián)機(jī)數(shù)據(jù)庫(kù)。在此篇中,下面會(huì)給出一個(gè)簡(jiǎn)單的DMX查詢,大家只要基本知道它是干什么的就可以了。
DAX示例查詢:
- SELECT FLATTENED
- PredictAssociation([Association].[v Assoc Seq Line Items],INCLUDE_STATISTICS,3)
- FROM
- [Association]
- NATURAL PREDICTION JOIN
- (SELECT (SELECT 'Touring Tire' AS [Model]
- ) AS [v Assoc Seq Line Items]) AS t
這個(gè)語(yǔ)句的大體意思就是,購(gòu)買了產(chǎn)品Touring Tire的用戶當(dāng)中,根據(jù)歷史信息,還有可能會(huì)購(gòu)買哪些產(chǎn)品。
那么我們來(lái)看查詢結(jié)果:
|
Model |
SUPPORT |
PROBABILITY |
ADJUSTEDPROBABILITY |
|
Touring Tire Tube |
1397 |
0.860385925 |
0.783460119 |
|
Sport-100 |
6171 |
0.267877412 |
0.489939538 |
|
Patch kit |
3010 |
0.244040863 |
0.567612365 |
然后我們來(lái)簡(jiǎn)單解釋下相關(guān)列的信息:
SUPPORT-支持度,所處行的項(xiàng)支持度,這里跟傳統(tǒng)的支持度有些不同,這里,比如第一行,指的是有多少個(gè)訂單中包含了產(chǎn)品Touring Tire Tube。
在數(shù)據(jù)倉(cāng)庫(kù)中,我們可以用SQL語(yǔ)句來(lái)驗(yàn)證下這個(gè)結(jié)果
- SELECT COUNT(1)
- FROM [AdventureWorksDW2012].[dbo].[vAssocSeqLineItems]
- WHERE [Model]='Touring Tire Tube'
返回的結(jié)果就是1397。
PROBABILITY-概率
購(gòu)買Touring Tire的訂單中又包含Touring Tire Tube的個(gè)數(shù)。再簡(jiǎn)單點(diǎn)說(shuō)就是概率中的P(A|B)的問(wèn)題了。
那么我們還是來(lái)驗(yàn)證下第一行的計(jì)算結(jié)果,同時(shí)購(gòu)買Touring Tire Tube和Touring Tire的訂單數(shù)量:
- SELECT T1.[OrderNumber]
- FROM [AdventureWorksDW2012].[dbo].[vAssocSeqLineItems] T1
- INNER JOIN
- (
- SELECT T2.[OrderNumber]
- FROM [AdventureWorksDW2012].[dbo].[vAssocSeqLineItems] T2
- WHERE T2.[Model]='Touring Tire Tube'
- ) TZ ON T1.OrderNumber=TZ.OrderNumber
- WHERE T1.[Model]='Touring Tire'
我們可以看到查詢返回的結(jié)果數(shù)量是758行。
然后再計(jì)算下訂單中只包含Touring Tire的數(shù)量:
- SELECT [OrderNumber]
- FROM [AdventureWorksDW2012].[dbo].[vAssocSeqLineItems]
- WHERE [Model]='Touring Tire'
返回的記錄行數(shù)是881行。
用758除以881,得到的數(shù)字正好是0.860385925。
這個(gè)概率正好反映了這樣一個(gè)事實(shí),就是購(gòu)買Touring Tire的客戶會(huì)有很大的可能性購(gòu)買Touring Tire Tube,所以當(dāng)客戶購(gòu)買Touring Tire之后系統(tǒng)自動(dòng)的向其推薦Touring Tire Tube準(zhǔn)沒錯(cuò)。
也許你已經(jīng)看出了那條DMX語(yǔ)句的一些門道,當(dāng)然,有些關(guān)鍵字你暫時(shí)可以不用去關(guān)心,必要的時(shí)候可以參考微軟的文檔。那么擴(kuò)展一下,比如,客戶買了指定的兩樣產(chǎn)品,那么我根據(jù)這兩樣已選的產(chǎn)品應(yīng)該推薦給客戶什么呢?
- SELECT FLATTENED
- PredictAssociation([Association].[v Assoc Seq Line Items],INCLUDE_STATISTICS,3)
- FROM
- [Association]
- NATURAL PREDICTION JOIN
- (SELECT (SELECT 'Touring Tire' AS [Model]
- UNION SELECT 'Touring Tire Tube' AS [Model]
- ) AS [v Assoc Seq Line Items]) AS t
看到熟悉的UNION語(yǔ)句了吧,好吧,相信你不懂DMX的話你也看出這條語(yǔ)句的規(guī)律了,這些就夠了,后續(xù)文章中將會(huì)在c#邏輯代碼中根據(jù)這條基本的語(yǔ)句來(lái)動(dòng)態(tài)的來(lái)拼DMX語(yǔ)句。
以上數(shù)據(jù)挖掘模型的建立部分到此完畢,這是通常一個(gè)商業(yè)智能項(xiàng)目中底層架構(gòu)的基本部分。
后續(xù)我再寫兩篇在挖掘模型之上的文章,其中一個(gè)是基于這個(gè)模型開發(fā)service服務(wù)接口的,這個(gè)接口將方便各個(gè)客戶端應(yīng)用,winform, asp.net或者silverlight等調(diào)用。最后一篇將選用一個(gè)客戶端程序,構(gòu)建簡(jiǎn)單的界面,調(diào)用這個(gè)services來(lái)實(shí)現(xiàn)預(yù)測(cè)查詢。
原文鏈接:http://www.cnblogs.com/aspnetx/archive/2013/02/24/2923941.html
【編輯推薦】
- 小白學(xué)數(shù)據(jù)分析:怎么做流失分析
- 小白學(xué)數(shù)據(jù)分析之K-means理論篇
- 小白學(xué)數(shù)據(jù)分析之從購(gòu)買記錄分析道具支付環(huán)節(jié)
- 小白學(xué)數(shù)據(jù)分析之付費(fèi)滲透率
- 小白學(xué)數(shù)據(jù)分析之Excel制作INFOGRAPHIC
名稱欄目:SQLServer數(shù)據(jù)挖掘規(guī)則實(shí)現(xiàn)商品推薦1
標(biāo)題鏈接:http://www.dlmjj.cn/article/codegcc.html


咨詢
建站咨詢
