频繁项挖掘算法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算法放到下一篇文章中介绍,点击下面的链接查看
http://www.cnblogs.com/aijianiula/p/5398179.html
频繁项挖掘算法Apriori和FGrowth的更多相关文章
- 静态频繁子图挖掘算法用于动态网络——gSpan算法研究
摘要 随着信息技术的不断发展,人类可以很容易地收集和储存大量的数据,然而,如何在海量的数据中提取对用户有用的信息逐渐地成为巨大挑战.为了应对这种挑战,数据挖掘技术应运而生,成为了最近一段时期数据科学的 ...
- 【甘道夫】并行化频繁模式挖掘算法FP Growth及其在Mahout下的命令使用
今天调研了并行化频繁模式挖掘算法PFP Growth及其在Mahout下的命令使用,简单记录下试验结果,供以后查阅: 环境:Jdk1.7 + Hadoop2.2.0单机伪集群 + Mahout0.6 ...
- 频繁模式挖掘中Apriori、FP-Growth和Eclat算法的实现和对比
最近上数据挖掘的课程,其中学习到了频繁模式挖掘这一章,这章介绍了三种算法,Apriori.FP-Growth和Eclat算法:由于对于不同的数据来说,这三种算法的表现不同,所以我们本次就对这三种算法在 ...
- 频繁模式挖掘中Apriori、FP-Growth和Eclat算法的实现和对比(Python实现)
最近上数据挖掘的课程,其中学习到了频繁模式挖掘这一章,这章介绍了三种算法,Apriori.FP-Growth和Eclat算法:由于对于不同的数据来说,这三种算法的表现不同,所以我们本次就对这三种算法在 ...
- 海量数据挖掘MMDS week2: 频繁项集挖掘 Apriori算法的改进:非hash方法
http://blog.csdn.net/pipisorry/article/details/48914067 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- 关联规则挖掘之apriori算法
前言: 众所周知,关联规则挖掘是数据挖掘中重要的一部分,如著名的啤酒和尿布的问题.今天要学习的是经典的关联规则挖掘算法--Apriori算法 一.算法的基本原理 由k项频繁集去导出k+1项频繁集. 二 ...
- 【机器学习实战】第12章 使用FP-growth算法来高效发现频繁项集
第12章 使用FP-growth算法来高效发现频繁项集 前言 在 第11章 时我们已经介绍了用 Apriori 算法发现 频繁项集 与 关联规则.本章将继续关注发现 频繁项集 这一任务,并使用 FP- ...
- 关联规则挖掘算法之Apriori算法
Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集. 关于这个算法有一个非常有名的故事:"尿布和啤酒".故事是 ...
- FP-growth算法发现频繁项集(一)——构建FP树
常见的挖掘频繁项集算法有两类,一类是Apriori算法,另一类是FP-growth.Apriori通过不断的构造候选集.筛选候选集挖掘出频繁项集,需要多次扫描原始数据,当原始数据较大时,磁盘I/O次数 ...
随机推荐
- UVA - 1279 Asteroid Rangers (动点的最小生成树)
题意,有n个匀速动点,求最小生成树的改变次数. 一句话总结:动态问题的一般做法是先求出一个静态的解,然后求出解发生改变的事件,事件按照时间排序,依次处理. 先求出最开始的最小生成树(MST),当MST ...
- poj1142Smith Numbers质因子分解
题意:一个数不是质数,其质因子的每位加起来等于该数的每位加起来. /* 题意:一个数的所有质因子的每位相加起来等于该数的每位相加起来且该数不能是质数,那么就是史密斯数 tip:对于分解质因子,只需要判 ...
- 解决因为手机设置字体大小导致h5页面在webview中变形的BUG
首先,我们做了一个H5页面,在各种手机浏览器中打开都没问题.我们采用了rem单位进行布局,通过JS来动态计算网页的视窗宽度,动态设置html的font-size,一切都比较完美. 这时候,你自信满满的 ...
- Spring对注解(Annotation)处理【转】
1.从Spring2.0以后的版本中,spring也引入了基于注解(Annotation)方式的配置,注解(Annotation)是JDK1.5中引入的一个新特性,用于简化Bean的配置,某些场合可以 ...
- javaEE(11)_事务处理
一.事务的概念 •事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. •例如:A——B转帐,对应于如下两条sql语句 update from account set mon ...
- OpenWrt 路由器如何让 lan 口主机获得 ipv6 网络访问 -- 知乎
本文转自知乎: OpenWrt 路由器如何让 lan 口主机获得 ipv6 网络访问? - mistforest的回答 - 知乎https://www.zhihu.com/question/29667 ...
- 【Gradle】Downloading https://services.gradle.org/distributions/gradle-3.3-bin.zip 失败
提示连接超时 Downloading https://services.gradle.org/distributions/gradle-3.3-bin.zip 失败 这时候需要单独去官网下载包,然后放 ...
- Sublime安装与配置
1.到官网下载Sublime https://www.sublimetext.com/ 2.安装时选择添加到右键菜单 Add to explorer context menu 3.安装插件 菜单 to ...
- python实现FTP
原文地址:https://www.cnblogs.com/huangxm/p/6274645.html#undefined FTP服务的主动模式和被动模式 在开始之前,先聊一下FTP的主动模式和被动模 ...
- (转)Duplicate Symbol链接错的原因总结和解决方法
duplicate symbol是一种常见的链接错误,不像编译错误那样可以直接定位到问题的所在.但是经过一段时间的总结,发现这种错误总是有一些规律可以找的.例如,我们有如下的最简单的两个类代码: // ...