数据挖掘-关联分析 Apriori算法和FP-growth 算法
Posted junge-mike
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据挖掘-关联分析 Apriori算法和FP-growth 算法相关的知识,希望对你有一定的参考价值。
?1.关联分析概念
关联分析是从大量数据中发现项集之间有趣的关联和相关联系。
?定义:
1、事务:每一条交易称为一个事务,如上图包含5个事务。
2、项:交易的每一个物品称为一个项,例如豆奶,啤酒等。
3、项集:包含零个或多个项的集合叫做项集,例如{尿布,啤酒}。
4、k?项集:包含k个项的项集叫做k-项集,例如 {豆奶,橙汁}叫做2-项集。
5、支持度计数:一个项集出现在几个事务当中,它的支持度计数就是几。例如{尿布, 啤酒}出现在事务002、003和005中,所以 它的支持度计数是3。
6、支持度:支持度计数除于总的事务数。例如上例中总的事务数为5,{尿布, 啤酒}的支持度计数为3,所以它的支持度是 3÷5=60%,说明有60%的人同时买了尿布, 啤酒。
7、频繁项集:支持度大于或等于某个阈值的项集就叫做频繁项集。例如阈值设为50%时,因为{尿布,啤酒}的支持度是60%,所以 它是频繁项集。
8、前件和后件:对于规则{尿布}→{啤酒},{Diaper}叫做前件,{啤酒}叫做后件。
9、置信度:对于规则{尿布}→{啤酒},{尿布,啤酒}的支持度计数除于{尿布}的支持度计数,为这个规则的置信度。
例如规则{尿布}→{啤酒}的置信度为3÷3=100%。说明买了尿布的人100%也买了 啤酒。
10、强关联规则:大于或等于最小支持度阈值和最小置信度阈值的规则叫做强关联规则。
?频繁项集(frequent item sets)是经常出现在一块儿的物品的集合.
?关联规则(association rules)暗示两种物品之间可能存在很强的关系。
?1)支持度
?Surpport(A->B)= P(AB) ,支持度表示事件A 和事件B 同时出现的概率。
?2)置信度
?Confidence(A->B) = P(B/A) = P(AB)/ P(A) ,置信度表示 A 事件出现时,B 事件出现的概率。
?关联分析的最终目标就是要找出强关联规则。
?2.Apriori算法原理
?Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。算法的名字基于这样的事实:算法使用频繁项集性质的先验知识,正如我们将看到的。Apriori使用一种称作逐层搜索的迭代方法,k-项集用于探索(k+1)-项集。首先,找出频繁1-项集的集合。该集合记作L1。L1 用于找频繁2-项集的集合L2,而L2 用于找L3,如此下去,直到不能找到频繁k-项集。找每个Lk需要一次数据库扫描。
先验定理:如果一个项集是频繁的,则它的所有子集一定也是频繁的。
如图所示,假定{c,d,e}是频繁项集。显而易见,任何包含项集{c,d,e}的事务一定包含它的子集{c,d},{c,e},{d,e},{c},{d}和{e}。这样,如果{c,d,e}是频繁的,则它的所有子集一定也是频繁的。
如果项集{a,b}是非频繁的,则它的所有超集也一定是非频繁的。即一旦发现{a,b}是非频繁的,则整个包含{a,b}超集的子图可以被立即剪枝。这种基于支持度度量修剪指数搜索空间的策略称为基于支持度的剪枝。
这种剪枝策略依赖于支持度度量的一个关键性质,即一个项集的支持度绝不会超过它的子集的支持度。这个性质也称支持度度量的反单调性。
Apriori算法
优点:易编码实现。’
缺点:在大数据集上可能较慢。
适用数据类型:数值型或者标称型数据。
3.算法实现:
数据集为:总共有4 分
1, 3, 4 |
2, 3, 5 |
1, 2, 3, 5 |
2, 5 |
C1 | 出现次数 |
1) | 2 |
2) | 3 |
3) | 3 |
4) | 1 |
5) | 3 |
4)的支持度为 1/4 为 0.25 < 0.5 = minSupport ,所以将其舍去
整个Apriori算法的伪代码如下:
当集合中项的个数大于0时:
构建一个k个项组成的候选项集的列表
检查数据以确认每个项集都是频繁的
保留频繁项集并构建k+1项组成的候选项集的列表(向上合并)
函数 aprioriGen() 的输入参数为频繁项集列表 Lk 与项集元素个数 k ,输出为 Ck 。举例来说,该函数以{0}、{1}、{2}作为输入,会生成{0,1}、{0,2}以及{1,2}。要完成这一点,首先创建一个空列表,然后计算 Lk 中的元素数目。通过循环来比较 Lk 中的每一个元素与其他元素,紧接着,取列表中的两个集合进行比较。如果这两个集合的前面 k-2 个元素都相等,那么就将这两个集合合成一个大小为 k 的集合 。这里使用集合的并操作来完成。
apriori函数首先创建 C1 然后读入数据集将其转化为 D (集合列表)来完
成。程序中使用 map 函数将 set() 映射到 dataSet 列表中的每一项。scanD() 函数来创建 L1 ,并将 L1 放入列表 L 中。 L 会包含 L1 、 L2 、 L3 …。现在有了 L1 ,后面会继续找 L2 , L3 …,这可以通过 while 循环来完成,它创建包含更大项集的更大列表,直到下一个大的项集为空。Lk 列表被添加到 L ,同时增加 k 的值,增大项集个数,重复上述过程。最后,当 Lk 为空时,程序返回 L 并退出。
从频繁项中挖掘关联规则
4.FP-growth 算法原理:
相比于apriori 算法, FP-growth 算法可高效发现 频繁项集 。
参考:https://blog.csdn.net/zhazhayaonuli/article/details/53322541
https://www.cnblogs.com/qwertWZ/p/4510857.html
以上是关于数据挖掘-关联分析 Apriori算法和FP-growth 算法的主要内容,如果未能解决你的问题,请参考以下文章
数据挖掘-关联分析 Apriori算法和FP-growth 算法