1. 程式人生 > >資料探勘領域十大經典演算法之—Apriori演算法

資料探勘領域十大經典演算法之—Apriori演算法

簡介

先驗演算法(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 l1Lk−1 (2)  for each itemset l2Lk−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 sLk−1 then (3)    return TRUE; (4) return FALSE;