频繁项挖掘算法Apriori和FGrowth

一:背景介绍

  最近在公司用spark的平台做了一个购物车的推荐,用到的算法主要是FGrowth算法,它是Apriori算法的升级版,算法的主要目的是找出频繁进行一起购买的商品。本文主要介绍两个算法的背景,触及到公司的推荐具体流程,这里就不介绍了。

二:Apriori

  Apriori算法是挖掘频繁项的基础算法,通过挖掘用户购买订单,发现频繁一起购买的商品集合。它采用一种逐层搜索的迭代方法,用k项集来搜索(k+1)项集。首先通过扫描数据中的订单,累计每项的计数,收集满足最小支持度的项,找出1项集的集合L1,然后用L1来找出频繁2项集的集合L2,使用L2再找出L3,如此循环下去。了解这个算法,有个两个概念需要了解的:支持度和置信度

        支持度: support(A=>B)=P(A*B) 表示数据库事务中包含A和B的概率

        置信度: confidence(A=>B)=P(B|A) 表示在A发生的情况下B发生的概率

  下面用具体例子来理解aprior,某个商场的交易数据中保存如下数据:


交易ID


商品ID列表

 
交易ID


商品ID列表


T100


I1,I2,I5

 
T600


I2,I3


T200


I2,I4

 
T700


I1,I3


T300


I2,I3

 
T800


I1,I2,I3,I5


T400


I1,I2,I4

 
T900


I1,I2,I3


T500


I1,I3

     

  1.1.第一遍,扫描所有的事务,对每个商品出现次数统计

  1.2.假设我们指定的支持度为2,则频繁一项集L1,它由大于支持度2的1项集组成,第一遍扫描数据库产生1项集L1,统计结果为:


项集


支持度计数


{I1}


6


{I2}


7


{I3}


6


{I4}


2


{I5}


2

每个项集的支持度更指定的支持度比较,在指定支持度以上的保留,这里大于支持度为2的,进行保留,得到:


项集


支持度计数


{I1}


6


{I2}


7


{I3}


6


{I4}


2


{I5}


2

  1.3.由L1项集自连接产生2项集L2,然后扫描数据库,得到此2项集在事务中的支持度


项集


支持度计数


{I1,I2}


4


{I1,I3}


4


{I1,I4}


1


{I2,I3}


2


{I2,I3}


4


{I2,I4}


2


{I2,I5}


2


{I3,I4}


0


{I3,I5}


1


{I4,I5}


0

大于支持度为2的保留


项集


支持度计数


{I1,I2}


4


{I1,I3}


4


{I2,I3}


2


{I2,I3}


4


{I2,I4}


2


{I2,I5}


2


{I3,I5}


1

  1.4 由2项集L2自连接产生3项集L3,然后扫描数据库,此3项集在事务中的支持度


项集


支持度计数


{I1,I2,I2}


2


{I1,I2,I5}


2

保留支持度大于2的3项集,所有之类全部保留下来,得到满足2支持度的3项集:


项集


支持度计数


{I1,I2,I2}


2


{I1,I2,I5}


2

  1.5有频繁项来产生关联规则

当用apriori算法找出频繁项集之后,可以用他们来产生关联规则,关联规则的计算方式为:

P(A|B)=P(AB)/P(B)

即当B发生时,A发生的概率。我们可以用这个来进行推荐,如果我们指定置信度为70%,当P(A|B)>=70%时,我们将在客户买A商品是给他推荐B商品,例如当有个顾客买了把{I1,I2}放进购物车了,我们应该给她推荐什么商品呢?

我们来计算{I1,I2}=>{I5}的概率,即当他把{I1,I2}放进购物车了,我们给他推荐商品{I5}的概率,这里计算的到

置信度为:2/4=50%

即他加油50%的概率会选者I5,到底推不推,看你设置的最小置信度了,如果大于你设置的最小置信度则推。

算法缺点:

每次由(k-1)项集L(K-1)产生K项集L(K)时,自连接产生采用枚举的方式,而且产生的项集每次都得去扫描一下数据库

如何提高Apriori算法的效率,有比较多的方法:基于散列,抽样等方式,比较出名的改进算法有FPGrowth算法

由于感觉这里篇幅比较长了,FGrowth算法放到下一篇文章中介绍

时间: 2024-10-06 21:23:29

频繁项挖掘算法Apriori和FGrowth的相关文章

静态频繁子图挖掘算法用于动态网络——gSpan算法研究

摘要 随着信息技术的不断发展,人类可以很容易地收集和储存大量的数据,然而,如何在海量的数据中提取对用户有用的信息逐渐地成为巨大挑战.为了应对这种挑战,数据挖掘技术应运而生,成为了最近一段时期数据科学的和人工智能领域内的研究热点.数据集中的频繁模式作为一种有价值的信息,受到了人们的广泛关注,成为了数据挖掘技术研究领域内的热门话题和研究重点. 传统的频繁模式挖掘技术被用来在事务数据集中发现频繁项集,然而随着数据挖掘技术应用到非传统领域,单纯的事务数据结构很难对新的领域的数据进行有效的建模.因此,频繁

