Frequent pattern mining的幾種方式: 算法
1.基於模式完整性的(completeness of patterns) 數據庫
2.基於和規則集有關抽象層次的(levels of abstraction) ide
3.基於和規則有關維數的(number of data dimensions) spa
4.基於規則值類型的(types of value) 排序
5.基於規則種類的(kinds of rules) ci
6.基於模式種類的(kinds of patterns) it
基礎算法: io
Apriori算法:最基本的frequent itemsets挖掘算法(單抽象層,單數據維,boolean值類型) 基礎
方法:迭代,用k-itemsets來找到(k+1)-itemsets。 date
步驟:逐次找L1,L2,L3...Lk。
爲了減小搜索空間,優先原則(Apriori property)被引入:
-全部頻繁集的非空子集必然是頻繁集,或者說,全部非頻繁集的超集都不會是頻繁集。
如何應用Apriori property:包括兩個操做:合併(join)和剪枝(prune)。以L(k-1)尋找Lk爲例子
1.合併,爲了尋找到Lk,須要對L(k-1)進行自鏈接,以找出k-itemsets的候選者(candidate),用Ck表示。對L(k-1)中的任意一個元素(某一個頻繁項目集)li,一般li中的每一個項目li[x]是已經詞法排序好的。進行L(k-1)joinL(k-1),其中任意兩個li和lj能夠進行鏈接的條件是:li[1]=lj[1],li[2]=lj[2],li[3]=lj[3]...,li[k-2]=lj[k-2],li[k-1]<lj[k-1](第k-1項不相等,否者出現多餘)。合併的結果是li[1],li[2],...li[k-2],li[k-1],lj[k-1]。
2.剪枝:候選者集合Ck是Lk的超集,Lk的全部元素必然來自Ck。因此遍歷Ck能夠找到Lk的全體元素。可是這樣計算量巨大,因此利用Apriori property來減小Ck的規模。即全部非頻繁的(k-1)-itemset的超集k-itemset都不會屬於頻繁項目集集合Lk。因此能夠對Ck的每一個k-itemset元素進行判斷,只要Ck中某個k-itemset的任一子集(k-1)-itemset不屬於L(k-1),就說明這個候選項不可能成爲頻繁項目集Lk的一員,要被拋棄。
由頻繁項目集l中產生規則rules:
(
association rule A=>B 必須知足的條件:
1.A∩B=∅
2.support(A⇒B) = P(A ∪ B) >min_sup
3. confidence(A⇒B) = P(B|A) = support_count(A ∪ B)/ support_count(A)>min_conf
)
對某一個頻繁項目集l,它能夠產生多條關聯規則,產生的方式是求出l的每個非空子集s,s=>(l-s)的條件是support_count(l)/support_count(s)>min_conf。由於l是來自頻繁項目集集合L的,因此它必然知足 P(l) >min_sup。
評價:
Apriori雖然candidate 產生而且檢測(鏈接並剪枝)的方式大大減小了候選者集合C的規模,可是它仍然有兩個弊病:(1)會產生大量的候選者集(2)須要不斷的掃描數據庫check候選者集合C來求得頻繁項目集。
是否有不產生candidate集合的方法挖掘完整的頻繁項目集集合呢?
Frequent-pattern growth(FP-growth)就是這樣一種算法。
FP-growth基本思想是分支(divide and conquer),首先,將表明頻繁項目(frequent items)的數據庫壓縮到一顆FP-tree中,這棵FP-tree仍然保留了完整的項目集關聯信息。而後,它將這種被壓縮的數據庫(FP-tree)分割成一組條件數據庫(一種特殊的投射數據庫),每個條件數據庫都和一個頻繁項目或者模式碎片關聯(pattern fragment),而後分別挖掘之。