【Python机器学习】FP-growth算法——FP树:用于编码数据集的有效方式
相比于Apriori算法,FP-growth算法是一种更快的频繁项集发现算法。它基于Apriori构建,但在完成相同任务时采用了一些不同的技术。这里的任务是将数据集存储在一个特定的称作FP树的结果之后发现频繁项集或者频繁项对,即常在一块出现的元素项的集合FP树。这种做法使得算法的执行速度要快于Apriori,通常性能要好两个数量级以上。
从数据集中获取信息最常用的两种方法分别是频繁项集与关联规则。FP-growth算法能够更有效地发现频繁项集,但不能用于发现关联规则。
FP-growth算法只需要对数据库进行两次扫描,而Apriori算法对于每个潜在的频繁项集都会扫描数据集判定给定模式是否频繁,因此FP-growth算法的速度要比Apriori算法快。在小规模数据集上,这不是什么问题,但当处理更大数据集时,就会产生较大问题。FP-growth只会扫描数据集两次,它发现频繁项集的基本过程如下:
1、构建FP树;
2、从FP树中挖掘频繁项集。
FP-growth算法的优缺点:
优点:一般要快于Apriori
缺点:实现比较困难,在某些数据集上性能会下降
使用数据类型:标称型数据。
FP-growth算法将数据存储在一种称为FP树的紧凑数据结构中,FP代表频繁模式。一棵FP树看上去与计算机科学的其他树结构类似,但是它通过链接来连接相似元素,被连起来的元素项可以看成一个链表,比如:
同搜索树不同的是,一个元素项可以在一颗FP树中出现多次。FP树会存储项集的出现频率,而每个项集会议路径的方式存储在树中。存在相似元素的集合会共享树的一部分。只有当集合之间完全不同时,树才会分叉。树节点上给出集合中的单个元素及其在序列中的出现次数,路径会给出该序列的出现次数。
相似项之间的链接即节点链接,用于快速发现相似项的位置。下面是一个简单例子:
上表就是上图所示FP树的数据。其中z元素项出现了5次,集合{r,z}出现了1次。于是可以得出结论:z一定是自己本身或者和其他符号一起出现了4次。那么在z的其他可能性中,集合{t,s,y,x,z}出现了两次,集合{t,r,z,y,x}出现了1次。元素项z的右边标的是5,表示z出现了5次,其中刚刚已经列出了4次,所以它一定单独出现过一次。
FP-growth算法的工作流程如下:首先构建FP树,然后利用它来挖掘频繁项集。为构建FP树,需要对原始数据集扫描两遍。第一遍对所有元素项的出现次数进行计数,第二遍只考虑频繁元素。
FP-growth的一般流程:
1、收集数据:使用任意方法
2、准备数据:由于存储的是集合,所以粗腰离散数据。如果要处理连续素具,需要将它们量化为离散值
3、分析数据:使用任意方法
4、训练算法:构建一个FP树,并对树进行挖据
5、测试算法:没有测试过程
6、使用算法:可用于识别经常出现的元素项,从而用于制定决策、推荐元素或进行预测等应用中。