由啤酒和尿布引出:

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

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)两个概念来量化事物之间的关联规则。它们分别反映所发现规则的有用性和确定性。

对于A->B

支持度:P(A ∩ B),既有A又有B的概率

置信度

P(B|A),在A发生的事件中同时发生B的概率 p(AB)/P(A)     例如购物篮分析:牛奶 ⇒ 面包

例子:[支持度:3%,置信度:40%]

支持度3%:意味着3%顾客同时购买牛奶和面包

置信度40%:意味着购买牛奶的顾客40%也购买面包

比如:

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. 过单趟扫描数据库D;计算出各个1项集的支持度,得 到频繁1项集的集合。

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

2.1  连接步:为了生成,预先生成,由2个只有一个项不同的属于的频集做一 个(k-2)JOIN运算得到的。

2.2  剪枝步:由于是的超集,所以可能有些元素不是频繁的。舍弃掉子集不是频繁项集即不在频繁k-1项集中的项集

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

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

【注意】

在剪枝步中的每个元 素需在交易数据库中进行验证来决定其是否加入,这里的验证过程 是算法性能的一个瓶颈。这个方法要求多次扫描可能很大的交易数据库。可能产生大量的候选集,以及可能需要重复扫描数据库,是Apriori算法的两大缺 点

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},{I1,I2,I4},{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)个子集是否频繁。

又如:

3、总结与优化

①Apriori算法的缺点:(1)由频繁k-1项集进行自连接生成的候选频繁k项集数量巨大。(2)在验证候选频繁k项集的时候需要对整个数据库进行扫描,非常耗时。

②网上提到的频集算法的几种优化方法:1. 基于划分的方法。2. 基于hash的方法。3. 基于采样的方法。4. 减少交易的个数。

我重点看了“基于划分的方法”改进算法,现在简单介绍一下实现思想:

基于划分(partition)的算法,这个算法先把数据库从逻辑上分成几个互不相交的块,每次单独考虑一个分块并 对它生成所有的频集,然后把产生的频集合并,用来生成所有可能的频集,最后计算这些项集的支持度。

其中,partition算法要注意的是分片的大小选取,要保证每个分片可以被放入到内存。当每个分片产生频集后,再合并产生产生全局的候选k-项集。若在多个处理器分片,可以通过处理器之间共享一个杂凑树来产生频集。

转自:http://blog.csdn.net/lizhengnanhua/article/details/9061755

http://blog.csdn.net/qustdjx/article/details/12770883

Apriori算法简介---关联规则的频繁项集算法相关推荐

  1. 【机器学习实战】第12章 使用 FP-growth 算法来高效发现频繁项集

    第12章 使用FP-growth算法来高效发现频繁项集 前言 在 第11章 时我们已经介绍了用 Apriori 算法发现 频繁项集 与 关联规则. 本章将继续关注发现 频繁项集 这一任务,并使用 FP ...

  2. 12使用FP-growth算法来高效发现频繁项集

    第12章 使用FP-growth算法来高效发现频繁项集 一.背景 大家都用过搜索引擎.当我们输入一个单词或单词的一份,搜索引擎就会自动补全查询词项.例如:当我们在百度输入"为什么" ...

  3. 机器学习实战—使用FP-growth算法来高效发现频繁项集

    FP-growth算法基于Apriori构建,但采用了高级的数据结构减少扫描次数,大大加快了算法速度.FP-growth算法只需要对数据库进行两次扫描,而Apriori算法对于每个潜在的频繁项集都会扫 ...

  4. 【大数据】六、频繁项集与关联规则(频繁项集、关联规则、A-Priori、PCY)

    文章目录 1 定义 1.1 频繁项集 1.2 关联规则 2 A-Priori 算法 2.1 例题 3 更大数据集在内存中的处理 3.1 PCY 算法 3.2 多阶段算法 3.3 多哈希算法 4 有限扫 ...

  5. python 频繁项集_频繁项集算法Eclat

    Equivalence Class Transformation(Eclat)是频繁项挖掘和关联性分析的另外一种常用的算法,与Apriori和FP-growth不同的是,Eclat采用垂直数据格式.所 ...

  6. Chapter 12 使用FP-growth算法来高效发现频繁项集

    本博文内容包括以下: 发现事务数据中的公共模式 FP-growth算法 发现twitter源中的共同词 FP-growth 算法 是基于Apriori算法,但在完成相同的任务(将数据集存储在一个特定的 ...

  7. 机器学习-使用FP-Growth算法来高效发现频繁项集

    FP-Growth算法是这里要介绍的第三个非监督学习算法,FP(Frequent Pattern)代表频繁模式.FP-Growth算法相对于Apriori算法来说效率更高,其只需要对数据集进行两轮扫描 ...

  8. 使用FP-growth算法来高效发现频繁项集

    FP-growth算法基于Apriori构建,但采用了高级的数据结构减少扫描次数,大大加快了算法速度.FP-growth算法只需要对数据库进行两次扫描,而Apriori算法对于每个潜在的频繁项集都会扫 ...

  9. Apriori算法(经典的发现频繁项目集算法)分析

    基本概念 I是一个项目集合,事务数据库D是由一系列具有唯一标识TID的事务组成,每个事务t都对应I上的一个子集 支持度:项目集I1在数据集D上的支持度是包含I1的事务在D中所占的百分比 频繁项目集:对 ...

最新文章

  1. Android 为不同的语言和硬件创建资源
  2. 关于链表和指针变量的使用说明,可用于框架设计
  3. sql2005,sql2008,sql2012清空日志语句
  4. JAVA多线程中join()方法的详细分析
  5. 2019标杆案例复盘(下):沟通无界——生活社交篇
  6. JDK动态代理与CGLIB动态代理区别
  7. linux下后缀为so的文件怎么打开,linux中.so后缀的文件怎么使用啊
  8. Linux下C语言串口应用编程,Linux下串口C语言编程
  9. Perl 读取特定格式的文件名
  10. web和python前景_我想了解一下pythonweb和javaweb比较详细的学习成本和应用前景,谢谢!?...
  11. iOS开发Assertion failure in -[AFJSONRequestSerializer requestWithMethod:URLString:parameters:error:]
  12. 记一次2048小游戏开发
  13. 初级软件水平测试题,2020初级会计题库软件机考系统练习试卷
  14. linux下游戏制作工具,在Linux下可用Wine安装和运行D5Power游戏制作工具、蜂窝助手...
  15. axi时序图_AXI总线学习
  16. 利用谷歌地图模拟地图坐标数据
  17. 史上最简单的制作安装系统U盘工具
  18. 皇后游戏c语言,C语言中关于4皇后或8皇后问题!
  19. 事务的4个特性——ACID(原子性、一致性、隔离性和持久性)、更新丢失问题...
  20. 豆瓣 9.3 的高分,牛逼的 Git!

热门文章

  1. 【闲谈】论Spring的三种依赖注入方式
  2. xlwings出现的报错
  3. laravel配置使用Redis队列
  4. HDD硬盘在空闲时发出规律“咔哒”声
  5. 手机地图渲染的方式讨论
  6. 新华三培训4---路由器
  7. CAD 电气版 元件包含中文的描述显示问号
  8. 微信小程序的框架构造及应用
  9. 【数学建模】2018年数学建模国赛C题解答 基于RFMT 模型的百货商场会员画像描绘
  10. DIY BROADCAST : How to build your own Internet TV Channel with Open-Source other goodies