如果看懂了apriori算法的直接看下面的过程,

从第k-1层推到第k层的时候的过程就是扩大-连接-剪支的过程,明白了这个了就好写了

1. 扫描数据库,生成候选1项集和频繁1项集。

2. 从2项集开始循环,由频繁k-1项集生成频繁频繁k项集。

2.1  频繁k-1项集生成2项子集,这里的2项指的生成的子集中有两个k-1项集。使如有3个2项频繁集{a, b}{b, c}{c, f},则它所有的2项子集为{{a, b}{b, c}}{{a, b}{e, f}}{{b, c}{c, f}}

2.2  对由2.1生成的2项子集中的两个项集根据上面所述的连接步进行连接,生成k项集。

2.3  对k项集中的每个项集根据如上所述的剪枝步进行计算,舍弃掉子集不是频繁项集即不在频繁k-1项集中的项集。

2.4  扫描数据库,计算2.3步中过滤后的k项集的支持度,舍弃掉支持度小于阈值的项集,生成频繁k项集。

3.  当当前生成的频繁k项集中只有一个项集时循环结束

由啤酒和尿布引出:

在一家超市中,人们发现了一个特别有趣的现象:尿布与啤酒这两种风马牛不相及的商品居然摆在一起。但这一奇怪的举措居然使尿布和啤酒的稍量大幅增加了。这可不是一个笑话,而是一直被商家所津津乐道的发生在美国沃尔玛连锁超市的真实案例。原来,美国的妇女通常在家照顾孩子,所以她们经常会嘱咐丈夫在下班回家的路上为孩子买尿布,而丈夫在买尿布的同时又会顺手购买自己爱喝的啤酒。这个发现为商家带来了大量的利润,但是如何从浩如烟海却又杂乱无章的数据中,发现啤酒和尿布销售之间的联系呢?这又给了我们什么样的启示呢?这是怎么做到的呢,这就是数据的挖掘,需要对数据之间的关联规则进行分析,进行购物篮分析。

Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集。而且算法已经被广泛的应用到商业、网络安全等各个领域。

Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。很多的的挖掘算法是在Apriori算法的基础上进行改进的,比如基于散列(Hash)的方法,基于数据分割(Partition)的方法以及不产生候选项集的FP-GROWTH方法等。因此要了解关联规则算法不得不先要了解Apriori算法。

Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。其核心是基于两阶段频集思想的递推算法。该关联规则在分类上属于单维、单层、布尔关联规则。在这里,所有支持度大于最小支持度的项集称为频繁项集,简称频集。可能产生大量的候选集,以及可能需要重复扫描数据库,是Apriori算法的两大缺点

频繁项集:

项的集合称为项集。包含k个项的项集称为k-项集。集合{computer,ativirus_software}是一个二项集。项集的出项频率是包含项集的事务数,简称为项集的频率,支持度计数或计数。注意,定义项集的支持度有时称为相对支持度,而出现的频率称为绝对支持度。如果项集I的相对支持度满足预定义的最小支持度阈值,则I是频繁项集。

布尔关联规则:

关联规则是形如X→Y的蕴涵式,其中且, X和Y分别称为关联规则的先导(antecedent或left-hand-side, LHS)和后继(consequent或right-hand-side, RHS) 。

定义

根据 韩家炜等观点,关联规则定义为:
假设I是 的集合。给定一个交易数据库D,其中每个 事务(Transaction)t是I的非空子集,即,每一个交易都与一个唯一的 标识符TID(Transaction ID)对应。关联规则在D中的 支持度(support)是D中事务同时包含X、Y的百分比,即 概率; 置信度(confidence)是D中事物已经包含X的情况下,包含Y的百分比,即 条件概率。如果满足 最小支持度阈值最小置信度阈值。这些阈值是根据挖掘需要人为设定。
基本概念表1:关联规则的简单例子
TID
网球拍
网 球
运动鞋
羽毛球
1
1
1
1
0
2
1
1
0
0
3
1
0
0
0
4
1
0
1
0
5
0
1
1
1
6
1
1
0
0
用一个简单的例子说明。表1是顾客购买记录的数据库D,包含6个事务。项集I={网球拍,网球,运动鞋,羽毛球}。考虑关联规则(频繁二项集):网球拍与网球,事务1,2,3,4,6包含网球拍,事务1,2,6同时包含网球拍和网球,X^Y=3, D=6,支持度(X^Y)/D=0.5;X=5, 置信度(X^Y)/X=0.6。若给定最小支持度α = 0.5,最小 置信度β = 0.6,认为购买网球拍和购买网球之间存在关联。
来自: 百度百科 关联规则

