中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

使用SQL Server Analysis Services數據挖(wa)掘的(de)關聯規則實現商品推薦功能(neng)(一(yi))

假如(ru)你有(you)一個(ge)購物類(lei)(lei)的(de)(de)網(wang)站,那么(me)(me)你如(ru)何給你的(de)(de)客戶(hu)來推薦產品呢?這個(ge)功能(neng)(neng)在很多電商類(lei)(lei)網(wang)站都(dou)有(you),那么(me)(me),通(tong)過SQL Server Analysis Services的(de)(de)數據挖掘功能(neng)(neng),你也可(ke)以輕松的(de)(de)來構建類(lei)(lei)似的(de)(de)功能(neng)(neng)。

將分為三個部分來演(yan)示如何實現這(zhe)個功(gong)能。

  1. 構建挖掘模型
  2. 為挖掘模型編寫服務接口
  3. 開發簡單的前端應用

 

此篇介紹(shao)如(ru)何使用SQL Server Analysis Services基于此問題(ti)來(lai)構建簡單的挖掘模型。

 

關于數據挖掘,簡(jian)單的(de)(de)就(jiu)(jiu)是(shi)說從海量數據中(zhong)發(fa)(fa)現信息的(de)(de)一(yi)個(ge)(ge)過程。如(ru)果說商業智能分為三個(ge)(ge)層(ceng)次:告訴(su)你發(fa)(fa)生(sheng)了什(shen)(shen)么(me),為什(shen)(shen)么(me)會發(fa)(fa)生(sheng),將(jiang)來會發(fa)(fa)生(sheng)什(shen)(shen)么(me)。那么(me),數據挖掘絕對(dui)算是(shi)商業智能中(zhong)最(zui)高的(de)(de)一(yi)個(ge)(ge)層(ceng)次,告訴(su)你將(jiang)來會發(fa)(fa)生(sheng)什(shen)(shen)么(me),也就(jiu)(jiu)是(shi)預測。而預測的(de)(de)基(ji)礎就(jiu)(jiu)是(shi)根據海量的(de)(de)歷史數據,結(jie)合(he)一(yi)定的(de)(de)算法(fa),以概(gai)率為基(ji)礎,告訴(su)你一(yi)條新數據某(mou)條屬性的(de)(de)趨勢。

數(shu)據挖掘的(de)(de)(de)(de)模型(xing)很多,貝(bei)葉斯,時間序列,關聯規(gui)則等都(dou)是常(chang)用(yong)(yong)的(de)(de)(de)(de)模型(xing),根(gen)據不同的(de)(de)(de)(de)問題(ti)(ti)特征(zheng)可以套用(yong)(yong)不同的(de)(de)(de)(de)模型(xing)算(suan)法。比如此篇提到(dao)的(de)(de)(de)(de)商品推(tui)薦,就是典(dian)型(xing)的(de)(de)(de)(de)適合用(yong)(yong)關聯規(gui)則來(lai)解決(jue)。在數(shu)據挖掘中典(dian)型(xing)的(de)(de)(de)(de)啤(pi)酒和(he)尿布的(de)(de)(de)(de)問題(ti)(ti),大體上就是基于這(zhe)個方法。

 

創建挖掘模型項目

筆者注:如果(guo)你是一(yi)個c#或者相(xiang)關的(de)應用程(cheng)序開發人(ren)員(yuan),以下的(de)內(nei)容(rong)看起來可能會有些陌生,筆者建議此部分跟著文章(zhang)中介(jie)紹的(de)步(bu)驟來做就可以,相(xiang)關細(xi)節我會盡(jin)量以開發人(ren)員(yuan)的(de)角度去解釋。后(hou)面有適合開發人(ren)員(yuan)邏輯(ji)的(de)一(yi)些介(jie)紹可以幫助你更好的(de)理解數據挖(wa)掘項目。

打開SQL Server Data Tools,點擊File->New->Project

選擇項目類型:

Analysis Services Multidimensional and Data Mining Models

為項目添加數據源。

如圖(tu),在Solution Explorer中,右鍵單擊Data Sources,選擇New Data Source:

