关联规则挖掘——Apriori算法

原创 2016年08月31日 00:26:42

前言
大二的时候,一个老师为了勾起我们对数据挖掘的兴趣,老是问我们这个问题:你们知道超市为什么要把啤酒跟尿布放在一起吗?但是从来没告诉我们答案。现在,很多人都听过这个问题,觉得很平常,但是那时的我真觉得挺神奇的。直到后来,了解了关联规则挖掘,学习了关联规则挖掘的代表性算法Apriori,才终于知道了答案。关联规则挖掘,就是找出那些经常同时出现的事物,比如啤酒和尿布。接下来,我们进入正题。

基本知识
关联规则挖掘通过形式化的语言表述如下:
设集合I=i1,i2,...,im是一个项目(Item)集合,T=t1,t2,...,tn是一个事务(Transaction)集合,其中,每个事物ti是一个项目集合,并满足tiI,项目就是类似前言中所说的啤酒和尿布的东西,事务就是同时出现的几个项目的集合。
一个关联规则是一个如下形式的蕴涵关系:
XYXI,YIXY=ϕ
X(或Y)是一个项目的集合,称为项集(Itemset), X称为前件,Y称为后件。
如果项集X是事物tiT的一个子集, 则称ti包含X, 或称X覆盖ti。X在T中的支持计数(表示位X.count)是T中包含X的事物的数目。
对于关联规则XY,有
=(XY).countn,n
=(XY).countX.count
支持度用于衡量一条规则出现得有多频繁,只有出现得足够频繁的规则对我们才有用,比如尿。置信度用于衡量从前件推出后件的可行度,类似于概率P(Y|X)。值得注意的是,只要一条规则的支持度达到用户要求的最小支持度(minsup)时,我们才去考虑这条规则从前件到后件的置信度。
关联规则挖掘的目标就是,找出事物集合T中所有满足支持度和置信度分别高于用户指定的最小支持度和最小置信度(minconf)的规则。Apriori算法帮我们实现这个目标。

Apriori算法
Apriori算法分为两步:
(1)生成所有频繁项目集:一个频繁项目集(Frequent Itemset)是一个支持度高于minsup的项集。
(2)从频繁项目集中生成所有可信关联规则:一个可信关联规则(Confident Association Rule)是置信度大于minconf的规则。
一个包含k个项目的项集称为k-项集, 一个包含k个项目的频繁项目集成为k-频繁项目集。
向下封闭属性:频繁项目集的任何非空子集也是频繁项目集。这个属性很重要,但是很好理解:包含频繁项目集的非空子集的事务数目大于等于包含频繁项目集本身的事务数目。
接下来具体介绍Apriori算法的两步。

频繁项目生成
Apriori算法假定I中的项目都采用字典序排列。在算法中涉及的每个项集也都假定始终保持这个顺序。
算法伪代码如下:
这里写图片描述
其中,Ck是候选k-频繁项目集集合,Fk是频繁项目集集合,kFk指所有频繁项目集集合的并集。其中,candidategen(Fk1)的伪代码如下:
这里写图片描述
candidategen(Fk)中需要说明的地方是由Fk1生成Ck的方式:两个(k-1)-频繁项目集的前k-2个元素都是一样,只有最后一个元素不同,两个频繁项目集的并集组成一个候选k-频繁项目集。为什么这是可行的?由向下封闭属性可知,如果一个k-项目集是频繁项目集,那么它的任意(k-1)项目子集必定也是频繁项目集,也就是说,它的只有最后一个元素不同的两个(k-1)-频繁项目集必定在F(k1)中,于是,通过这种方式生成的候选k-频繁项目集包含了所有的k-频繁项目。为什么要选这两个集合呢?可以看到,这样选,容易使得项集保持有序。

关联规则生成
从频繁项目集f中抽取所有关联规则,需要找出f的所有非空子集,然后以使得前件不为空的非空子集作为后件,生成一条关联规则。我们要从这些关联规则找到这样的关联规则:
(fa)a=f.count(fa).countminconf
可以看出,当以a为后件时,如果规则满足最小置信度,那么以a的任何非空子集为后件的规则也必定满足最小置信度,因为分母变小了。这也是向下封闭属性。
生成关联规则算法的伪代码如下:
这里写图片描述

参考资料:
《Web数据挖掘》第2版,Bing Liu 著, 俞勇 译

版权声明:本文为博主原创文章,未经博主允许不得转载。

数据挖掘之关联规则

http://fimi.ua.ac.be/fimi03/ http://fimi.ua.ac.be/fimi04/
  • lilanfeng1991
  • lilanfeng1991
  • 2014年11月06日 14:58
  • 1780

Android常用五大布局属性控制

一、LinearLayout(线性布局) 提供了控件水平垂直排列的模型,同时可以通过设置子控件的weight布局参数控制各个控件在布局中的相对大 小。 水平(vertical)垂直(...
  • u011200604
  • u011200604
  • 2016年07月21日 13:53
  • 5453

关联规则算法(The Apriori algorithm)详解

http://www.cnblogs.com/junyuhuang/p/5572364.html 关联规则算法(The Apriori algorithm)详解 一、前言 ...
  • kuailexiaoziwqx
  • kuailexiaoziwqx
  • 2016年08月16日 14:55
  • 517

iOS属性字符串封装库

  • 2015年09月09日 11:05
  • 99KB
  • 下载

开放-封闭原则详解--七大面向对象设计原则(5)

开闭原则来源:        在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试...
  • fanyun_01
  • fanyun_01
  • 2016年07月16日 07:20
  • 544

关于如何识别平面内封闭区间的问题(ue4,c++)

问题描述:通过鼠标在平面上不断点击会得到一个线段集合S,编写一个算法,识别出其中的每一个不可分割的小的封闭区域S(i),输出每一个小区域的点集合(顺或者逆时针)。...
  • qq_22824481
  • qq_22824481
  • 2017年03月26日 17:37
  • 952

浅谈数据挖掘中的关联规则挖掘

数据挖掘是指以某种方式分析数据源,从中发现一些潜在的有用的信息,所以数据挖掘又称作知识发现,而关联规则挖掘则是数据挖掘中的一个很重要的课题,顾名思义,它是从数据背后发现事物之间可能存在的关联或者联系。...
  • qq_36330643
  • qq_36330643
  • 2017年09月07日 10:11
  • 436

封装

Java 浅析三大特性之一封装 在说Java 三个特性之前,我们先了解一下什么是面向对象,以及为什么Java是面向对象的语言。 面向对象是区别于面向过程的一种编程的思想。我们可以通...
  • qq_41602275
  • qq_41602275
  • 2018年01月08日 09:17
  • 11

Java中的向上转型和向下转型

转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展。 向上转型:子类引用的对...
  • yangquanhui1991
  • yangquanhui1991
  • 2015年11月06日 17:41
  • 2515

java设计模式_开放封闭原则

一、什么是开放封闭原则 开放封闭原则(Open-Closed Principle):一个软件实体 应当对扩展开放,则修改关闭。 在设计一个模块时,应当使得这个模块可以在不被修 改的前提下被扩...
  • wwww_com
  • wwww_com
  • 2016年08月11日 21:26
  • 779
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关联规则挖掘——Apriori算法
举报原因:
原因补充:

(最多只允许输入30个字)