数据挖掘系列(1)关联规则挖掘基本概念与Aprior算法

一句话+一张图——说清楚Aprioir关联规则算法 一句话 关联分析(关联规则学习): 从大规模数据集中寻找物品间的隐含关系被称作 关联分析(associati analysis) 或者 关联规则学习(association rule learning) 一张图 解释一下这张图: 在关联规则Aprioir算法中,有两个很重要的概念,分别是频繁项集(frequent item sets),关联规则(associational rules)... 阅读详情

关联规则挖掘在电商、零售、大气物理、生物医学已经有了广泛的应用,本篇文章将介绍一些基本知识和Aprori算法。

 啤酒与尿布的故事已经成为了关联规则挖掘的经典案例,还有人专门出了一本书《啤酒与尿布》,虽然说这个故事是哈弗商学院杜撰出来的,但确实能很好的解释关联规则挖掘的原理。我们这里以一个超市购物篮迷你数据集来解释关联规则挖掘的基本概念:

TID Items
T1 {牛奶,面包}
T2 {面包,尿布,啤酒,鸡蛋}
T3 {牛奶,尿布,啤酒,可乐}
T4 {面包,牛奶,尿布,啤酒}
T5 {面包,牛奶,尿布,可乐}

   表中的每一行代表一次购买清单(注意你购买十盒牛奶也只计一次,即只记录某个商品的出现与否)。数据记录的所有项的集合称为总项集,上表中的总项集S={牛奶,面包,尿布,啤酒,鸡蛋,可乐}。

 一、关联规则、自信度、自持度的定义

  关联规则就是有关联的规则,形式是这样定义的:两个不相交的非空集合X、Y,如果有X-->Y,就说X-->Y是一条关联规则。举个例子,在上面的表中,我们发现购买啤酒就一定会购买尿布,{啤酒}-->{尿布}就是一条关联规则。关联规则的强度用支持度(support)和自信度(confidence)来描述,

   支持度的定义:support(X-->Y) = |X交Y|/N=集合X与集合Y中的项在一条记录中同时出现的次数/数据记录的个数。例如:support({啤酒}-->{尿布}) = 啤酒和尿布同时出现的次数/数据记录数 = 3/5=60%。

  自信度的定义:confidence(X-->Y) = |X交Y|/|X| = 集合X与集合Y中的项在一条记录中同时出现的次数/集合X出现的个数 。例如:confidence({啤酒}-->{尿布}) = 啤酒和尿布同时出现的次数/啤酒出现的次数=3/3=100%;confidence({尿布}-->{啤酒}) = 啤酒和尿布同时出现的次数/尿布出现的次数 = 3/4 = 75%。

  这里定义的支持度和自信度都是相对的支持度和自信度,不是绝对支持度,绝对支持度abs_support = 数据记录数N*support。

  支持度和自信度越高,说明规则越强,关联规则挖掘就是挖掘出满足一定强度的规则。

二、关联规则挖掘的定义与步骤

  关联规则挖掘的定义:给定一个交易数据集T,找出其中所有支持度support >= min_support、自信度confidence >= min_confidence的关联规则。

  有一个简单而粗鲁的方法可以找出所需要的规则,那就是穷举项集的所有组合,并测试每个组合是否满足条件,一个元素个数为n的项集的组合个数为2^n-1(除去空集),所需要的时间复杂度明显为O(2^N),对于普通的超市,其商品的项集数也在1万以上,用指数时间复杂度的算法不能在可接受的时间内解决问题。怎样快速挖出满足条件的关联规则是关联挖掘的需要解决的主要问题。

  仔细想一下,我们会发现对于{啤酒-->尿布},{尿布-->啤酒}这两个规则的支持度实际上只需要计算{尿布,啤酒}的支持度,即它们交集的支持度。于是我们把关联规则挖掘分两步进行:

  1)生成频繁项集

  这一阶段找出所有满足最小支持度的项集,找出的这些项集称为频繁项集。

  2)生成规则

  在上一步产生的频繁项集的基础上生成满足最小自信度的规则,产生的规则称为强规则。

  关联规则挖掘所花费的时间主要是在生成频繁项集上,因为找出的频繁项集往往不会很多,利用频繁项集生成规则也就不会花太多的时间,而生成频繁项集需要测试很多的备选项集,如果不加优化,所需的时间是O(2^N)。