1. 挖掘关联规则

1.1   什么是关联规则

一言蔽之,关联规则是形如X→Y的蕴涵式,表示通过X可以推导“得到”Y,其中X和Y分别称为关联规则的先导(antecedent或left-hand-side, LHS)和后继(consequent或right-hand-side, RHS)

1.2   如何量化关联规则

关联规则挖掘的一个典型例子便是购物车分析。通过关联规则挖掘能够发现顾客放入购物车中的不同商品之间的关联,分析顾客的消费习惯。这种关联规则的方向能够帮助卖家了解哪些商品被顾客频繁购买,从而帮助他们开发更好的营销策略。比如:将经常同时购买的商品摆近一些,以便进一步刺激这些商品一起销售;或者,将两件经常同时购买的商品摆远一点,这样可能诱发买这两件商品的用户一路挑选其他商品。

在数据挖掘当中,通常用“支持度”(support)和“置性度”(confidence)两个概念来量化事物之间的关联规则。它们分别反映所发现规则的有用性和确定性。比如:

Computer => antivirus_software , 其中 support=2%, confidence=60%

表示的意思是所有的商品交易中有2%的顾客同时买了电脑和杀毒软件,并且购买电脑的顾客中有60%也购买了杀毒软件。在关联规则的挖掘过程中,通常会设定最小支持度阈值和最小置性度阈值,如果某条关联规则满足最小支持度阈值和最小置性度阈值,则认为该规则可以给用户带来感兴趣的信息。

1.3   关联规则挖掘过程

1)几个基本概念:

关联规则A->B的支持度support=P(AB),指的是事件A和事件B同时发生的概率。

置信度confidence=P(B|A)=P(AB)/P(A),指的是发生事件A的基础上发生事件B的概率。

同时满足最小支持度阈值和最小置信度阈值的规则称为强规则

如果事件A中包含k个元素,那么称这个事件A为k项集,并且事件A满足最小支持度阈值的事件称为频繁k项集

2)挖掘过程:

第一,找出所有的频繁项集;

第二,由频繁项集产生强规则。

2. 什么是Apriori

2.1   Apriori介绍

Apriori算法使用频繁项集的先验知识,使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集。首先,通过扫描事务(交易)记录,找出所有的频繁1项集,该集合记做L1,然后利用L1找频繁2项集的集合L2,L2找L3,如此下去,直到不能再找到任何频繁k项集。最后再在所有的频繁集中找出强规则,即产生用户感兴趣的关联规则。

其中,Apriori算法具有这样一条性质:任一频繁项集的所有非空子集也必须是频繁的。因为假如P(I)< 最小支持度阈值,当有元素A添加到I中时,结果项集(A∩I)不可能比I出现次数更多。因此A∩I也不是频繁的。

2.2     连接步和剪枝步

1)  连接步
若有两个k-1项集,每个项集按照“属性-值”(一般按值)的字母顺序进行排序。如果两个k-1项集的前k-2个项相同,而最后一个项不同,则证明它们是可连接的,即这个k-1项集可以联姻,即可连接生成k项集。使如有两个3项集:{a, b, c}{a, b, d},这两个3项集就是可连接的,它们可以连接生成4项集{a, b, c, d}。又如两个3项集{a, b, c}{a, d, e},这两个3项集显示是不能连接生成3项集的。
剪枝步
若一个项集的子集不是频繁项集,则该项集肯定也不是频繁项集。这个很好理解,举一个例子,若存在3项集{a, b, c},如果它的2项子集{a, b}的支持度即同时出现的次数达不到阈值,则{a, b, c}同时出现的次数显然也是达不到阈值的。因此,若存在一个项集的子集不是频繁项集,那么该项集就应该被无情的舍弃。
Apriori算法流程:
1. 扫描数据库,生成候选1项集和频繁1项集。

