前面幾篇介紹了關聯規則的一些基本概念和兩個基本演算法,但實際在商業應用中,寫演算法反而比較 少,理解資料,把握資料,利用工具才是重要的,前面的基礎篇是對演算法的理解,這篇將介紹開源利 用資料採礦工具weka進行管理規則挖掘。
weka資料集格式arff
arff標準資料集簡介
weka的資料檔案尾碼為arff(Attribute-Relation File Format,即屬性關聯性檔案格式),arff文 件分為注釋、關係名、屬性名稱、資料域幾大部分,注釋用百分比符號開頭%,關係名用@relation申明,屬 性用@attribute什麼,資料域用@data開頭,看這個樣本資料集(安裝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} @datasunny,85,85,FALSE,nosunny,80,90,TRUE,noovercast,83,86,FALSE,yesrainy,70,96,FALSE,yesrainy,68,80,FALSE,yesrainy,65,70,TRUE,noovercast,64,65,TRUE,yessunny,72,95,FALSE,nosunny,69,70,FALSE,yesrainy,75,80,FALSE,yessunny,75,70,TRUE,yesovercast,72,90,TRUE,yesovercast,81,75,FALSE,yesrainy,71,91,TRUE,no
當資料是數值型,在屬性名稱的後面加numeric,如果是離散值(枚舉值),就用一個大括弧將範圍 列出來。@data下一行後為資料記錄,資料為矩陣形式,即每一個的資料元素個數相等,若有缺失值, 就用問號?表示。
arff稀疏資料集
我們做關聯規則挖掘,比如購物籃分析,我們的購物清單資料肯定是相當稀疏的,超市的商品種類 有上10000種,而每個人買東西只會買幾種商品,這樣如果用矩陣形式表示資料顯然浪費了很多的儲存 空間,我們需要用稀疏資料表示,看我們的購物清單樣本(basket.txt):
freshmeat dairy confectioneryfreshmeat confectionerycannedveg frozenmeal beer fishdairy winefreshmeat wine fishfruitveg softdrinkbeerfruitveg frozenmealfruitveg fishfruitveg freshmeat dairy cannedveg wine fishfruitveg fishdairy cannedmeat frozenmeal fish
資料集的每一行表示一個去重後的購物清單,進行關聯規則挖掘時,我們可以先把商品名字映射為 id號,挖掘的過程只有id號就是了,到規則挖掘出來之後再轉回商品名就是了,retail.txt是一個轉 化為id號的零售資料集,資料集的前面幾行如下:
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 31 32 34 35 37 38 39 40 41 42 43 44 45 46 39 47 48 39 48 49 50 51 52 53 54 55 56 57 58 41 59 60 61 62 39 48 64 65 66 67 68 69
這個資料集的商品有16469個,一個購物的商品數目遠少於商品中數目,因此要用稀疏資料表, weka支援稀疏資料表示,但我在運用apriori演算法時有問題,先看一下weka的稀疏資料要求:稀疏資料 和標準資料的其他部分都一樣,唯一不同就是@data後的資料記錄,樣本如下(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}