三、Apriori定律

  为了减少频繁项集的生成时间,我们应该尽早的消除一些完全不可能是频繁项集的集合,Apriori的两条定律就是干这事的。

  Apriori定律1):如果一个集合是频繁项集,则它的所有子集都是频繁项集。举例:假设一个集合{A,B}是频繁项集,即A、B同时出现在一条记录的次数大于等于最小支持度min_support,则它的子集{A},{B}出现次数必定大于等于min_support,即它的子集都是频繁项集。

  Apriori定律2):如果一个集合不是频繁项集,则它的所有超集都不是频繁项集。举例:假设集合{A}不是频繁项集,即A出现的次数小于min_support,则它的任何超集如{A,B}出现的次数必定小于min_support,因此其超集必定也不是频繁项集。

  利用这两条定律,我们抛掉很多的候选项集,Apriori算法就是利用这两个定理来实现快速挖掘频繁项集的。

四、Apriori算法

  Apriori是由a priori合并而来的,它的意思是后面的是在前面的基础上推出来的,即先验推导,怎么个先验法,其实就是二级频繁项集是在一级频繁项集的基础上产生的,三级频繁项集是在二级频繁项集的基础上产生的,以此类推。

  Apriori算法属于候选消除算法,是一个生成候选集、消除不满足条件的候选集、并不断循环直到不再产生候选集的过程。

  

  上面的图演示了Apriori算法的过程,注意看由二级频繁项集生成三级候选项集时,没有{牛奶,面包,啤酒},那是因为{面包,啤酒}不是二级频繁项集,这里利用了Apriori定理。最后生成三级频繁项集后,没有更高一级的候选项集,因此整个算法结束,{牛奶,面包,尿布}是最大频繁子集。

  算法的思想知道了,这里也就不上伪代码了,我认为理解了算法的思想后,子集去构思实现才能理解更深刻,这里贴一下我的关键代码:

