作者:王安琪
簡(jiǎn)介
經(jīng)典的關(guān)聯(lián)規(guī)則挖掘算法包括Apriori算法和FP-growth算法。Apriori算法多次掃描交易數(shù)據(jù)庫(kù),每次利用候選頻繁集產(chǎn)生頻繁集;而FP-growth則利用樹(shù)形結(jié)構(gòu),無(wú)需產(chǎn)生候選頻繁集而是直接得到頻繁集,大大減少掃描交易數(shù)據(jù)庫(kù)的次數(shù),從而提高了算法的效率。但是apriori的算法擴(kuò)展性較好,可以用于并行計(jì)算等領(lǐng)域。
關(guān)聯(lián)規(guī)則的目的就是在一個(gè)數(shù)據(jù)集中找出項(xiàng)與項(xiàng)之間的關(guān)系,適用于在大數(shù)量的項(xiàng)集中發(fā)現(xiàn)關(guān)聯(lián)共現(xiàn)的項(xiàng)。也被稱為購(gòu)物籃分析 (Market Basket analysis),因?yàn)椤百?gòu)物籃分析”很貼切的表達(dá)了適用該算法情景中的一個(gè)子集。
購(gòu)物網(wǎng)站里你買了一個(gè)商品,旁邊列出一系列買過(guò)該商品的人還買的其他商品,并且按置信度高低排序,一般會(huì)發(fā)現(xiàn)買手機(jī)的還會(huì)買充電器(買充電器的人不一定會(huì)買手機(jī)),買牙刷的還會(huì)買牙膏,這大概就是關(guān)聯(lián)規(guī)則的用處。
基礎(chǔ)環(huán)境:
CentOS-6.5
JDK-1.7
spark:spark-1.2.0+cdh5.3.6+379
一、Apriori算法
支持度(Support):定義為/[supp(X) = /frac{包含X的記錄數(shù)}{數(shù)據(jù)集記錄總數(shù)}= P(X)=/frac{occur(X)}{count(D)}/]
置信度(Confidence): 定義為/[ conf(X=>Y) = /frac{同時(shí)包含X和Y的記錄數(shù)}{數(shù)據(jù)集中包含X的記錄數(shù)}=P(Y|X)=/frac{P(X /cap Y)}{P(X)} = /frac{occur(X /cap Y)}{occur(X)}/]
FP-growth算法是Apriori算法的優(yōu)化。
二、MLlib實(shí)現(xiàn)
spark-1.2.0 版本中Mliib的FPGrowthModel并沒(méi)有g(shù)enerateAssociationRules(minConfidence)方法。因此要引用高版本的jar包,并在提交任務(wù)時(shí)指定才行。這是可以實(shí)現(xiàn)的。
Ⅰ、獲取購(gòu)買歷史數(shù)據(jù)
下面共選取了6931條購(gòu)買歷史記錄,作為關(guān)聯(lián)規(guī)則挖掘的數(shù)據(jù)集。
1、產(chǎn)生源數(shù)據(jù)
我們可能需要使用類Mysql中的group_concat()來(lái)產(chǎn)生源數(shù)據(jù)。在Hive中的替代方案是concat_ws()。但若要連接的列是非string型,會(huì)報(bào)以下錯(cuò)誤:Argument 2 of function CONCAT_WS must be “string or array”, but “array” was found.。使用以下hiveSQL可以避免此問(wèn)題:
SELECT concat_ws(‘,’, collect_set(cast(item_id AS String))) AS items FROM ods_angel_useritem tb GROUP BY tb.user_id;
得到item1,item2,item3式數(shù)據(jù)結(jié)構(gòu)。
數(shù)據(jù)結(jié)構(gòu)如下所示:
2、構(gòu)造JavaRDD
JavaRDD<list> transactions = …;
Ⅱ、過(guò)濾掉出現(xiàn)頻率較低的數(shù)據(jù)
Java代碼:
結(jié)果:
/[/frac{208}{6931}=0.03001>0.03/],6931是交易的訂單數(shù)量,即數(shù)據(jù)源總條數(shù)。
可見(jiàn),商品732994正好高于支持率下限。
Ⅲ、過(guò)濾掉可信度過(guò)低的判斷
Java代碼:
結(jié)果:
- /(P(733850|733480)=/frac{occur(733850 /cap 733480)}{occur(733480)}=/frac{339}{1051}=0.3225499524262607/)
- /(P(733480|731246)=/frac{occur(733480 /cap 731246)}{occur(731246)}=/frac{233}{500}=0.466/)
- /(P(733480|733850)=/frac{occur(733850 /cap 733480)}{occur(733850)}=/frac{339}{878}=0.38610478359908884/)
以上表明,用戶在購(gòu)買商品733480后往往還會(huì)購(gòu)買商品733480,可信度為0.3225499524262607;用戶在購(gòu)買商品731246后往往還會(huì)購(gòu)買商品731246,可信度為0.466;用戶在購(gòu)買商品733850后往往還會(huì)購(gòu)買商品733480,可信度為0.38610478359908884。
三、提交任務(wù)
Ⅰ、Spark On Standalone
spark-submit –master spark://node190:7077 –class com.angel.mlib.FPGrowthTest –jars lib/hbase-client-0.98.6-cdh5.3.6.jar,lib/hbase-common-0.98.6-cdh5.3.6.jar,lib/hbase-protocol-0.98.6-cdh5.3.6.jar,lib/hbase-server-0.98.6-cdh5.3.6.jar,lib/htrace-core-2.04.jar,lib/zookeeper.jar,lib/spark-mllib_2.10-1.5.2.jar,lib/spark-core_2.10-1.5.2.jar spark-test-1.0.jarⅡ、Spark On Yarn
II、Spark On Yarn
spark-submit –master yarn-client –class com.angel.mlib.FPGrowthTest –jars lib/hbase-client-0.98.6-cdh5.3.6.jar,lib/hbase-common-0.98.6-cdh5.3.6.jar,lib/hbase-protocol-0.98.6-cdh5.3.6.jar,lib/hbase-server-0.98.6-cdh5.3.6.jar,lib/htrace-core-2.04.jar,lib/zookeeper.jar,lib/spark-mllib_2.10-1.5.2.jar,lib/spark-core_2.10-1.5.2.jar spark-test-1.0.jar
四、FPGrowth算法在現(xiàn)實(shí)中的應(yīng)用調(diào)優(yōu)
在實(shí)際情況中,真實(shí)的業(yè)務(wù)數(shù)據(jù)處處都是噪聲?;钣脭?shù)據(jù),設(shè)計(jì)有業(yè)務(wù)含義的特征體系,是構(gòu)造魯棒模型的基礎(chǔ)!
具體的解決辦法,我們可以多算法并用,這些將在后續(xù)的aitanjupt文章中詳述。
五、綜上所述
也就是說(shuō),“購(gòu)買了該寶貝的人32%還購(gòu)買了某某商品”就是使用商品關(guān)聯(lián)規(guī)則挖掘?qū)崿F(xiàn)的;還有一些捆綁銷售,例如牙膏和牙刷一起賣,尿布和啤酒放在一起賣。
關(guān)聯(lián)規(guī)則挖掘算法不只是能用在商品銷售,使用它我們可以挖掘出更多的關(guān)聯(lián)關(guān)系,比如我們可以挖掘出,溫度、天氣、性別等等與心情之間是否有關(guān)聯(lián)關(guān)系,這是非常有意義的。
關(guān)聯(lián)規(guī)則挖掘算法應(yīng)用場(chǎng)景非常龐大,遙記多年前做的手機(jī)用戶關(guān)聯(lián)分析,那時(shí)尚未用到關(guān)聯(lián)規(guī)則挖掘算法,用的是自己編寫的類join算法,現(xiàn)在看起來(lái),關(guān)聯(lián)規(guī)則挖掘算法是再適合不過(guò)的了。

某一數(shù)據(jù)挖掘算法可以做某種特定的分析,也可以跨界使用,還可以聯(lián)合應(yīng)用,重要的是理解其思想以靈活運(yùn)用。
幸福是有一顆感恩的心,健康的身體,稱心的工作,一位深愛(ài)你的人,一幫信賴的朋友!
原文>>>
End.
轉(zhuǎn)載請(qǐng)注明來(lái)自36大數(shù)據(jù)(36dsj.com):36大數(shù)據(jù) » 大數(shù)據(jù)挖掘: FPGrowth初識(shí)–進(jìn)行商品關(guān)聯(lián)規(guī)則挖掘
愛(ài)盈利-運(yùn)營(yíng)小咖秀 始終堅(jiān)持研究分享移動(dòng)互聯(lián)網(wǎng)App數(shù)據(jù)運(yùn)營(yíng)推廣經(jīng)驗(yàn)、策略、全案、渠道等純干貨知識(shí)內(nèi)容;是廣大App運(yùn)營(yíng)從業(yè)者的知識(shí)啟蒙、成長(zhǎng)指導(dǎo)、進(jìn)階學(xué)習(xí)的集聚平臺(tái);