FP树
Apriori算法需要产生大量候选项集,重复计算support_count
把事务集中关联信息及count记录在树上,扫描树即可
FP树主要分成两步 = FP树构建 + FP树挖掘
构造初始FP树 => 挖掘FP树获得条件模式基 => 构造条件FP树 => 挖掘条件FP树 => ... 如此递归直至树只有单路径
以具体例子说明,事务集D为
{I1, I2, I5}
{I2, I4}
{I2, I3}
{I1, I2, I4}
{I1, I3}
{I2, I3}
{I1, I3}
{I1, I2, I3, I5}
{I1, I2, I3}
假设最小支持度计数=2
构造FP树
输入:事务集D
输出:FP树
对频繁1项集按support_count排序
I2:7 ; I1:6 ; I3:6 ; I4:2 ; I5:2 (count都>=2,无需排除)
事务集D就按照排序顺序依次处理,构造FP树(类似于字典树构造,但多了表头) α={I2,I1,I3,I4,I5}
挖掘FP树
对FP树,从I5 => I2 每项从树中找到其前缀路径事务集,构造条件FP树,直至树为单路径或空
(1)β={I5:2} D1= {I2, I1: 1} {I2, I1, I3: 1} (每个事务后面都省略了I5:1, 受其制约, count取最小值1)
对D1中1项集排序: I2:2 ; I1:2 (I3:1不满足最小支持度计数,排除掉)
使用D1构造条件FP树(太简单了表头不画了) α={I2,I1}
此时为单路径,此时α的每种组合αk => 产生模式β=β∪αk ,其support_count为β中结点最小的计数
因此得到频繁模式: {I2,I5:2} {I1,I5:2} {I2,I1,I5:2}
(2)β={I3:6} D1={I2,I1:2} {I2:2} {I1:2}
排序:I2:4 I1:4
构造条件FP树 α={I2,I1}
此时非单路径,需要递归
<1>β={I3,I1:4} D2={I2:2} 构造FP树
单路径=> 频繁模式{I3,I1,I2:2} {I3,I1:4}
<2>β={I3,I2:4} D2={} 不构造FP树
=>频繁模式{I3,I2:4}
(3)后面的I4 I2 I1类似 ...
因为一些东西本来就懂了,因此没有细讲,只是为了把FP树递归构造过程理顺
具体看书《数据挖掘概念与技术》P168