复制代码
 1 public static void main(String[] args) {
 2         // TODO Auto-generated method stub
 3         record = getRecord();// 获取原始数据记录
 4         List<List<String>> cItemset = findFirstCandidate();// 获取第一次的备选集
 5         List<List<String>> lItemset = getSupportedItemset(cItemset);// 获取备选集cItemset满足支持的集合
 6 
 7         while (endTag != true) {// 只要能继续挖掘
 8             List<List<String>> ckItemset = getNextCandidate(lItemset);// 获取第下一次的备选集
 9             List<List<String>> lkItemset = getSupportedItemset(ckItemset);// 获取备选集cItemset满足支持的集合
10             getConfidencedItemset(lkItemset, lItemset, dkCountMap, dCountMap);// 获取备选集cItemset满足置信度的集合
11             if (confItemset.size() != 0)// 满足置信度的集合不为空
12                 printConfItemset(confItemset);// 打印满足置信度的集合
13             confItemset.clear();// 清空置信度的集合
14             cItemset = ckItemset;// 保存数据,为下次循环迭代准备
15             lItemset = lkItemset;
16             dCountMap.clear();
17             dCountMap.putAll(dkCountMap);
18         }
复制代码

  如果想看完整的代码,可以查看我的github,数据集的格式跟本文所述的略有不通,但不影响对算法的理解。

  下一篇将介绍效率更高的算法--FP-Grow算法。

参考文献:

  [1].Pang-Ning Tan,Michael Steinbach. Introduction to Data Mining.

  [2].HanJiaWei. Data Mining: concept and  techniques.

  

基于Aprion算法的电影推荐 前言: 最近在参加比赛,选了推荐系统的赛题。接触到了各种推荐系统的算法,学习了许多大神的论文。非常感谢他们的科研,让我们能更注重于应用。这篇文章权当做个引子,后续会补充我比赛的具体。 知识储备: Apriori算法可以说是经典的亲和性分析算法。它只从数据集中频繁出现的商品中选取共同出 现的商品组成频繁项集(frequent itemset),避免了上述复杂度呈指数级增长的问题。一... 阅读详情

相关推荐

数据挖掘十大算法之Apriori算法

文章目录1. “啤酒与尿布”的案例2. Aprior算法核心术语事物集记录(事务)项目(项)项目集(项集)K项集支持度(Support)置信度(Confidence)最小支持度(min_support)最小置信度(min_confidence)提升度频繁K项(目)集候选K项(目)集3. Aprior算法的三大性质(关联规则的三大性质)4. Aprior算法实现过程5. 数据挖掘5.1 寻找关联属性5.2 生成关联规则5.3 更加严谨的栗子6. Aprior算法的优缺点6.1 改进Aprior算法6.2 F

fengxiandada的博客 1万+

头歌(educoder)机器学习实践:超市商品购买关联规则分析

超市购物清单关联规则分析

qq_46023503的博客 4888

关联规则挖掘算法Aprior和FPGrowth对比与改进

Aprior算法和FPGrowth算法同属于关联规则挖掘算法,但Aprior是基于广度优先的,而FPGrowth是基于深度优先的,即Aprior算法需要建立K项集,然后扫描数据库;而FPGrowth算法则是扫描数据库,然后查找频繁项集。Aprior算法Aprior算法的原理和实现参见http://blog.youkuaiyun.com/olaking/article/details/42810865和http:

Olaking的专栏 4248

头歌平台(EduCoder)—— 数据挖掘算法原理与实践:数据预处理

数据挖掘,就是从数据中学习到规律,再将学习到的规律对未知的数据进行预测。但是我们最开始获取的数据其中绝大多数是“有毛病”的,不利于后期进行分析,所以我们在分析前需要进行数据的预处理。sklearn.preprocessing包提供了几个常用的函数和转换类,用它们将一个原始的特征向量转化为一个更适于数据分析的表示形式。一般来说,学习算法收益于数据集的标准形式。如果数据中存在异常点,稳健的数据规范或转换是更适合的。 本实训的目的是掌握好sklearn中的数据预处理方法。 第1关:标准化 ...

dbdxmm的博客 1万+

【数据挖掘】Aprior算法笔记

关联规则我的理解是,关联规则表示是多种事物之间的联系。这样讲有点模糊,看一下具体的吧。我们一般会说“一般买了牙膏的人还喜欢再买牙刷”,“很多人买了锅子一定会再买一个锅盖”,这样的联系就叫做关联规则,也就是可以表示为“牙膏=>牙刷”,“锅子=>锅盖”。请注意,这里的“一般”、“很多人”这种不确定的词汇,可以通过数据挖掘给出确定的比例或者概率,也就是之后谈到支持度(support)置信度(confide

Seek Joy's IT Notebook 1371

数据挖掘回归分析第五章学习通习题

B. 都是不让人感兴趣的;A. 其支持度小于阈值;C. 其支持度大于阈值;D. 对异常数据项敏感;A. 关联规则发现;D. 自然语言处理;

qq_51688022的博客 2583

数据挖掘系列 (1) 关联规则挖掘基本概念与 Aprior 算法

转自:http://www.cnblogs.com/fengfenggirl/p/associate_apriori.html 数据挖掘系列(1)关联规则挖掘基本概念与Aprior算法 我计划整理数据挖掘的基本概念和算法,包括关联规则挖掘、分类、聚类的常用算法,敬请期待。今天讲的是关联规则挖掘的最基本的知识。  关联规则挖掘在电商、零售、大气物理、生物医学已经有了广泛的应

宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。 1015

大型数据库中的关联规则挖掘

大型数据库中的关联规则挖掘,大型数据库中的关联规则挖掘,大型数据库中的关联规则挖掘

数据挖掘|关联规则Apriori算法详解及其在中医医案中的应用

由于本菜鸡所学专业为中医院校的医学信息工程,所以接触较多的是利用多种算法处理中医医案数据。本文简单介绍传统数据挖掘关联规则算法中的Apriori算法,以及在挖掘中医医案辨证规律中的应用。并简单分析传统算法缺点,提出简要的改进思路。 文章目录一、关联规则简介二、Apriori算法简介三、Apriori步骤Step1 找频繁项集Step2 找关联规则四、算法缺点五、中医药数据挖掘的改进方法 一、关联规...

qq_42752651的博客 4653

数据挖掘中关联规则之Aprior算法的实现

这是一个关于数据挖掘中关联规则之Aprior算法的实现。这是从网上找到的一个别人写好的程序,本人只是对这个程序进行了轻微的修改;本人忘记了这个程序是由谁写的,所以如果您发现这个程序的原创作者,可以联系本人,本人深表谢意。

Cadence 17.2 OrCAD原理图库实战:从零创建电阻/电容/LED元件(附封装技巧)

本文以Cadence 17.2 OrCAD为核心,详细讲解了如何从零开始工程化地创建电阻、电容、LED等原理图库元件。内容涵盖库架构设计、符号绘制、引脚属性管理、封装关联技巧以及设计规则检查,旨在帮助硬件工程师构建规范、可复用且易于维护的元件库,为高效PCB设计奠定坚实基础。

weixin_29195615的博客 400
上一篇: Python字符编码详解
下一篇: 数据挖掘系列(2)--关联规则FpGrowth算法
youbo_sun
博客等级 码龄12年 20粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值