介绍
Apriori算法是一个经典的数据挖掘算法,Apriori的单词的意思是"先验的",说明这个算法是具有先验性质的,就是说要通过上一次的结果推导出下一次的结果,这个如何体现将会在下面的分析中会慢慢的体现出来。Apriori算法的用处是挖掘频繁项集的,频繁项集粗俗的理解就是找出经常出现的组合,然后根据这些组合最终推出我们的关联规则。
Apriori算法原理
Apriori算法是一种逐层搜索...
分类:
编程语言 时间:
2015-08-28 13:33:33
阅读次数:
252
Apriori算法的Java实现,源码放在github上,大家有兴趣可以下下来看看, 源码地址:
https://github.com/l294265421/algorithm-apriori
实现该算法主要阅读的书籍是:
《Web数据挖掘》第二版,作者:Bing Liu,译者:俞勇...
分类:
编程语言 时间:
2015-08-02 01:05:56
阅读次数:
229
apriori算法是关联规则挖掘中很基础也很经典的一个算法,我认为很多教程出现大堆的公式不是很适合一个初学者理解。因此,本文列举一个简单的例子来演示下apriori算法的整个步骤。 下面这个表格是代表一个事务数据库D,其中最小支持度为50%,最小置信度为70%,求事务数据库中的频繁关联规则。T...
分类:
编程语言 时间:
2015-07-24 20:39:28
阅读次数:
268
引言:在关联分析中,频繁项集的挖掘最常用到的就是Apriori算法。Apriori算法是一种先产生候选项集再检验是否频繁的“产生-测试”的方法。这种方法有种弊端:当数据集很大的时候,需要不断扫描数据集造成运行效率很低。
而FP-Growth算法就很好地解决了这个问题。它的思路是把数据集中的事务映射到一棵FP-Tree上面,再根据这棵树找出频繁项集。FP-Tree的构建过程只需要扫描两次数据集。...
分类:
编程语言 时间:
2015-06-28 12:49:56
阅读次数:
287
前言:数据挖掘中的关联分析可以分成频繁项集的挖掘和关联规则的生成两个步骤,而Apriori算法是找频繁项集最常用到的一种算法。
关于关联分析和频繁项集请见:什么是关联分析?
中言:我们还是利用购物篮的例子来讲述Apriori算法的思路。
购物篮信息如下:
TID
Items 001
Cola, Egg, Ham
002
Cola, Diaper, Bee...
分类:
编程语言 时间:
2015-06-27 16:33:20
阅读次数:
214
Apriori在数据挖掘中是经典的频繁项集挖掘算法,其主要思想就是如果某个项集不频繁,则任何包含此项集的项集一定不频繁。而今天要实现的增量式的Apriori算法,有点像分布式的Apriori,因为我们可以把已挖掘的事务集和新增的事务集看作两个互相独立的数据集,挖掘新增的事务集,获取所有新增频繁集,然后与已有的频繁集做并集,对于两边都同时频繁的项集肯定全局频繁,而只有一边频繁的项集则需要统计其在两边的...
分类:
编程语言 时间:
2015-06-13 12:57:43
阅读次数:
159
这个问题在于实现Apriori算法的时候需要求各个频繁集的关联规则,而这时需要在求得最大的频繁集中求各个频繁集的真子集。然后在实现这一步的时候被卡主了,第一反应是用递归完成,但是面对数据挖掘中庞大的项目集,递归显然很低效,而且估计跑不起来,所以用迭代的方法显然比较靠谱。网上非递归的方法有用二进制加法...
分类:
编程语言 时间:
2015-06-12 09:47:04
阅读次数:
315
FP-Tree算法FPTree算法:在不生成候选项的情况下,完成Apriori算法的功能。FP-Tree:就是上面的那棵树,是把事务数据表中的各个事务数据项按照支持度排序后,把每个事务中的数据项按降序依次插入到一棵以NULL为根结点的树中,同时在每个结点处记录该结点出现的支持度。条件模式基:包含FP...
分类:
其他好文 时间:
2015-06-08 23:03:59
阅读次数:
175
上篇说明了原理,这篇就直接上核心代码了~
代码比较长,所以理解可能有点麻烦,核心思路就是计算选择的维度后遍历数据,逐步进行循环计算置信度,并淘汰每次循环后的最低值。
这里有一点要注意的,我一开始想用arraylist构造一个堆栈结构进行数据遍历的存储跟计算,因为这样效率比较高。。
但是后来发现,那么做的话,如果以后想要对类型跟因子的种类、数量进行修改的话,需要对代码进行大量重构才能实...
分类:
编程语言 时间:
2015-05-28 09:34:33
阅读次数:
245
apriori算法的计算量太大,如果数据集略大一些,会比较慢,非常容易内存溢出。
我们可以算一下复杂度:假设样本数有N个,样本属性为M个,每个样本属性平均有K个nominal值。
1. 计算一项频繁集的时间复杂度是O(N*M*K)。
2. 假设具有最小支持度的频繁项是q个,根据它们则依次生成一项频繁集,二项频繁集,....,r项频繁集合,它们的元素数量分别是:c(q, 1), c(q...
分类:
编程语言 时间:
2015-05-24 21:55:40
阅读次数:
377