目录
逐层发现算法Apriori
需要多次扫描数据,对于大数据量不友好
主要步骤
1. k=1
2. 统计每个k项候选集的支持度,找出频繁的k项集:Lk
3. 利用频繁的k项集生成k+1项候选集(Candidate itemset ):Ck+1
4. k=k+1; 转至步骤2
如何生成候选项集?
性质1:给定最小支持度阈值minsup,一个频繁项集的所有非空子集 都是频繁的。
Apriori 剪裁规则: 若存在某些项集是不频繁的,则这些项集的任何超集都是不频繁的,因而无须生成和测试。
假设每个Lk 中的项集的项都是按顺序排列的
步骤1: 两两组合Lk 中项集生成Ck+1 --如p、q两个k项集,前k-1项相同,p.k < q.k,生成k+1项集(p.1,p.2,...,p.k-1,p.k,q.k)
步骤2: 裁剪(pruning)-- 删除那些包含非频繁k项集的(k+1) 项集
无候选集的发现算法FP-growth
通常,FP树的大小比未压缩的数据小,因为购物篮数据的事务常常共享一些共同项,在最好的情况下,所有的事务都具有相同的项集,FP树只包含一条节点路径,当每个事务都具有唯一项集时,导致最坏情况发生,由于事务不包含任何共同项,FP树的大小实际上与原数据的大小一样,然而,由于需要附加的空间为每个项存放节点间的指针和技术,FP树的存储需求增大。
扫描两次数据即可
主要步骤
1. 扫描交易数据库,找出所有频繁单项 (第一次扫描)
2. 按照支持度降序排列所有频繁单项,得到f-list
3. 扫描交易数据库,构建FP-tree T (第二次扫描)
4. 调用mineTree(T, }
参考笔记
《数据挖掘:概念与技术 原书第三版》韩家炜 P167