這(zhe)里用到(dao)的數據源(yuan)是微軟官方(fang)示例(li)庫(ku)Adventure Works DW 2012,是Data Warehouse的示例(li)庫(ku)。

關(guan)于如何獲取(qu)并(bing)且部(bu)署這些示例庫,可以參考(kao)此(ci)篇下(xia)面(mian)的文章列表。

然后,添加數據源視圖,在(zai)Solution Explorer中右鍵Data Source Views,選(xuan)擇New Data Source View。

在(zai)Relational data source中,選擇剛才(cai)建立的數據(ju)源名稱:

點擊下一步。

這個界面(mian)中選擇用到(dao)的表。根(gen)據微軟(ruan)官方教程以(yi)及示例(li)數據,只選擇vAssocSeqLineItems和vAssocSeqOrders兩個視圖(tu)就可以(yi)。

如果(guo)要(yao)用關聯(lian)規則(ze)來(lai)解決問題,那么你的數(shu)據就(jiu)要(yao)符合一定的結構。而(er)具(ju)體的結構要(yao)求就(jiu)可以(yi)參考這兩個視圖(tu)。

vAssocSeqOrders是訂(ding)單主表,里面記錄了基本的訂(ding)單信息,一條訂(ding)單一行記錄。

vAssocSeqLineItems是訂單(dan)相信信息表,里面(mian)記錄(lu)了每條訂單(dan)里都包(bao)含了哪些(xie)商品。

兩(liang)張表邏輯上通(tong)過OrderNumber關聯,我們關注的字段是Model,這里面記錄了商品名稱。

選擇(ze)好用到的表之后(hou),可以直接(jie)點擊完成(cheng)結束數據源視圖的設置。

這兩個視(shi)圖(tu)是(shi)沒有邏輯關系(xi)的,但這里(li)需(xu)要(yao)指(zhi)定一下。

方法就是在數據源視(shi)圖里,拖拽(zhuai)vAssocSeqLineItems里的(de)OrderNumber字段(duan)到vAssocSeqOrders的(de)OrderNumber字段(duan)。完成(cheng)后可以(yi)看到一(yi)個(ge)從vAssocSeqLineItems視(shi)圖指向vAssocSeqOrders的(de)箭頭。

到這里數據源視(shi)圖設置(zhi)完畢。

下面建立基(ji)于關聯規(gui)則的挖掘模型。在Solution Explorer中(zhong),右鍵單擊(ji)Mining Structures,選(xuan)擇New Mining Structure。

第一(yi)個界(jie)面,使用已經存在的關(guan)系數據庫(ku)或(huo)者數據倉(cang)庫(ku),所以(yi)直接下一(yi)步。

然后在(zai)這個(ge)界(jie)面(mian)中指定(ding)挖(wa)掘(jue)結構(gou)要采用的(de)挖(wa)掘(jue)模型。點擊(ji)下拉框,選擇(ze)Microsoft Association Rules,也(ye)就(jiu)是(shi)關聯規則。點下一步。

這里指(zhi)定數據源視圖,默認選(xuan)擇剛才(cai)建立的就可以,直接點擊下一步。

這一步比(bi)較(jiao)關(guan)鍵(jian),理(li)解(jie)起來也比(bi)較(jiao)繞(rao)。這里主要是要指定事例表(biao)和嵌套表(biao)。在這里,記(ji)錄(lu)訂(ding)單(dan)基本(ben)信息的(de)是事例表(biao),而記(ji)錄(lu)訂(ding)單(dan)里有哪些產(chan)品的(de)表(biao)為嵌套表(biao)。

在(zai)這個(ge)(ge)模型(xing)當(dang)中,我們要清楚的是(shi),我們的事(shi)例單(dan)位(wei),是(shi)一(yi)條條訂單(dan),而不是(shi)訂單(dan)里的一(yi)個(ge)(ge)個(ge)(ge)產品。如果(guo)每次在(zai)建(jian)立模型(xing)的過程中無法區(qu)分哪(na)個(ge)(ge)應(ying)該(gai)是(shi)事(shi)例表哪(na)個(ge)(ge)應(ying)該(gai)是(shi)嵌套表的話,那(nei)么可以回(hui)頭來先想下(xia)這個(ge)(ge)問題。