【甘道夫】并行化频繁模式挖掘算法FP Growth及其在Mahout下的命令使用

今天调研了并行化频繁模式挖掘算法PFP Growth及其在Mahout下的命令使用,简单记录下试验结果,供以后查阅: 环境:Jdk1.7 + Hadoop2.2.0单机伪集群 +  Mahout0.6(0.8和0.9版本都不包含该算法.Mahout0.6可以和Hadoop2.2.0和平共处有点意外orz) 部分输入数据,输入数据一行代表一个购物篮: 4750,19394,25651,6395,5592 26180,10895,24571,23295,20578,27791,2729,8637 7

gSpan频繁子图挖掘算法

参考资料:http://www.cs.ucsb.edu/~xyan/papers/gSpan.pdf http://www.cs.ucsb.edu/~xyan/papers/gSpan-short.pdf http://www.jos.org.cn/1000-9825/18/2469.pdf http://blog.csdn.net/coolypf/article/details/8263176 更多挖掘算法:https://github.com/linyiqun/DataMiningAlgor

机器学习之FP-growth频繁项集算法

FP-growth算法项目背景/目的对于广告投放而言,好的关联会一定程度上提高用户的点击以及后续的咨询成单 对于产品而言,关联分析也是提高产品转化的重要手段,也是大多商家都在做的事情,尤其是电商平台 曾经我用SPSS Modeler做过Apriori关联分析模型,也能满足需求,但是效果自然是不及python了,这里分享一下操作流程 还有一周就双十一了,那不妨去看看产品关联背后的原理 项目原理步骤一 数据处理1.遍历所有的数据集合,计算所有项的支持度(次数)2.丢弃非频繁项(次数小于2)3.再对所

高效频繁模式挖掘算法PrePost和FIN的C++源码

PrePost的C++源码见http://www.cis.pku.edu.cn/faculty/system/dengzhihong/Source%20Code/prepost.cpp. 算法内容参见论文:A New Algorithm for Fast Mining Frequent Itemsets Using N-Lists) 论文免费下载地址:http://info.scichina.com:8084/sciFe/EN/abstract/abstract508369.shtml  或ht

频繁项集算法

基础知识: 用户 薯片(A) 可乐(B) 铅笔(C) 羽毛球(D) 洗衣液(E) 1 √ √   √   2 √   √ √ √ 3 √ √   √   4   √ √ √   5 √   √     支持度:单个项占总项集的百分比,比如薯片的支持度=4/5*100%=80%,可乐的支持度=3/5*100%=60%. 置信度:薯片=>羽毛球的置信度=3/4*100%=75%,可乐=>羽毛球的置信度=3/3*100%=100%. 一.Apriori算法 假设minsupport=0.2,得出频繁

FP-growth算法(一)——通过构建FP树发现频繁项集

常见的挖掘频繁项集算法有两类,一类是Apriori算法,另一类是FP-growth.Apriori通过不断的构造候选集.筛选候选集挖掘出频繁项集,需要多次扫描原始数据,当原始数据较大时,磁盘I/O次数太多,效率比较低下.FPGrowth不同于Apriori的"试探"策略,算法只需扫描原始数据两遍,通过FP-tree数据结构对原始数据进行压缩,效率较高. FP代表频繁模式(Frequent Pattern) ,算法主要分为两个步骤:FP-tree构建.挖掘频繁项集. FP树表示法 FP树

基于节点列表的项集表示框架的频繁项集挖掘最新进展

最新的论文在Expert Systems with Applications 2015 42卷13期上发表. 这篇论文采用等价类提升的策略,极大地提升了挖掘的速度,并且节省了内存消耗.所形成的PrePost+算法在时间和空间的性能度要明显优于PrePost和FIN算法. PrePost+算法的下载地址为:http://www.cis.pku.edu.cn/faculty/system/dengzhihong/Source%20Code/prepost+.cpp 相关论文的下载地址: ?http:

FP-growth高效频繁项集发现

FP-growth 算法优缺点: 优点:一般快于Apriori 缺点:实现比较困难,在某些数据上性能下降 适用数据类型:标称型数据 算法思想: FP-growth算法是用来解决频繁项集发现问题的,这个问题再前面我们可以通过Apriori算法来解决,但是虽然利用Apriori原理加快了速度,仍旧是效率比较低的.FP-growth算法则可以解决这个问题.FP-growth算法使用了频繁模式树(Frequent Pattern Tree)的数据结构.FP-tree是一种特殊的前缀树,由频繁项头表和项前