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項集中只有一個項集時循環結束。