手推FP-growth (频繁模式增长)算法------挖掘频繁项集
一.频繁项集挖掘为什么会出现FP-growth呢?
原因:这得从Apriori算法的原理说起,Apriori会产生大量候选项集(就是连接后产生的),在剪枝时,需要扫描整个数据库(就是给出的数据),通过模式匹配检查候选集合(为的是找到满足最小支持度的项)。候选产生过程带来的就是昂贵的代价开销,所以FP-growth就出现了。
二.FP-growth(Frequent-Pattern Growth) :频繁模式增长
1.数据库(给出的数据)第一次扫描和Apriori一样,找出频繁1项集的集合,统计各个项的支持度计数(出现的次数)。设置最小支持度,需要将集合的各个项按支持度计数由(大->小)排序。假设排序好的集合为L。
2.构造FP树。首先,创建根结点(为NULL)。第二次扫描数据,将每个事务中的项按L的顺序,在FP树上构建分支。这里需要注意的是,在为新事务建分支的时候,沿共同前缀上的每个结点的计数加1,为后缀之后的项创建结点。例如:事务1:建的分支为:1,2,3。事务2:1,2,5。则FP树新分支(为事务2)需要与事务1共用(1,2)前缀,5则新建结点。此时(1,2)的支持度都相应的变为了2。结点3和5依旧是1
3.当FP树完成,数据频繁模式的挖掘就变为了FP树的挖掘。
4.FP数挖掘的核心流程:从L的最小支持度的项(后缀模式)开始---->构造它的条件模式基(由FP树中与该后缀模式一起出现的前缀路径集组成)--->构造这项的条件FP树,之后递归L中的各项------>产生频繁项集(后缀模式和条件FP树产生的频繁模式连接实现)
5.需要注意的问题:
条件模式基:需要注意--->各个项出现的支持度计数(这里会出现多个集合,因为后缀模式可能会有多个分支)要和当前的后缀模式的支持度计数保持一致。
条件FP树:需要注意--->将条件模式基产生的多个集合合并(将相同前缀路径的各个结点的支持度累计加1,这里去掉不符合最小支持度的结点)。
产生频繁模式:将条件FP树产生的各个集合与后缀模式连接。(如果多个集合中出现重复的项,需累加计数再与后缀模式连接)例如:条件FP数产生的集合:(a:4,b:3),(b:3),假设此刻的后缀模式为c 。则产生的频繁项集为:(a:4,c:4),(b:6,c:6),(a:4,b:3,c:3)