2. 从2项集开始循环,由频繁k-1项集生成频繁频繁k项集。

2.1  频繁k-1项集生成2项子集,这里的2项指的生成的子集中有两个k-1项集。使如有3个2项频繁集{a, b}{b, c}{c, f},则它所有的2项子集为{{a, b}{b, c}}{{a, b}{e, f}}{{b, c}{c, f}}

2.2  对由2.1生成的2项子集中的两个项集根据上面所述的连接步进行连接,生成k项集。

2.3  对k项集中的每个项集根据如上所述的剪枝步进行计算,舍弃掉子集不是频繁项集即不在频繁k-1项集中的项集。

2.4  扫描数据库,计算2.3步中过滤后的k项集的支持度,舍弃掉支持度小于阈值的项集,生成频繁k项集。

3.  当当前生成的频繁k项集中只有一个项集时循环结束

Apriori算法实例

交易ID

商品ID列表

T100

I1,I2,I5

T200

I2,I4

T300

I2,I3

T400

I1,I2,I4

T500

I1,I3

T600

I2,I3

T700

I1,I3

T800

I1,I2,I3,I5

T900

I1,I2,I3

上图为某商场的交易记录,共有9个事务,利用Apriori算法寻找所有的频繁项集的过程如下:

详细介绍下候选3项集的集合C3的产生过程:从连接步,首先C3={{I1,I2,I3},{I1,I2,I5},{I1,I3,I5},{I2,I3,I4},{I2,I3,I5},{I2,I4,I5}}(C3是由L2与自身连接产生)。根据Apriori性质,频繁项集的所有子集也必须频繁的,可以确定有4个候选集{I1,I3,I5},{I2,I3,I4},{I2,I3,I5},{I2,I4,I5}}不可能时频繁的,因为它们存在子集不属于频繁集,因此将它们从C3中删除。注意,由于Apriori算法使用逐层搜索技术,给定候选k项集后,只需检查它们的(k-1)个子集是否频繁。

Apriori算法实现:未完成