指定完畢事例表和(he)嵌(qian)套(tao)表,點(dian)擊下一步(bu)。

這(zhe)里指(zhi)定在分析模(mo)型中(zhong)如(ru)何使用(yong)這(zhe)些列(lie)(lie)(lie)。首(shou)先指(zhi)定鍵列(lie)(lie)(lie)為OrderNumber和Model,然后再把Model列(lie)(lie)(lie)指(zhi)定為輸入列(lie)(lie)(lie)和可預測列(lie)(lie)(lie)。因(yin)為這(zhe)里就是(shi)要(yao)根據已(yi)經選(xuan)擇的商(shang)品來預測客戶將會(hui)購買什么商(shang)品。

按如圖所示(shi)的方法指定完畢后,點擊(ji)下(xia)一步。

選(xuan)擇列的類型,這里根據系統自動(dong)判斷的類型選(xuan)擇就可以,直接點(dian)擊下一步。

然(ran)后(hou)這個界面中(zhong)主要是(shi)用(yong)來指定測試數(shu)(shu)據(ju)集的(de)(de)(de)多少(shao)。默(mo)認是(shi)30%,也就(jiu)是(shi)在數(shu)(shu)據(ju)中(zhong),保留30%的(de)(de)(de)數(shu)(shu)據(ju)來驗證建立好的(de)(de)(de)挖掘模(mo)型的(de)(de)(de)正(zheng)確性。此篇(pian)不對其做過詳(xiang)細的(de)(de)(de)介紹,所(suo)以先設置(zhi)成(cheng)(cheng)0,然(ran)后(hou)直接點擊Finish完(wan)成(cheng)(cheng)模(mo)型設置(zhi)向導。

可以看到建立(li)好的挖掘結構。

模型建立好了之后,需(xu)要將(jiang)其(qi)(qi)部署到一(yi)個分析服(fu)務的實例(li)上去,然后將(jiang)其(qi)(qi)處理。

這里直接右(you)鍵(jian)點擊Solution Explorer根目(mu)錄的(de)項目(mu)名(ming)稱,然(ran)后右(you)鍵(jian)菜單中選擇Process。

系統會提示服務器(qi)內容已過期,VS的(de)(de)判斷是(shi)只要你的(de)(de)Source Code比目(mu)標服務器(qi)的(de)(de)版(ban)本新,那么都(dou)會報這(zhe)個(ge)out of date錯誤,即(ji)使目(mu)標服務器(qi)上根本沒有這(zhe)個(ge)庫(ku)。所以這(zhe)里選擇(ze)Yes。

第一次 部(bu)署可(ke)能會彈出這個提示框讓你指(zhi)定可(ke)以方位數據源(yuan)鏈接(jie)的(de)賬(zhang)戶(hu),這里通常(chang)直(zhi)接(jie)敲本地(di)管理員的(de)賬(zhang)戶(hu)就 ok。

出現這個界面,直接點擊(ji)Run處理(li)挖(wa)掘(jue)模型。

然(ran)后系(xi)統會自(zi)動去做很(hen)多工(gong)作,這(zhe)里的細節你(ni)可以不去關(guan)心。(當然(ran)在(zai)其不報(bao)Error的情(qing)況下)

處(chu)理(li)完成之后,挖掘模(mo)型(xing)就建立好了(le)。后續的(de)實現商(shang)品推薦(jian)的(de)功(gong)能,就是基于此模(mo)型(xing)來實現的(de)。

 

這(zhe)里(li)再介紹一個概(gai)念,叫(jiao)DMX,也許你從沒聽說(shuo)過,但(dan)你一定知(zhi)道SQL,簡單的(de)(de)來說(shuo)SQL就(jiu)是用來查表(biao)得(de),那(nei)么DMX就(jiu)是用來查數據挖掘(jue)模型的(de)(de)。

它跟SQL一(yi)(yi)樣,也是(shi)SELECT FROM的(de)結構。具體的(de)語法信息(xi)大家(jia)有(you)興趣的(de)可以(yi)去參考微軟的(de)SQL Server聯機數據庫。在此篇中,下面會給出一(yi)(yi)個(ge)簡(jian)單的(de)DMX查詢,大家(jia)只要基本知(zhi)道它是(shi)干什么的(de)就可以(yi)了。

 

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

