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),而后分别挖掘之。