資料探勘領域十大經典演算法之—Apriori演算法
阿新 • • 發佈:2019-01-09
簡介
先驗演算法(Apriori Algorithm)是關聯規則學習的經典演算法之一。先驗演算法的設計目的是為了處理包含交易資訊內容的資料庫(例如,顧客購買的商品清單,或者網頁常訪清單。)而其他的演算法則是設計用來尋找無交易資訊(如Winepi演算法和Minepi演算法)或無時間標記(如DNA測序)的資料之間的聯絡規則。
在關聯式規則中,一般對於給定的專案集合(例如,零售交易集合,每個集合都列出的單個商品的購買資訊),演算法通常嘗試在專案集合中找出至少有C個相同的子集。先驗演算法採用自底向上的處理方法,即頻繁子集每次只擴充套件一個物件(該步驟被稱為候選集產生),並且候選集由資料進行檢驗。當不再產生匹配條件的擴充套件物件時,演算法終止。
演算法流程
演算法:Apriori 演算法的頻繁項集的產生
輸入:資料集D;最小支援度閾值min_sup
輸出:D 中的頻繁項集L
(1) L1 = find_frequent_1-itemset( D );
(2) for( k=2; Lk−1≠Φ; k++)
(3) {
(4) Ck = apriori_gen(Lk−1); // 產生候選項集
(5) for all transactions t ∈D
(6) {
(7) Ct = subset(Ck, t); // 識別 t 包含的所有候選
(8) for all candidates c∈Ct
(9) {
(10) c.count++; // 支援度計數增值
(11) }
(12) }
(13) Lk = { c∈Ck | c.count≥min_sup} // 提取頻繁k-項集
(14) }
(15) return L=∪kLk
;
procedure apriori_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]<l2[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
;
procedure has_infrequent_subset( c, Lk−1
)
// 使用先驗知識判斷候選項集是否頻繁
(1) for each ( k-1 )-subset s of c
(2) if s ∉Lk−1 then
(3) return TRUE;
(4) return FALSE;