這個語句的大體意思就(jiu)是,購(gou)(gou)買了產品Touring Tire的用戶當中,根據歷史信息,還有可能會購(gou)(gou)買哪(na)些(xie)產品。

那么(me)我們(men)來看查詢結果:

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

 

然后(hou)我(wo)們來簡(jian)單解(jie)釋(shi)下相關列的信(xin)息:

SUPPORT-支持度,所處行的項支持度,這里跟傳統的支持度有些不同,這里,比如第一行,指的是有多少個訂單中包含了產品Touring Tire Tube

在數據倉庫中(zhong),我們(men)可以(yi)用SQL語句來驗證下這(zhe)個結果(guo)

SELECT COUNT(1)

FROM [AdventureWorksDW2012].[dbo].[vAssocSeqLineItems]

WHERE [Model]='Touring Tire Tube'

返回的結果就是1397。

PROBABILITY-概率

購買Touring Tire的(de)訂單(dan)中又包含Touring Tire Tube的(de)個(ge)數。再簡(jian)單(dan)點說就是概率中的(de)P(A|B)的(de)問題了。

那么我們還是來驗證下第一行的計算結果,同時購買Touring Tire Tube和Touring Tire的(de)訂單數量(liang):

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'

我們可以看到查詢返(fan)回(hui)的結(jie)果數(shu)量是758行。

然后再計算下訂單中只包含Touring Tire的(de)數量:

SELECT [OrderNumber]

FROM [AdventureWorksDW2012].[dbo].[vAssocSeqLineItems]

WHERE [Model]='Touring Tire'

返回的記錄行數是881行。

用(yong)758除以881,得到的(de)數字正(zheng)好是(shi)0.860385925。

這個概率(lv)正(zheng)好反(fan)映了這樣一(yi)個事實,就是(shi)購買Touring Tire的(de)客戶會有很(hen)大的(de)可能性(xing)購買Touring Tire Tube,所以當客戶購買Touring Tire之后系統自(zi)動(dong)的(de)向其推(tui)薦(jian)Touring Tire Tube準(zhun)沒錯(cuo)。

也許你已(yi)經看出了(le)那(nei)條DMX語(yu)句的(de)一些門道,當然,有(you)些關鍵字你暫(zan)時可以不用去關心(xin),必要的(de)時候(hou)可以參考微軟的(de)文檔。那(nei)么擴展一下,比如,客(ke)戶買了(le)指定的(de)兩樣產品,那(nei)么我根據這兩樣已(yi)選的(de)產品應該(gai)推薦給客(ke)戶什么呢?

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

看(kan)到熟悉(xi)的(de)UNION語(yu)句(ju)了(le)吧,好吧,相信(xin)你(ni)不懂DMX的(de)話你(ni)也看(kan)出這條語(yu)句(ju)的(de)規律了(le),這些(xie)就(jiu)夠了(le),后續文章(zhang)中(zhong)將會在c#邏輯代碼中(zhong)根據這條基本的(de)語(yu)句(ju)來動態的(de)來拼DMX語(yu)句(ju)。

 

 

 

以上數據挖掘模(mo)型的(de)建立部分到此完畢(bi),這是通常(chang)一個(ge)商業智能(neng)項目中底層架構的(de)基本(ben)部分。

后續我再(zai)寫兩篇在挖掘(jue)模型之上的文章(zhang),其中一個(ge)是基于這個(ge)模型開發(fa)service服務(wu)接口的,這個(ge)接口將(jiang)方便各個(ge)客(ke)戶(hu)端(duan)應(ying)用(yong)(yong),winform, asp.net或者silverlight等調用(yong)(yong)。最后一篇將(jiang)選用(yong)(yong)一個(ge)客(ke)戶(hu)端(duan)程序,構建簡單的界面,調用(yong)(yong)這個(ge)services來實現預(yu)測查詢。

posted @ 2013-02-24 01:25  哥本哈士奇(aspnetx)  閱讀(11031)  評論(15)    收藏  舉報