频繁项挖掘算法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次数 ...
随机推荐
- kubernetes添加不了google apt-key
转自icepoint的博客 key来源 我的百度云盘 密码:v3wo 下载kube_apt_key.gpg到本地,上传到服务器后执行下面的命令 apt-get update && ap ...
- javase(4)_数组
一.数组概述 数组可以看成是多个相同类型数据组合,对这些数据的统一管理. 数组变量属于引用类型,数组也可以看成对象,数组中的每个元素相当于该对象的成员变量. 数组中的元素可以是任意类型,包括基本类型和 ...
- MySQL之单表查询、多表查询
一.单表查询: 单个表的查询方法及语法顺序需要通过实际例子来熟悉 先将表数据创建下: mysql> create database singe_t1; # 建个数据库singe_t1 Query ...
- Python9- 生成器函数进阶-day14
生成器进阶#send的获取下一个值的效果和next基本一致,#只不过在获取下一个值的时候,给上一个值的位置穿第一个数据 使用send的注册事项: #第一次使用生成器的时候,必须用next获取下一个值 ...
- (转)在Xcode 7上直接使用Clang Address Sanitizer
原文地址: http://www.cocoachina.com/ios/20150730/12830.html WWDC 2015上,除了Swift 2.0外,还有一个令人激动的消息:可以直接在Xco ...
- mysql 与QT的连接
第一步:安装 qt开发环境 bi@bi-desktop:~$sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4- ...
- PAT Basic 1044
1044 火星数字 火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret. 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, jun, jly ...
- TMG 模拟公司网络架构要点
1.部署的router 有且只有一个网关,指向TMG服务器 2.router 确认有默认路由,指向TMG服务器 3.TMG 只能设置一个网关,指向模拟公网关 4.TMG 要手工创建指向router的路 ...
- PYDay10&11&12&13-常用模块:time|datetime|os|sys|pickle|json|xml|shutil|logging|paramiko、configparser、字符串格式化、py自动全局变量、生成器迭代器
1.py文件自动创建的全局变量 print(vars()) 返回值:{'__name__': '__main__', '__package__': None, '__loader__': <_f ...
- Apache 流框架 Flink,Spark Streaming,Storm对比分析(1)
此文已由作者岳猛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.Flink架构及特性分析 Flink是个相当早的项目,开始于2008年,但只在最近才得到注意.Flink是 ...