- FP增长算法:使用FP树的紧凑数据结构组织数据,并从中提取频繁项集
- FP树表示法:FP树是一种输入数据的压缩表示,把每个事务映射到FP树中的一条路径来构造;步骤:
- 扫描一次数据集,确定每个项的支持度,事务数据去除非频繁项,将事务中的项按支持度降序
- 第二次扫描数据集,构建FP树,读入第一个事务,路径上结点的频数计数为1
- 继续读入事务,如果有共同的前缀项则前缀项合并,计数+1,没有则另开一条路径
- 继续该过程直到所有事务映射到FP树的一条路径
- *我们第一次扫描数据,得到所有频繁一项集的的计数。然后删除支持度低于阈值的项,将1项频繁集放入项头表,并按照支持度降序排列。接着第二次也是最后一次扫描数据,将读到的原始数据剔除非频繁1项集,并按照支持度降序排列。
- FP树的特点:
- FP树的大小比未压缩的数据小,因为事务有共同项;而当事务不包含任何共同项时,FP树的大小与原数据一样且还有结点间的指针和计数
- FP树还包含一个连接具有相同项的结点的指针列表,有助于快速的访问树中的项(虚线指针不代表实际的联系)
- FP树的频繁项集的产生:FP增长是一种自底向上方法探索树,由树产生频繁项集的算法
- FP增长采用分治策略将一个问题分解为较小的子问题,从而发现特定后缀结尾的所有频繁项集;
- 步骤:https://www.cnblogs.com/zhengxingpeng/p/6679280.html
- 收集包含特定结点结尾的所有路径,即前缀路径
- 特定项的结点的支持度计数相加得到项支持度计数
- 验证单个特定结尾的结点是频繁的,那么两个项是否频繁呢?为了解决子问题,将前缀路径转化为条件FP树:
- 更新前缀路径上的支持度计数,某些事务不包含特定结尾结点
- 删除特定结尾结点
- 更新前缀路径上的支持度计数后,某些项不再是频繁的了,可以去除
- 从特定结点为结尾的条件FP树中找到与其组合的结点,以其作为结尾开始二阶条件FP树(第3步迭代)
- *当然,另一种方法就是上面所说的发现以特定结点为结尾的极大频繁项集,然后以其为结尾组合成k-频繁项集(路径顺序无关,主要是统一路径上在一起出现了)
- *每一次递归,都要通过更新前缀路径中的支持度计数和删除非频繁的项来构建条件FP树;由于子问题是不相交的,所以FP增长不会产生重复的项集
- *FP Tree算法改进了Apriori算法的I/O瓶颈,巧妙的利用了树结构,这让我们想起了BIRCH聚类,BIRCH聚类也是巧妙的利用了树结构来提高算法运行速度。利用内存数据结构以空间换时间是常用的提高算法运行时间瓶颈的办法。在实践中,FP Tree算法是可以用于生产环境的关联算法,而Apriori算法则做为先驱,起着关联算法指明灯的作用。除了FP Tree,像GSP,CBA之类的算法都是Apriori派系的。
- FP树表示法:FP树是一种输入数据的压缩表示,把每个事务映射到FP树中的一条路径来构造;步骤: