weka,FP,priori
數(shù)據(jù)挖掘系列(4)使用weka做關(guān)聯(lián)規(guī)則挖掘
轉(zhuǎn)自:www.cnblogs.com/fengfenggirl
前面幾篇介紹了關(guān)聯(lián)規(guī)則的一些基本概念和兩個基本算法,但實(shí)際在商業(yè)應(yīng)用中,寫算法反而比較少,理解數(shù)據(jù),把握數(shù)據(jù),利用工具才是重要的,前面的基礎(chǔ)篇是對算法的理解,這篇將介紹開源利用數(shù)據(jù)挖掘工具weka進(jìn)行管理規(guī)則挖掘。
weka數(shù)據(jù)集格式arff
arff標(biāo)準(zhǔn)數(shù)據(jù)集簡介
weka的數(shù)據(jù)文件后綴為arff(Attribute-Relation File Format,即屬性關(guān)系文件格式),arff文件分為注釋、關(guān)系名、屬性名、數(shù)據(jù)域幾大部分,注釋用百分號開頭%,關(guān)系名用@relation申明,屬性用@attribute什么,數(shù)據(jù)域用@data開頭,看這個示例數(shù)據(jù)集(安裝weka后,可在weka的安裝目錄/data下找到weather.numeric.arff):
%weather dataset @relation weather@attribute outlook {sunny, overcast, rainy} @attribute temperature numeric @attribute humidity numeric @attribute windy {TRUE, FALSE} @attribute play {yes, no}@data sunny,85,85,FALSE,no sunny,80,90,TRUE,no overcast,83,86,FALSE,yes rainy,70,96,FALSE,yes rainy,68,80,FALSE,yes rainy,65,70,TRUE,no overcast,64,65,TRUE,yes sunny,72,95,FALSE,no sunny,69,70,FALSE,yes rainy,75,80,FALSE,yes sunny,75,70,TRUE,yes overcast,72,90,TRUE,yes overcast,81,75,FALSE,yes rainy,71,91,TRUE,no當(dāng)數(shù)據(jù)是數(shù)值型,在屬性名的后面加numeric,如果是離散值(枚舉值),就用一個大括號將值域列出來。@data下一行后為數(shù)據(jù)記錄,數(shù)據(jù)為矩陣形式,即每一個的數(shù)據(jù)元素個數(shù)相等,若有缺失值,就用問號?表示。
arff稀疏數(shù)據(jù)集
我們做關(guān)聯(lián)規(guī)則挖掘,比如購物籃分析,我們的購物清單數(shù)據(jù)肯定是相當(dāng)稀疏的,超市的商品種類有上10000種,而每個人買東西只會買幾種商品,這樣如果用矩陣形式表示數(shù)據(jù)顯然浪費(fèi)了很多的存儲空間,我們需要用稀疏數(shù)據(jù)表示,看我們的購物清單示例(basket.txt):
freshmeat dairy confectionery freshmeat confectionery cannedveg frozenmeal beer fish dairy wine freshmeat wine fish fruitveg softdrink beer fruitveg frozenmeal fruitveg fish fruitveg freshmeat dairy cannedveg wine fish fruitveg fish dairy cannedmeat frozenmeal fish? 數(shù)據(jù)集的每一行表示一個去重后的購物清單,進(jìn)行關(guān)聯(lián)規(guī)則挖掘時,我們可以先把商品名字映射為id號,挖掘的過程只有id號就是了,到規(guī)則挖掘出來之后再轉(zhuǎn)回商品名就是了,retail.txt是一個轉(zhuǎn)化為id號的零售數(shù)據(jù)集,數(shù)據(jù)集的前面幾行如下:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 38 39 47 48 38 39 48 49 50 51 52 53 54 55 56 57 58 32 41 59 60 61 62 3 39 48 63 64 65 66 67 68 32 69? 這個數(shù)據(jù)集的商品有16469個,一個購物的商品數(shù)目遠(yuǎn)少于商品中數(shù)目,因此要用稀疏數(shù)據(jù)表,weka支持稀疏數(shù)據(jù)表示,但我在運(yùn)用apriori算法時有問題,先看一下weka的稀疏數(shù)據(jù)要求:稀疏數(shù)據(jù)和標(biāo)準(zhǔn)數(shù)據(jù)的其他部分都一樣,唯一不同就是@data后的數(shù)據(jù)記錄,示例如下(basket.arff):?
@relation 'basket' @attribute fruitveg {F, T} @attribute freshmeat {F, T} @attribute dairy {F, T} @attribute cannedveg {F, T} @attribute cannedmeat {F, T} @attribute frozenmeal {F, T} @attribute beer {F, T} @attribute wine {F, T} @attribute softdrink {F, T} @attribute fish {F, T} @attribute confectionery {F, T} @data {1 T, 2 T, 10 T} {1 T, 10 T} {3 T, 5 T, 6 T, 9 T} {2 T, 7 T} {1 T, 7 T, 9 T} {0 T, 8 T} {6 T} {0 T, 5 T} {0 T, 9 T} {0 T, 1 T, 2 T, 3 T, 7 T, 9 T} {0 T, 9 T} {2 T, 4 T, 5 T, 9 T}? 可以看到
freshmeat dairy confectionery freshmeat confectionery? 表示為了:
{1 T, 2 T, 10 T} {1 T, 10 T稀疏數(shù)據(jù)的表示格式為:{<屬性列號><空格><值>,...,<屬性列號><空格><值>},注意每條記錄要用大括號,屬性列號不是id號,屬性列號是從0開始的,即第一個@attribute 后面的屬性是第0個屬性,T表示數(shù)據(jù)存在。
規(guī)則挖取
我們先用標(biāo)準(zhǔn)數(shù)據(jù)集normalBasket.arff[1]試一下,weka的apriori算法和FPGrowth算法。
1、安裝好weka后,打開選擇Explorer
2、打開文件
3、選擇關(guān)聯(lián)規(guī)則挖掘,選擇算法
4、設(shè)置參數(shù)
參數(shù)主要是選擇支持度(lowerBoundMinSupport),規(guī)則評價機(jī)制metriType(見上一篇)及對應(yīng)的最小值,參數(shù)設(shè)置說明如下[2]:
1. car 如果設(shè)為真,則會挖掘類關(guān)聯(lián)規(guī)則而不是全局關(guān)聯(lián)規(guī)則。 2. classindex 類屬性索引。如果設(shè)置為-1,最后的屬性被當(dāng)做類屬性。 3. delta 以此數(shù)值為迭代遞減單位。不斷減小支持度直至達(dá)到最小支持度或產(chǎn)生了滿足數(shù)量要求的規(guī)則。 4. lowerBoundMinSupport 最小支持度下界。 5. metricType 度量類型。設(shè)置對規(guī)則進(jìn)行排序的度量依據(jù)。可以是:置信度(類關(guān)聯(lián)規(guī)則只能用置信度挖掘),提升度(lift),杠桿率(leverage),確信度(conviction)。 在 Weka中設(shè)置了幾個類似置信度(confidence)的度量來衡量規(guī)則的關(guān)聯(lián)程度,它們分別是: a) Lift : P(A,B)/(P(A)P(B)) Lift=1時表示A和B獨(dú)立。這個數(shù)越大(>1),越表明A和B存在于一個購物籃中不是偶然現(xiàn)象,有較強(qiáng)的關(guān)聯(lián)度. b) Leverage :P(A,B)-P(A)P(B)Leverage=0時A和B獨(dú)立,Leverage越大A和B的關(guān)系越密切 c) Conviction:P(A)P(!B)/P(A,!B) (!B表示B沒有發(fā)生) Conviction也是用來衡量A和B的獨(dú)立性。從它和lift的關(guān)系(對B取反,代入Lift公式后求倒數(shù))可以看出,這個值越大, A、B越關(guān)聯(lián)。 6. minMtric 度量的最小值。 7. numRules 要發(fā)現(xiàn)的規(guī)則數(shù)。 8. outputItemSets 如果設(shè)置為真,會在結(jié)果中輸出項(xiàng)集。 9. removeAllMissingCols 移除全部為缺省值的列。10. significanceLevel 重要程度。重要性測試(僅用于置信度)。11. upperBoundMinSupport 最小支持度上界。 從這個值開始迭代減小最小支持度。12. verbose 如果設(shè)置為真,則算法會以冗余模式運(yùn)行。?
設(shè)置好參數(shù)后點(diǎn)擊start運(yùn)行可以看到Apriori的運(yùn)行結(jié)果:
FPGrowth運(yùn)行的結(jié)果是一樣的:
每條規(guī)則都帶有出現(xiàn)次數(shù)、自信度、相關(guān)度等數(shù)值。
下面測一個大一點(diǎn)的數(shù)據(jù)集retail.arff[1](retail.arff是由retail.txt轉(zhuǎn)化而來,為了不造成誤解,我在id好前加了一個"I",比如2變?yōu)镮2),這個數(shù)據(jù)用的稀疏數(shù)據(jù)表示方法,數(shù)據(jù)記錄有88162條,用Apriori算法在我的2G電腦上跑不出來,直接內(nèi)存100%,用FPGrowth可以輕松求出,看一下運(yùn)行結(jié)果:
其他參數(shù)可以自己調(diào)整比較。
參考文獻(xiàn):
[1].本文用的所有數(shù)據(jù)集basket.txt,basket.arff,normalBasket.arff,retail.txt,retail.arff都在這里可下載.
[2].weka Apriori算法實(shí)例操作詳解:http://blog.csdn.net/haosijia929/article/details/5596939
感謝閱讀,歡迎回帖交流
轉(zhuǎn)置請注明出處:www.cnblogs.com/fengfenggirl
總結(jié)
以上是生活随笔為你收集整理的weka,FP,priori的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 六、DDE服务器函数
- 下一篇: (精)广东工业大学 2018实时大数据分