数据挖掘十大算法翻译——4Apriori算法

来源:互联网 发布:开淘宝货源哪里找 编辑:程序博客网 时间:2024/05/03 14:28

1算法描述

数据挖掘方法中最流行的方法之一就是从事务数据集中找到频繁的物品集合并且推到出关联规则。由于组合的复杂性,找到一个频繁的项集(拥有高于或者等于一个用户的特定最低需求的食物集合)并不是一件容易的事情。一旦获取了物品集,要产生大于或者等于用户特定最小信心的信心的关联规则也很容易产生。
Apriori 是一个使用候选集找到频繁项集的种子算法。使用“如果一个项集不是频繁的,它的任何父集也不是是频繁”这样的项集的非单调性是它作为层级完全搜索的特点。为了方便,Apriori假设有k个频繁物品集合的集合为F_k,并且他们的候选为C_k. Apriori首先扫描数据库,通过累加的方式寻找大小为1的频繁项集然后收集其中那些满足最小支持需求的。然后以下面的三个步骤迭代,并且提取所有项集。
1. 从大小为k的频繁项集中产生C_k+1,大小为k+1的候候选的频繁项集。
2. 扫描数据库并且计算每个候选频繁项集的支持。
3. 把满足F_k+1 的最小支持需求的频繁项集相加。
Apriori算法在表格3中有展示,第三行的aprori-gen从F_k中得到C_k+1,具体步骤如下:
1 Join步骤,通过将两个大小为k的频繁项集相合并生成R_k+1,最初的候选的大小为k+1的频繁项集,P_k和Q_k的前k-1个元素是相同的。
这里写图片描述
2. 修剪步骤:检查是否所有在R_k+1 中的大小为k项集都是频繁的,并且通过移除不满足R_k+1的项集来生成C_k+1.因为任何k大小的不满足频繁的条件的C_k+1的子集不可能成为大小为K+1的项集的子集。
在第五行的函数子集找到了所有包括事务t的频繁项集。Apriori可以通过浏览数据库只计算这样生成的候选的项集的频率。
很明显,当最大的频繁项集的大小是k_max的时候,Apriori算法最多扫描K_max+1 次数据库。
通过减少候选集的数目,Apriori实现了较好的性能。然而,在有很多频繁项集,大项集,和很低的最小支持的情况下,它仍然会由于产生了大量的候选集和为了检查候选项集的大集合二反复扫描数据库而产生巨大的损耗。
这里写图片描述
表3
事实上,要生成2^100个候选项集才能获取大小为100的频繁项集。

2算法的影响

大多数在数据挖掘中被频繁应用的技术诸如决策树,分类规则和聚类的模式发现算法已经在机器学习研究团体中有了发展。频率模型和关联规则挖掘对于这个传统而言是少数的几个例外。这样的技术的映入加快了数据挖掘的研究,它的影响也是巨大的。这个算是是简单易实现的。使用Apriori类似的算法是数据挖掘工作者首先会进行的手段。

3目前和未来的研究

自从Apriori算法第一次被介绍和经验的积累,有很多人对设计更高效的频繁项集的挖掘算法的设计进行了尝试。他们中的很多使用Apriori一样的产生候选的思想。它们包括了基于哈希的技术,分割,抽样并且使用虚拟的数据格式。基于哈希的技术能够减少候选项集的大小。每个项集被哈希到一个相应的桶(bucket)中。由于通可以容纳不同的项集,如果塔尔数目小于最小支持,这些桶中的项集可以从候选集中移除。分隔可以将一整个挖掘问题风格为n个较小的问题。数据集被分为n个没有重叠的块,这样每个分块都能够适合主存并且能够独立的进行挖掘。由于任何项集度频繁项集至少需要在一个分块中成为频繁项集,这样找到的所有频繁项集都作为候选,最后通过访问一次所有数据就能完成计算。挖掘一个随机抽样的小子集的抽样是简单的。由于我们无法保证能偶找到所有频繁项集,常用的方法是使用一个更低的支持阈值。在准确和效率之间的必须有所取舍。Apriori使用水平时间格式,也就是说频繁项集与每个事务有关。使用垂直时间格式是使用一个不同的格式,在这种格式中事务ID(TIDs)与每个项集有关。使用了这样的格式。可以通过使用TIDs的交叉来进行挖掘。支持计数就是该项集的TID集合的长度。这样就不用再去扫描数据库了,因为TID集携带完整的所需要计算支持的信息。
对于Apriori算法最杰出的提升就是被叫做FP-growth(频率模式增长)的方法。这个方法成功的消除了候选产生。它使用一个分而治之的策略通过(1)强代表频繁项集的数据库压缩为一个称为FP-tree(frequent pattern tree)的结构,这个树保留了所有必要的信息(2)将压缩的数据库风味一些类条件数据库,其中每个与一个频繁项集有关并且单独信息挖掘。这样的方法值扫描数据库两次。第一次扫描,所有频繁项集和他们的支持计数(频率)被求出。并且他们按照每个事务的支持计数的降序排列。在第二次扫描中,每个事务中的项被合并到一个前缀树并且在不同事务中一起出现的项(节点)被计数。每个节点都和项与他的计数有关。有相同表情的节点通过叫做node-link的指针相互连接。由于项按照频率的降序排列,靠近前缀树根部的节点被更多的事务共享,这样在所有必要的信息中产生一个非常紧凑的表示。通过选择一个在增序频率和通过递归的在条件FP-tree调用自己抽取包含选择的项的频繁项集,模式增长算法适用于FP-tree。FP-growth相比较于原来的Apriori有一个量级的性能的提升。
关于频率模式挖掘的扩展有一些其他的方面。最主要的一个包括了下列内容:(1)项的合并分类法:使用分类法使得,即使当使用基本层次的概念产生的只有频率项集时,也可能提取到通过高层次概念表达的频繁项集。(2)增加的挖掘:在这个试着,假设数据不是静态的,一个新的事物的实例保持增加。新的算法保证了更新频繁项集不是从零开始的(3)对项使用数字的值:当项与一个连续的数值相关的时候,除非让这些数字离散化,否则当前的算法是无法满足的。子空间聚类的方法能够获得一个最优的每个项在每个项集之间的间隔。(4)使用其他非频率的测度,例如信息增益x^2值:对于寻找不同的模型,这些值是很有用的,但是不幸的是它不满足非单调的性质。然而这些这些测度有一个好的性质:关于它们的参数是凸的,通过一个模式估计它们的父集时的下界是可能的,这样就可以高效的修剪没有希望的模式。AprioriSMP就使用了这样的原则。(5)使用丰富的表达而不是项集:很多算法已经适用于序列了。树和图使得挖掘能够从一个更复杂的数据结构张开(6)封闭的项集:一个频繁项集是封闭的,如果它不包含任何其他的频繁项集。这样,一旦封闭项集被发现了,所有频繁项集能够从他们之中派生出来。LCM是一个能够最有效发现封闭项集的算法。

0 0
原创粉丝点击