增量关联规则挖掘算法:canonical-order tree

来源:互联网 发布:启动gta5需要网络连接 编辑:程序博客网 时间:2024/06/05 02:01

1.算法衍生过程

Leung等提出的一种基于树结构所改进的算法:CANTree(canonical-order tree),这种算法不用考虑候选项集,而且解决了FELINE和AFPIM所存在问题。CanTree的构建只需一次数据库扫描,这一点不同于需要两次数据库扫描的FPTree。在CanTree中,项是根据某种序列排序的,这种序列可以由用户在挖掘过程之前或者挖掘过程中决定。

2..CanTree的构建

首先,要对原始数据库的事务项构建树结构,构建过程描述如下:
1)用户指定某一特定的自然序列(可以是自然序、字母序或者用户自己设定的序列)设计为一个项目头表
2)创建根节点root
3)扫描数据库,并将每一条事务的记录按照项目头表进行排序,接着对每一个数据项x进行树的节点插入操作,操作过程如4)
4)依次遍历与x同名节点的路径,若x对应的已经建立的同名节点的父节点与执行插入的事务中项x的前项名相同,则将与x 项同名的节点的计数增加, 否则创建一个新的节点 N1, 新节点 N1的父节点应该与插入事务中的x项的前项名相同;依次完成(4)直到所有的事务数据全部插入完成。

下面用一个实例来构建一颗CanTree。
数据库如下表所示:
表1 数据库表
这里写图片描述
下面开始树的构建:

这里写图片描述
这里写图片描述
图1 从t1到t8的CanTree渐进构建过程
由此,CanTree的树结构构建完成。

3. 频繁项集的挖掘过程

频繁项的挖掘过程与FP-Growth的过程相同。

具体挖掘过程如下:
1.从CanTree自下而上挖掘,首先找到最下面的item,构建每个item的条件模式基。
顺着CanTree树,找出所有包含该item的前缀路径,这些前缀路径就是该item的条件模式基(CPB);
所有这些CPB的频繁度(计数)为该路径上item的频繁度(计数)。
2.累加每个CPB上的item的频繁度(计数),过滤低于阈值的item,构建FP-tree
3.递归的挖掘每个条件FP-tree,累加后缀频繁项集,直到找到CanTree为空或者CanTree只有一条路径(只有一条路径情况下,所有路径上item的组合都是频繁项集)

4.复杂度和局限性

CanTree显著减少运算时间,因为它查找可合并的路径比较简单,且只需要向上的路径遍历。构建CanTree的运算时间是O(mn),m是事务项的最大长度,n是事务的个数。
尽管CanTree提供了一个简单的单次构建过程,与FP-Tree大小相比,它显然占的空间是比较大的。为了缩减树的大小,在后续的过程分类中树的调整过程可以被实施。
通过分布式运算分类,CanTree的这种构建方式可以有效地减少运算时间。


注:canTree虽然考虑了FP-Growth算法在增量时由于节点变更,导致FP-Tree的某些节点序列需要调整,这严重增加了算法的时间复杂度,不删除非频繁项的节点,从而使得增量数据中使得某些非频繁项由于计数的改变,而使得变成了频繁项。可是在选取项头表序列对之后挖掘频繁项集的影响很大,如果选取不当,将会导致这个算法的效率远远低于FP-Growth。针对于这个问题,正在思考如何改进。

0 0