DM入门之Apriori小结
Apriori算法:使用候選項找頻繁項集
Apriori算法是關(guān)聯(lián)分析中一種基本算法,用于挖掘布爾關(guān)聯(lián)規(guī)則頻繁項集。原理:利用頻繁項集的先驗知識,使用逐層搜索的迭代方法,使用k項集探索(k+1)項集。這里先看哈二維Apriori算法。(一般數(shù)據(jù)庫都是二維的嘛。。hehe)
Apriori性質(zhì):頻繁項集的所有非空子集都必須也是頻繁的。(一種反單調(diào)性質(zhì))
算法描述:
1、鏈接步:通過L<k-1>自連接產(chǎn)生候選k項集C<k>。
2、剪枝步:C<k>是L<k>的超集。利用Apriori性質(zhì),如果一個k項集的(k-1)項集不在L<k-1>中,則該k項集從C<k>中刪除。(這種子集測試可以使用所有頻繁項集的散列樹快速完成)
上Pseudo Code:
Apriori輸入:事務(wù)數(shù)據(jù)D;最小支持度閥值min_sup。
輸出:D中的頻繁項集L。
L<1>?=?find_frequent_1-itemset(D);
For?(k?=?2;?L<k-1>?!=?empty;?k++)?{
????C<k>?=?apriori_gen(L<k-1>,?min_sup);
????For?each?transaction?t?in?D?{
????????C<t>?=?subset(C<k>,?t);????//找出t中是候選集的所有C<k>的子集
????????For?each?candidate?c?in?C<t>
????????????c.count++;
????}
????L<k>?=?{c?in?C<k>?|?c.count?>=?min_sup}
}
Return?L?=?set?of?L<k>
Procedure?apriori_gen(L<k-1>,?min_sup)
????For?each?itemset?l1?in?L<k-1>
????????For?each?itemset?l2?in?L<k-1>
????????????If?(l1[i]?=?l2[1])?&&?(l1[2]?=?l2[2])?&&?…?&&?(l1[k-2]?=?l2[k-2])?&&?(l1[k-1]?<?l2[k-1])?then?{
????????????????c?=?l1?*?l2;????//union
????????????????if?has_infrequent_subset(c,?L<k-1>)?then
????????????????????delete?c;
????????????????else
????????????????????add?c?to?C<k>;
????????????}
????Return?C<k>;
Procedure?has_infrequent_subset(c,?L<k-1>)
????For?each?(k-1)-subset?s?of?c
????????If?s?not?in?L<k-1>?then
Return?TRUE;
????Return?FALSE;
由頻繁項集產(chǎn)生關(guān)聯(lián)規(guī)則:??
Confidence(A => B) = P(A | B)
??? = support(AB) / support(B) = support_count(AB) / support_count(B)
對于前面Apriori找出的每個頻繁項集l,產(chǎn)生l的非空子集;(記得Apriori性質(zhì)哦)
對于每個非空子集s,如果 support_count(l) / support_count(s) >= min_conf,則輸出“s => (l – s)”(為什么用support_count(l)不用(l-s)?)
提高Apriori的有效性?數(shù)據(jù)結(jié)構(gòu)的改進(jìn),掃描次數(shù)的降低等。??
1、散列項集計數(shù),增加效率。
一個土一點的比喻:在Java里面用HashMap<Key, Val>來存。。還有種用trie樹的,等我補習(xí)過Algorithms in C++再說。。
2、事務(wù)壓縮:不包含k項集的事務(wù)不可能包含(k+1)項集。這樣,可以給事務(wù)加刪除標(biāo)記,下次迭代不考慮之。
3、劃分(Er。。不是等價類,是看程序設(shè)計的方便亂劃,比如一次能裝入內(nèi)存多少就劃多少)
兩次掃描。第一次,將D中事務(wù)劃分為n個非重疊部分,如果D中事務(wù)最小支持閥值為min_sup,則每個部分最小支持計數(shù)為(min_sup * 該部分事務(wù)數(shù))。對每一部分,找出局部頻繁項集。
局部頻繁項集可能不是整個數(shù)據(jù)庫D的頻繁項集,但D的任何頻繁項集必是局部頻繁項集(WHY?)。所有局部頻繁項集合并為全局候選項集。第二次掃描D,評估每個候選的實際支持度。
4、選樣:就是抽樣+檢測手段,以精度換速度。
5、動態(tài)項集計數(shù):不像Apriori僅在每次完整掃描前確定新的候選,現(xiàn)在在任何開始點添加候選集。(編程怎么實現(xiàn)比較好?)
轉(zhuǎn)載于:https://www.cnblogs.com/dxz/archive/2007/04/05/dm_apriori_basics.html
總結(jié)
以上是生活随笔為你收集整理的DM入门之Apriori小结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu下如何查看GPU版本和使用信
- 下一篇: 字符串搜索。HOJ1530 Compou