資料探勘中的關聯分析可以分成頻繁項集的挖掘和關聯規則的生成兩個步驟,而apriori演算法是找頻繁項集最常用到的一種演算法。
關於關聯分析和頻繁項集請見:什麼是關聯分析?
我們還是利用購物籃的例子來講述apriori演算法的思路。
購物籃資訊如下:我們apriori演算法的最終目的就是要找出資料集中的頻繁項集,把最小支援度閾值設為50%,則最終挖掘結果如下(後面的數字表示該項集的支援度計數):tiditems
001cola, egg, ham
002cola, diaper, beer
003cola, diaper, beer, ham
004diaper, beer
tid代表交易流水號,items代表一次交易的商品。
頻繁1-項集:apriori演算法的思路是由頻繁(k-1)-項集生成候選k-項集,然後根據最小支援度判斷該候選k-項集是否是頻繁k-項集。3 3
3 2
頻繁2-項集:
2 2
2 3
頻繁3-項集:
2
例如先找出所有1-項集,然後篩選出裡面的頻繁1-項集; 根據頻繁1-項集生成候選2-項集,然後篩選出裡面的頻繁2-項集; 再根據頻繁2-項集生成候選3-項集,從裡面篩選出頻繁3-項集;·······
那麼問題來了,如何從頻繁(k-1)-項集生成候選k-項集呢?
答案是利用apriori性質:乙個頻繁項集的任一子集也應該是頻繁子集(用反證法容易證明,略)。所以如果乙個項集是非頻繁項集,那麼它的超集也應該是非頻繁項集。
例如是頻繁項集,所以和也應該是頻繁項集。因為是非頻繁項集,所以也是非頻繁項集。
從頻繁1-項集生成候選2-項集的步驟是:把頻繁1-項集和頻繁1-項集排列組合成2-項集,把含有非頻繁子項集的2-項集去掉,就是候選2-項集了。
從頻繁2-項集生成候選三項集的步驟是:把頻繁2-項集和頻繁1-項集排列組合成3-項集:、、、。
因為不是頻繁2-項集,所以含有的不是候選3-項集,去掉。因為不是頻繁2-項集,所以含有的、不是候選3-項集,去掉。
所以候選3-項集只有。
購物籃頻繁項集的挖掘過程如下:
apriori演算法描述如下(**源自《資料探勘原理與實踐》):
演算法:apriori 演算法的頻繁項集的產生我們可以看到,apriori演算法是通過頻繁(k-1)-項集找到頻繁k-項集的,雖然可以通過apriori性質進行減枝,去掉一部分子集為非頻繁項集的候選項集,但還是需要不斷地掃瞄資料集,不斷地求候選項集的支援度計數從而判斷它是否是頻繁項集。如果資料集足夠大的時候,這種演算法的效率還是挺讓人捉急的!輸入:資料集d;最小支援度閾值min_sup
輸出:d 中的頻繁項集l
(1) l1
= find_frequent_1-itemset( d );
(2) for( k=2; lk
−1≠φ
; k++)
(3)
(12) }
(13) lk
= // 提取頻繁k-項集
(14) }
(15) return l=
∪klk
;procedureapriori_gen(lk
−1)
(1) for each itemset l1
∈lk−
1
(2) for each itemset l2
∈lk−
1
(3) if( l1
[1]=l2
[1] ∧…∧ ( l1
[k-2]=l2
[k-2] ) ∧ ( l1
[k-1]
[k-2] ) then
(4) {
(5) c = join( l1
, l2
); // 連線:產生候選
(6) if has_infrequent_subset( c, lk
−1) then
(7) delete c; // 減枝:移除非頻繁的候選
(8) else
(9) add c to ck
(10) }
(11) return ck
; procedurehas_infrequent_subset( c, lk
−1)
// 使用先驗知識判斷候選項集是否頻繁
(1) for each ( k-1 )-subset s of c
(2) if s ∉l
k−1 then
(3) return true;
(4) return false;
然後,fp-growth演算法就華麗麗的出現了,請見fp-growth演算法的介紹、fp_growth演算法python實現。
關聯分析演算法Apriori介紹
apriori 演算法其名字是因為演算法基於先驗知識 prior knowledge 根據前一次找到的頻繁項來生成本次的頻繁項。apriori 是關聯分析中核心的演算法。apriori 演算法的特點 只能處理分類變數,無法處理數值型變數 資料儲存可以是交易資料格式 事務表 或者是事實表方式 資料 演...
apriori演算法的學習
1993年美國學者agrawal提出通過分析購物籃中的商品集合,從而找出商品之間關聯關係的關聯演算法,並根據商品之間的關係,找出客戶的購買行為。agrawal從數學及計算機演算法角度提出了商品關聯關係的計算方法 apriori演算法。沃爾瑪從上個世紀90年代嘗試將aprior算 法引入到pos機資料...
Apriori演算法小結
1 apriori演算法是一種挖掘關聯規則的頻繁項集演算法,其核心思想是通過候選集生成挖掘頻繁項集。2 步驟 3 概念 對於a b 支援度 support p a b 既有a又有b 的概率 置信度 p b a p ab p a 在a 發生的事件中同時發生 b的概率 例如購物籃分析 牛奶 麵包例子 支...