【大数据算法】:apriori算法详解,非常清晰相关推荐

  1. 大数据发展规划及技术详解

    大数据发展规划及技术详解 1.BI的流程:主要是阐述一下BI的流程:第一,需求分析阶段,要搞清楚用户需求,就本例用户想要的是volte业务使用情况的月报表,必须要搞清楚月报表中包括哪些指标(包括维度指 ...

  2. <Zhuuu_ZZ>大数据技术之Flume详解

    大数据技术之Flume详解 一 Flume配置 Flume安装地址 环境配置 验证 二 Flume基础架构 1.定义 2.Flume组成架构 3.Flume组件 Agent Source Channe ...

  3. 大数据平台作业调度系统详解-理论篇

    大数据开发平台的核心组件之一:作业调度系统. 作业调度系统是一个相对复杂的系统,涉及的内容繁杂,针对的场景多种多样,实现的方案千差万别,是一个需要理论和实践并重的系统. 本文先从大的场景划分的角度对市 ...

  4. 关联规则算法Apriori algorithm详解以及为什么它不适用于所有的推荐系统

    在1994年首次提出的一种关联规则挖掘算法,它可以在特定类型的数据中找到关系,并将其表示为规则.关联规则挖掘最常用于营销,特别是在购物车的上下文中.这个应用领域被正式称为"购物车分析&quo ...

  5. python海量数据分析师职业技能_大数据分析师技能图谱详解与零基础自学内容大全...

    全球的数据量正在以每18个月翻一倍的惊人速度增长,世界正在高速数字化,大数据堪比石油,如何掘金大数据是所有个人.企业和国家的机遇和挑战.中国是人才大国,能理解和应用大数据的创新人才更是稀缺资源.大数据 ...

  6. 大数据课程培训大纲详解,大数据培训学习内容

    大数据助力成就非凡.大数据正在改变着商业游戏规则,为企业解决传统业务问题带来变革的机遇.毫无疑问,当未来企业尝试分析现有海量信息以推动业务价值增值时,必定会采用大数据技术.那么大数据培训哪家好呢?今天 ...

  7. 大数据学前准备--zookeeper详解与集群搭建(保姆级教程)

    前言 本人是才学完大数据的无业游民,我将会总结学习收获或发表自己的学习心得,期望给初学者也为自己今后复习提供一些帮助. 我将陆续发布大数据阶段所学,包括但不限于(hadoop,hive,hbase,p ...

  8. 【若泽大数据】MySQL参数详解

    系统变量提供的是各种与服务器配置和功能有关的信息.大部分的系统变量都可以在服务器启动时进行设置.在运行时,每一个系统变量都拥有一个全局值或会话值,或者同时拥有这两个值.许多系统变量都是动态的,也就是说 ...

  9. 看完了这篇,还能不知道什么是hadoop,大数据吗?❤️‍万字详解告诉你

    现在的社会是一个高速发展的社会,科技发达,信息流通,人们之间的交流越来越密切,生活也越来越方便,大数据就是这个高科技时代的产物. 文章目录 一.大数据概论 1.1 大数据概念 1.2 大数据特点 1. ...

  10. 大数据平台Lambda架构详解

    Lambda架构由Storm的作者Nathan Marz提出.旨在设计出一个能满足.实时大数据系统关键特性的架构,具有高容错.低延时和可扩展等特. Lambda架构整合离线计算和实时计算,融合不可变( ...

最新文章

  1. ConfigParser MissingSectionHeaderError: File contains no section headers.
  2. 工作经验总结201606
  3. crontab定时巡检使用
  4. javafx隐藏_JavaFX技巧14:StackPane子项-隐藏但不消失
  5. iptables原理及规则
  6. Mac安装webpack报错gyp ERR! configure error gyp ERR! stack Error: `gyp` failed with exit code: 1解决
  7. linux 环境变量导出,关于Linux:如何删除导出的环境变量?
  8. web服务中使用线程池减少时间的方法
  9. jsf标签,jsp标签与jstl标签
  10. V4L2驱动的移植与应用(二+三)【转】
  11. 泰山游记:厕所竟然没水,可想而知
  12. C++包含头文件尖括号和双引号的区别
  13. linux中wps默认安装目录,在Linux系统中安装使用WPS的方法
  14. LVM逻辑卷快照的添加,删除逻辑卷!
  15. Android 11 wifi adb 连接错误 “Unable to start pairing client.“
  16. 用Windows自带的系统恢复环境WinRE进行系统重大故障排查,轻松修复Windows蓝屏、白屏等问题
  17. 匈牙利算法python代码实现以及原理图解
  18. Vue中使用把汉字转化为拼音字母
  19. 微信小程序云开发-树洞小程序Treehole(评论帖子/发布话题实现)
  20. 测试人明年跳槽,我劝你千万别忽略这些“细节”不然……

热门文章

  1. 华为电脑浏览器主页被劫持
  2. 率土之滨鸿蒙团,【率土之滨】无需“垒实”也能鏖战全场!群吕布混编弓解析...
  3. MySQL 文件结构、逻辑架构及 sql 执行流程分析作者:Java后端架构
  4. 沟通的艺术02 同理心对话 亲子沟通实例
  5. 用20门编程语言说生日快乐/我爱你
  6. 2048Game/2048游戏(自制版)
  7. 腾讯技术分享:微信小程序音视频与WebRTC互通的技术思路和实践
  8. 找素数模板:马氏筛法【复杂度nlgnlgn】
  9. 微信 iPad 835协议
  10. 程序员必备的5个自媒体工具