频繁项挖掘算法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次数 ...
随机推荐
- DP一直是自己的弱势 开始练滚动数组——HDOJ4502
http://acm.hdu.edu.cn/showproblem.php?pid=4502//题目链接 思路 : dp[i]表示 到第i天能获得的最大工资 依次更新 #include<cst ...
- Error:(3, 32) java: 程序包org.springframework.boot不存在
解决方案一: 找同事传一份D:\maven_repository\org\springframework\boot ,如图所示的位置,添加进去立刻就不报红.我也可以给你发.... 解决方案二: ...
- WPF知识点全攻略09- 附加属性
附加属性也是一种特殊的依赖属性. Canvas中的Canvas.Left,Canvas.Top ,DockPanel中DockPanel.Dock等就是附加属性. 更加.NET类属性的写法经验.这个中 ...
- 理解 React,但不理解 Redux,该如何通俗易懂的理解 Redux?(转)
作者:Wang Namelos 链接:https://www.zhihu.com/question/41312576/answer/90782136来源:知乎 解答这个问题并不困难:唯一的要求是你熟悉 ...
- 标注偏置问题(Label Bias Problem)和HMM、MEMM、CRF模型比较<转>
转自http://blog.csdn.net/lskyne/article/details/8669301 路径1-1-1-1的概率:0.4*0.45*0.5=0.09 路径2-2-2-2的概率:0. ...
- html输入框去除记忆功能
自动完成功能,只需把AUTOCOMPLETE设为off即可,如: 整个表单禁止自动完成 HTML code <FORM method=post action="submit.asp&q ...
- Codeforces Round #272 (Div. 2)-A. Dreamoon and Stairs
http://codeforces.com/contest/476/problem/A A. Dreamoon and Stairs time limit per test 1 second memo ...
- JdbcTemplate类对sql的操作使用
<!--方式一: dbcp 数据源配置,在测试环境使用单连接 --> <bean id="dataSource" class="org.apache.c ...
- PHP 递归无限极下级
下面是自己用到的一些递归方法,当然都是借鉴的,各位看官请勿怪 第一种 有层级 $array = array( array('id' => 1, 'pid' => 0, 'n' => ...
- 【HDU 2126】Buy the souvenirs(01背包)
When the winter holiday comes, a lot of people will have a trip. Generally, there are a lot of souve ...