apriori演算法的c實現
1. apriori演算法
Apriori演算法是第一個關聯規則挖掘演算法,也是最經典的演算法。它利用逐層搜索的迭代方法找出資料庫中項集的關系,以形成規則,其過程由連接(類矩陣運算)與剪枝(去掉那些沒必要的中間結果)組成。
2. 數據挖掘中的apriori演算法的具體步驟是什麼
演算法:Apriori
輸入:D - 事務資料庫;min_sup - 最小支持度計數閾值
輸出:L - D中的頻繁項集
方法:
     L1=find_frequent_1-itemsets(D); // 找出所有頻繁1項集
     For(k=2;Lk-1!=null;k++){
        Ck=apriori_gen(Lk-1); // 產生候選,並剪枝
        For each 事務t in D{ // 掃描D進行候選計數
            Ct =subset(Ck,t); // 得到t的子集
            For each 候選c 屬於 Ct
                         c.count++;
        }
        Lk={c屬於Ck | c.count>=min_sup}
}
Return L=所有的頻繁集;
 
Procere apriori_gen(Lk-1:frequent(k-1)-itemsets)
      For each項集l1屬於Lk-1
              For each項集 l2屬於Lk-1
                       If((l1[1]=l2[1])&&( l1[2]=l2[2])&&……..
&& (l1[k-2]=l2[k-2])&&(l1[k-1]<l2[k-1])) then{
                   c=l1連接l2 //連接步:產生候選
                   if has_infrequent_subset(c,Lk-1) then
                       delete c; //剪枝步:刪除非頻繁候選
                   else add c to Ck;
                  }
          Return Ck;
 
     Procere has_infrequent_sub(c:candidate k-itemset; Lk-1:frequent(k-1)-itemsets)
        For each(k-1)-subset s of c
            If s不屬於Lk-1 then
               Return true;
        Return false;
3. weka里Apriori關聯規則挖掘,我希望得到的結論是與最後一列目標屬性的關系,可是總是得到的都是前邊條件屬
weka裡面的apriori演算法,先生成所有的頻繁項集,然後生成規則,根據最小支持度和置信度都滿足的情況,選出強規則輸出。
舉個例子,比如有個長度為3的頻繁項集ABC
那麼你生成規則時候是:
A->BC 
AB->C 
AC->B
B->AC
BC->A
C->AB
然後分別對上述產生的規則計算置信度,如果不滿足,就不輸出
那麼你所說的問題,很可能是因為你的最後一列在->右邊時的規則不滿足置信度。
所以沒有那樣的規則輸出。
weka默認的最小支持度是0.1,最小置信度是0.9,你可以通過命令行進行調整,適當降低
置信度,可能就能看到你想要的規則了。
4. apriori演算法 怎麼處理連續值
Apriori演算法流程
    1. 掃描資料庫,生成候選1項集和頻繁1項集。
    2. 從2項集開始循環,由頻繁k-1項集生成頻繁頻繁k項集。
           2.1  頻繁k-1項集生成2項子集,這里的2項指的生成的子集中有兩個k-1項集。使如有3個2項頻繁集{a, b}{b, c}{c, f},則它所有的2項子集為{{a, b}{b, c}}{{a, b}{e, f}}{{b, c}{c, f}}
        2.2  對由2.1生成的2項子集中的兩個項集根據上面所述的定理 i 進行連接,生成k項集。
        2.3  對k項集中的每個項集根據如上所述的定理 ii 進行計算,舍棄掉子集不是頻繁項集即不在頻繁k-1項集中的項集。
        2.4  掃描資料庫,計算2.3步中過濾後的k項集的支持度,舍棄掉支持度小於閾值的項集,生成頻繁k項集。
    3.  當當前生成的頻繁k項集中只有一個項集時循環結束。
