Apriori算法是我的第一個數據挖掘算法,算處女作吧,哈哈哈。在這之前我對數據挖掘 算法恐懼,覺得太難了,只是大致看了下原理,然后在clementine上拖幾個控件跑下demo,運行的結果很好但是總覺得技術含量不高,我不知道為什 么要這么做,為什么那些參數要那么設置,更糟糕的是發現那些算法過一段時間都忘記了。沒辦法,不入虎穴焉得虎子,我逼迫自己根據書上提供的講解和偽碼,琢 磨着用什么數據結構保存數據?怎么把算法用程序實現?。。。。。。。萬事開頭難,好在我還是把這個算法寫出來了,我獲得了自信,使得我真正喜歡上了數據挖 掘,現在看看自己寫的那個算法,覺得有好多地方不成熟,哈哈哈。
在這基礎上找頻繁項集為3的元素,此時就有規律性了,在頻繁項集為K的元素上找頻繁項集為 K+1的元素的方法是:在頻繁項集為K的項目(每行記錄)中,假如共有N行,兩兩組合,滿足兩兩中前K-1個元素相同,只后一個元素要求前一條記錄的商品 名稱小於后一條記錄的商品名稱,這樣是為了避免重復組合,求它們的並集得到長度為K+1的准頻繁項集,那么最多共有
種可能的組合,有:
想想如果N很大的話,
是一個多么龐大的數字,這時就要用到Apriori的核心了:如果K+1個元素構成頻繁項集,那么它的任意K個元素的子集也是頻繁項集。然后將每組K+1個元素的所有長度為K的子集,有
中組合,在頻繁項集為K的項集中匹配,沒有找到則刪除,用第一條記錄{I1,I2,I3}它的長度為2的頻繁項集有:
分別是:{I1,I2},{I1,I3},{I2,I3}種情況,幸好這三種情況在頻繁項集為2的項集中都找到了。通過這步過濾,得到的依舊是准頻繁項集,它們是:
,此時第四次掃描數據庫,得到真正長度為3的頻繁項集是
因為{I1,I2,I4}只出現了1次,小於最小支持度2,刪除。就這個例子而言,它的最大頻繁項集只有3,就是{I1,I2,I3}和{I1,I2,I5},我想不用我多說大家都明白了。
可見Apriori算法有個最大的問題就是要產生大量准頻繁項集或者說候選集,效率不高,並且要多次掃描數據庫,在后面的PF_growth算法將避免了這兩個個問題。
每一行表示一條交易,共有9行,既9筆交易,左邊表示交易ID,右邊表示商品名稱。最小支持度是22%,那么每件商品至少要出現9*22%=2次才算頻繁。第一次掃描數據庫,使得在每條交易中,按商品名稱遞增排序。第二次掃描數據,找頻繁項集為1的元素有:
左邊表示商品名稱,右邊表示出現的次數,都大於閾值2。在此基礎上找頻繁項集是2的元素,方法是兩兩任意組合,第三次掃描數據得到它們出現的次數:
這里{I1,I4},{I3,I4},{I3,I5},{I4,I5}出現的次數都小於2,過濾掉,實際頻繁項集為2的元素有:

在這基礎上找頻繁項集為3的元素,此時就有規律性了,在頻繁項集為K的元素上找頻繁項集為 K+1的元素的方法是:在頻繁項集為K的項目(每行記錄)中,假如共有N行,兩兩組合,滿足兩兩中前K-1個元素相同,只后一個元素要求前一條記錄的商品 名稱小於后一條記錄的商品名稱,這樣是為了避免重復組合,求它們的並集得到長度為K+1的准頻繁項集,那么最多共有


想想如果N很大的話,





來源:http://blog.sina.com.cn/s/blog_6e85bf420100ogn2.html