您的位置:首页 > 其它

挖掘频繁模式、相关和关联(1)

2010-04-07 00:07 232 查看
频繁模式(Frequent Pattern)是频繁出现在数据集中的模式(如项集,子序列和子结构)。频繁模式一般可以用关联规则表示如何判断模式是否频繁,有两个基本的度量:

支持度(support):该模式在所有被考察的对象中的占比,表示了该模式(规则)的有用性;

置信度(cofidence):由规则的前因推出后果的可信度,表示了规则的确定性;

设规则为A->B,则支持度和置信度可以表示如下:

support(A->B) = P(AUB)

confidence(A->B) = P(A|B)

根据上面的定义,可以得出挖掘关联规则(A->B)的问题可以归结为挖掘频繁项集(因为这里的概率运算都可以用满足条件的项的出现次数和总个数的比表示):

1. 找出所有的频繁项集;

2. 有频繁项集产生强关联规则;

将可以看到,第一步的开销远大于第二步,所以性能将由第一步决定。

挖掘海量数据的主要挑战是这种挖掘常常产生大量满足最小支持度阈值的项集,因为如果一个项集是频繁的,那么它的每个子集也是频繁的。比如说包含100个项集的子集就远远超出了目前计算机的储存限制。为了克服这个问题,提出了比频繁项集和极大频繁项集的概念。

闭频繁项集:如果不存在真超项集Y使得Y与X在项集S中有相同的支持度计数,则称X在S中试闭的。项集X是S中的闭频繁项集,如果X在S中是闭的和频繁的;

极大频繁项集:如果X是频繁的,并且不存在超项集Y使得X属于Y,并且Y在S中是频繁的。

闭频繁项集的集合包含了频繁项集的完整信息,但是从极大频繁项集只能知道一个特定的项集是否是频繁的,而无从得知其实际支持度计数。

下面是从事务或关系数据集中挖掘频繁项集的方法。

Apriori算法---使用候选产生发现频繁项集

Apriori算法使用逐层搜索的迭代方法,即使用包含了k个元素的项集K来探索K+1项集。每产生一个层次的项集,需要扫描整个项集一遍。为了提高逐层扫描的效率,使用如下的Apriori
规则来压缩搜索空间。

Apriori性质:频繁项集的所有非空子集也必须是频繁的

该性质意味着"大"频繁项集可以有"小"频繁项集来产生。

设定L(k)是指每个项包含k个元素的频繁项集,意味着k层的扫描。Apriori算法
主要有两步,可以表示如下:

连接步:假设已经得到L(K-1),那么将L(K-1)与自身连接产生L(k)的候选集合。这一步主要是集合的合并运算,施加一定的限制,使得连接产生的是K个元素;

剪枝步:得到候选集合后,应用Apriori性质。对候选集合的每一个项集,检查它的k-1子集是否在L(K)中,如果有不在的情况,则从候选项集中删除此项集。最终得到L'(k),然后扫描整个项集,得到L'(k)每个项集的支持度计数,筛选即可得到L(k);

连续执行这两步,就可以得到所有的频繁项集:L(1),L(2),…,L(n)。

现在又很多的方法可以用来提高Apriori算法的效率,如基于散列的技术、事务压缩、划分、抽样、动态项集技术等。其中“划分”方法类似与分治法,将数据集划分成n份,第一步得到局部的频繁项集,第二部将局部频繁项集合并得到全局频繁项集候选,最后扫描整个项集,删除候选中不符合最小支持度计数的从未得到频繁项集。第一步中使用一种特殊的数据结构使得只需要扫描一遍局部项集就可以得到所有的局部频繁项集。至于局部项集的划分以每个划分可以放入内存为标准。

不候选产生挖掘频繁项集


Apriori的候选-产生机制显著压缩了候选项集的大小,并导致的很好的性能,但是也有一些缺点,比如说当数据量很大的时候,候选集将会非常的大(划分方法可以避免这一点);并且需要多次扫描数据库(划分应该是一个非常好的方法)。所以一种称作“频繁模式增长”或简称FP增长(FP Growth)的方法应运而生了。它采用分治策略,将提供频繁项的数据库压缩到一颗频繁模式树中,但仍保留项集的相关信息。然后将压缩后的数据库划分成一组条件数据库
,每个关联一个频繁项或模式段,并分别挖掘每个条件数据库。其主要的过程描述如下:

1.构造FP树和项头表 FP树包含了原始数据的关联关系和计数信息。

1.1 首先遍历一遍数据库,得到1项集的计数信息,并按减序排列成L


1.2 初始化一颗树T,根节点为NULL;

1.3 第二次遍历数据库,对其中的每一项,先按照L的顺序重新组织项里面的元素,得到E'。然后查找T,检查T是否已经有一条路径为项E',若没有,则根据情况增加T的节点。并且将路径上各元素的计数加1;

1.4 对于每一项得到的叶节点,更新项头表:如果叶节点为新加入的,则添加指针到该节点对应元素的桶的末尾。

2.由FP树得到条件模式基并构造其FP树 条件模式基实际上是由FP树中的后缀模式以及与其一起出现的前缀路径集组成。

2.1 从L中的最后一个元素e开始,以e作为后缀开始构造FP树。首先沿着项头表对应的桶得到其在T中叶子节点的位置,向上回溯就会得到其前缀路径集:以e为结尾的所有路径的集合,并携带此路径的计数信息。路径集和e就构成了e的条件模式基;

2.2 按照第一步的方法,从条件模式中构造它的FP树。这里就包括了多个FP树,称作条件FP树;

2.3 条件FP树的所有路径上的元素的组合和它的后缀构成了频繁模式集;

我对这个算法的理解有几点是:

1. 数据库中的项需要根据1项集的计数从大到小排序,保证后续FP树的构造过程,使得构造过程非常简单易懂;

2. 由第一步的FP树构造过程可以看出,对于元素e,如果把在1项集中计数比e大的元素集合称作S,那么S中的元素只可能出现在e的前缀路径集中;

3. 由第2点可以看出
从计数小的元素开始寻找条件模式基
的原因。这样带来的一个好处是计数大的后缀模式对应的频繁模式中不用考虑计数比自己小的元素e,因为包含e的频繁模式已近都在前面被找出来了;

FP增长方法适当变形也可以适用于大型数据库。它方法可以利用递归方法实现,有时间的话我倒想实现一个C++语言的版本看看,挺有意思的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: