使用Apriori进行关联分析(二)

使用Apriori进行关联分析(二)

  书接上文(使用Apriori进行关联分析(一)),介绍如何挖掘关联规则。

发现关联规则

  我们的目标是通过频繁项集挖掘到隐藏的关联规则。

  所谓关联规则,指通过某个元素集推导出另一个元素集。比如有一个频繁项集{底板,胶皮,胶水},那么一个可能的关联规则是{底板,胶皮}→{胶水},即如果客户购买了底板和胶皮,则该客户有较大概率购买胶水。这个频繁项集可以推导出6个关联规则:

  {底板,胶水}→{胶皮},

  {底板,胶皮}→{胶水},

  {胶皮,胶水}→{底板},

  {底板}→{胶水, 胶皮},

  {胶水}→{底板, 胶皮},

  {胶皮}→{底板, 胶水}

  箭头左边的集合称为“前件”,右边集合称为“后件”,根据前件会有较大概率推导出后件,这个概率就是之前提到的置信度。需要注意的是,如果A→B成立,B→A不一定成立。

  一个具有N个元素的频繁项集,共有M个可能的关联规则:

  下图是一个频繁4项集的所有关联规则网格示意图, 

  上图中深色区域表示低可信度规则,如果012→3是一条低可信度规则,则所有其它3为后件的规则都是低可信度。这需要从可信度的概念去理解,Confidence(012→3) = P(3|0,1,2),Confidence(01→23)=P(2,3|0,1),P(3|0,1,2) >= P(2,3|0,1)。由此可以对关联规则做剪枝处理。

  还是以上篇的超市交易数据为例,我们发现了如下的频繁项集:

  对于寻找关联规则来说,频繁1项集L1没有用处,因为L1中的每个集合仅有一个数据项,至少有两个数据项才能生成A→B这样的关联规则。

  当最小置信度取0.5时,L2最终能够挖掘出9条关联规则:

  从频繁3项集开始,挖掘的过程就较为复杂。

  假设有一个频繁4项集(这是杜撰的,文中的数据不能生成L4),其挖掘过程如下:

  因为书中的代码假设购买商品是有顺序的,所以在生成3后件时,{P2,P4}和{P3,P4}并不能生成{P2,P23,P4},如果想去掉假设,需要使用上篇中改进后的代码。

  发掘关联规则的代码如下:

复制代码
 1 #生成关联规则
 2 #L: 频繁项集列表
 3 #supportData: 包含频繁项集支持数据的字典
 4 #minConf 最小置信度
 5 def generateRules(L, supportData, minConf=0.7):
 6     #包含置信度的规则列表
 7     bigRuleList = []
 8     #从频繁二项集开始遍历
 9     for i in range(1, len(L)):
10         for freqSet in L[i]:
11             H1 = [frozenset([item]) for item in freqSet]
12             if (i > 1):
13                 rulesFromConseq(freqSet, H1, supportData, bigRuleList, minConf)
14             else:
15                 calcConf(freqSet, H1, supportData, bigRuleList, minConf)
16     return bigRuleList
17 
18 
19 # 计算是否满足最小可信度
20 def calcConf(freqSet, H, supportData, brl, minConf=0.7):
21     prunedH = []
22     #用每个conseq作为后件
23     for conseq in H:
24         # 计算置信度
25         conf = supportData[freqSet] / supportData[freqSet - conseq]
26         if conf >= minConf:
27             print(freqSet - conseq, '-->', conseq, 'conf:', conf)
28             # 元组中的三个元素:前件、后件、置信度
29             brl.append((freqSet - conseq, conseq, conf))
30             prunedH.append(conseq)
31 
32     #返回后件列表
33     return prunedH
34 
35 
36 # 对规则进行评估
37 def rulesFromConseq(freqSet, H, supportData, brl, minConf=0.7):
38     m = len(H[0])
39     if (len(freqSet) > (m + 1)):
40         Hmp1 = aprioriGen(H, m + 1)
41        # print(1,H, Hmp1)
42         Hmp1 = calcConf(freqSet, Hmp1, supportData, brl, minConf)
43         if (len(Hmp1) > 0):
44             rulesFromConseq(freqSet, Hmp1, supportData, brl, minConf)
复制代码

 

  由此可以看到,apriori算法需要经常扫描全表,效率并不算高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学笔记3——导数3(隐函数的导数)

数学笔记3——导数3(隐函数的导数)幂函数的扩展形式f(x) xn的导数:f’(x) nxn-1,n是整数,该公式对f(x) xm/n, m,n 是整数同样适用。推导过程:什么是隐函数引自知乎:“如果方程F(x,y)0能确定y…

机器学习13大规模数据集

大型数据集的学习(Learning With Large Datasets) 如果我们有一个低方差的模型, 增加数据集的规模可以帮助你获得更好的结果。 我们应该怎样应对一个有 100 万条记录的训练集? 以线性回归模型为例,每一次梯度下降…

Java07多线程

14 多线程 操作系统的多任务(multitasking):在同一时刻运行多个程序的能力。 多线程在较低的层次上扩展了多任务的概念:一个程序同时执行多个任务。 通常,每一个任务称为一个线程(tread)&…

MySQL字段拼接Concat

有时候,从数据库中拿出的数据并不是我们想要的格式,比如,有以下的vendors表 如果,想以 name (location)的格式展现出来,那么就要用到MySQL的Concat了。 Concat()拼接串,即把多个串连接起来形成一个较长的串…

使用pycharm调用模块后字体变灰 是什么原因呢?

使用pycharm调用模块后字体变灰 是什么原因呢?点击小灯泡提示出现以下内容:This inspection detects names that should resolve but dont. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases. Top-l…

操作系统01概述

第一章 概论 《Operating System Internals and Design Principles》 《Applied Operating System Concepts》 操作系统——裸机上的第一层软件,它是对硬件系统功能的首次扩充,填补人与机器之间的鸿沟。 1.1 操作系统与计算机同在 1.2 对操作系统的…

Linux re

正则表达式并不是一个工具程序,而是一个字符串处理的标准依据,如果想要以正则表达式的方式处理字符串,就得使用支持正则表达式的工具,例如grep、vi、sed、asw等。 注意:ls不支持正则表达式。 grep 正则表达式: 注意gr…

操作系统02进程管理Process_Description_and_Control

作业的基本概念:用户再一次计算过程中或一次事务处理过程中,要求计算机系统所做的工作的集合。 包含多个程序、多个数据、作业控制说明书 系统调用时操作系统提供给编程人员的唯一接口。 1、文件操作类; 2、进程控制类; 3、资…

蓝桥杯 方格填数(全排列+图形补齐)

方格填数 如下的10个格子 填入0~9的数字,同一数字不能重复填。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数。注意:你提交的应该是一个…

操作系统03进程管理Process_Scheduling

2 Process Scheduling >Type of scheduling >Scheduling Criteria (准则) >Scheduling Algorithm >Real-Time Scheduling (嵌入式系统) 2.1 Learning Objectives By the end of this lecture you should be able to Explain what is Response Time 响应时间-…

skimage库需要依赖 numpy+mkl 和scipy

skimage库需要依赖 numpymkl 和scipy1、打开运行,输入cmd回车,输入python回车,查看python版本2、在https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy 中,根据自己python版本下载需要的包 (因为我的是python 2.7.13 …

操作系统04进程同步与通信

4.1 进程间的相互作用 4.1.1 进程间的联系资源共享关系相互合作关系临界资源应互斥访问。临界区:不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它们进行访问。把在每个进程中访问临界资源的那段代码称为临界资源区。显然&#x…

oracle迁移到greenplum的方案

oracle数据库是一种关系型数据库管理系统,在数据库领域一直处于领先的地位,适合于大型项目的开发;银行、电信、电商、金融等各领域都大量使用Oracle数据库。 greenplum是一款开源的分布式数据库存储解决方案,主要关注数据仓库和BI…

CNN框架的搭建及各个参数的调节

本文代码下载地址:我的github本文主要讲解将CNN应用于人脸识别的流程,程序基于PythonnumpytheanoPIL开发,采用类似LeNet5的CNN模型,应用于olivettifaces人脸数据库,实现人脸识别的功能,模型的误差降到了5%以…

操作系统05死锁

进程管理4--Deadlock and Starvation Concurrency: Deadlock and Starvation 内容提要 >产生死锁与饥饿的原因 >解决死锁的方法 >死锁/同步的经典问题:哲学家进餐问题 Deadlock 系统的一种随机性错误 Permanent blocking of a set of processes that eith…

CNN tensorflow 人脸识别

数据材料这是一个小型的人脸数据库,一共有40个人,每个人有10张照片作为样本数据。这些图片都是黑白照片,意味着这些图片都只有灰度0-255,没有rgb三通道。于是我们需要对这张大图片切分成一个个的小脸。整张图片大小是1190 942&am…

数据结构01绪论

第一章绪论 1.1 什么是数据结构 数据结构是一门研究非数值计算的程序设计问题中,计算机的操作对象以及他们之间的关系和操作的学科。 面向过程程序数据结构算法 数据结构是介于数学、计算机硬件、计算机软件三者之间的一门核心课程。 数据结构是程序设计、编译…

css3动画、2D与3D效果

1.兼容性 css3针对同一样式在不同浏览器的兼容 需要在样式属性前加上内核前缀; 谷歌(chrome) -webkit-transition: Opera(欧鹏) -o-transition: Firefox(火狐) -moz-transition Ie -ms-tr…

数据结构02线性表

第二章 线性表 C中STL顺序表:vector http://blog.csdn.net/weixin_37289816/article/details/54710677链表:list http://blog.csdn.net/weixin_37289816/article/details/54773406在数据元素的非空有限集中: (1)存在唯一一个被称作“第…

训练一个神经网络 能让她认得我

写个神经网络,让她认得我(๑•ᴗ•๑)(Tensorflow,opencv,dlib,cnn,人脸识别) 这段时间正在学习tensorflow的卷积神经网络部分,为了对卷积神经网络能够有一个更深的了解,自己动手实现一个例程是比较好的方式,所以就选了一个这样比…