FP-tree两个主要步骤:
1. 利用事务数据库中的数据构造FP-tree;
2. 从FP-tree中挖掘频繁模式。
具体过程:
1.扫描数据库一次,得到频繁1-项集。
2.把项按支持度递减排序。
3.再一次扫描数据库,建立FP-tree。
为了方便大家理解,下面附上一个简单的例子。
给出一个具体的事务数据库:
利用出现的次数计算频繁1-项目集。
重新调整事务数据库:(在这里是对于每一个Items进行调整,把支持度高的放在前面)
创建根结点和频繁项目表:
加入第一个事务(I2,I1,I5):
加入第二个事务(I2,I4),在I2冒号后面数字是其出现的次数,其他也是:
加入第三个事务(I2,I3),注意此时I2后面的数字为3:
加入第四个事务(I2,I1,I4),I1后面加1变为2:
加入第五个事务(I1,I3):
........依次加入所有的事务:
然后生成FP-tree,从支持度最小的I5开始看:
根据这个得到I5的:
条件模式基可以理解为,以I5为结点所有路径的情况,删除I3是因为I3达不到I5的最小支持度:
然后看I4:
然后考虑I3,I2后面的4是根据总的I2:7减去不是I3的分支数,即可得到:
最后考虑I1:
算法结束,频繁项集就得到了。
在实际项目中,可以通过增大最小支持度来减小树的复杂度。
FP-tree优点:
FP-tree 算法只需对事务数据库进行二次扫描。
避免产生的大量候选集。
FP-tree缺点:
要递归生成条件数据库和条件FP-tree,所以内存开销大只能用于挖掘单维的布尔关联规则。