使用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算法需要经常扫描全表,效率并不算高。

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

  1. apriori算法c++_使用Apriori进行关联分析

    目录 1.名词概念 2.频繁项集发现 3.Apriori算法关联分析 4.代码实现 5.参考文章   通过组合交叉变量制定风控策略时有两种方法:一是通过决策树分箱进行变量交叉,可以见文章一个函数实现自 ...

  2. 使用Apriori进行关联分析(一)

    使用Apriori进行关联分析(一) 大型超市有海量交易数据,我们可以通过聚类算法寻找购买相似物品的人群,从而为特定人群提供更具个性化的服务.但是对于超市来讲,更有价值的是如何找出商品的隐藏关联,从而 ...

  3. 使用Apriori进行关联分析

    使用Apriori进行关联分析 最典型的关联分析的案例就是沃尔玛的"啤酒与尿布"的故事,这个看起来完全不搭嘎的商品在经过对过去一年的数据分析后发现周四晚上奶爸们会来超市采购尿布同时 ...

  4. Apriori进行关联分析

    一.术语解释 关联分析:从大规模数据集中挖掘物品之间的隐含关系 频繁项集:经常出现在一块的物品集合 关联规则:暗示两种物品之间可能存在很强的关联关系 项集支持度:数据集中包含该项集的记录比例(这里可以 ...

  5. 机器学习实战(十)Apriori(关联分析)

    目录 0. 前言 1. Apriori 算法寻找频繁项集 2. 从频繁项集中挖掘关联规则 3. 实战案例 3.1. apriori算法发现频繁项集和关联规则 学习完机器学习实战的Apriori,简单的 ...

  6. GWAs——全基因组关联分析二(质控2)

    接上文GWAs--全基因组关联分析(质控1),此数据集模拟的是祖先来自欧洲西北部的犹他州居民,所以需要将没有欧洲背景的个体从数据集中剔除,即控制群体结构(Population Stratificati ...

  7. java频繁项集挖掘数据关联_数据挖掘之关联分析二(频繁项集的产生)

    频繁项集的产生 格结构(lattice structure)常常用来表示所有可能的项集. 发现频繁项集的一个原始方法是确定格结构中每个候选项集的支持度.但是工作量比较大.另外有几种方法可以降低产生频繁 ...

  8. 使用Apriori算法进行关联分析

    目录 1.名词概念 2.频繁项集发现 3.Apriori算法关联分析 4.代码实现 5.参考文章   通过组合交叉变量制定风控策略时有两种方法:一是通过决策树分箱进行变量交叉,可以见文章一个函数实现自 ...

  9. python apriori算法 sklearn_使用Apriori算法进行关联分析

    目录 1.名词概念 2.频繁项集发现 3.Apriori算法关联分析 4.代码实现 5.参考文章 通过组合交叉变量制定风控策略时有两种方法:一是通过决策树分箱进行变量交叉,可以见文章 假设一个简单的交 ...

最新文章

  1. 《虚拟化安全解决方案》一2.3 在Windows Server 2008上配置Microsoft Hyper-V
  2. 遥感图像+CNN,预测区域人口收入水平
  3. 取没有date的邮件发送时间
  4. pandas使用reindex函数为日期索引中有缺失日期的dataframe进行索引重置(所有日期都连续)、并使用fill_value参数为行进行默认填充
  5. FewRel 2.0数据集:以近知远,以一知万,少次学习新挑战
  6. python语言支持函数式编程_python是函数式语言么
  7. 印象大使_基本服务-使用大使网关
  8. 前端程序员书桌上不可缺少的CSS书籍
  9. 第五季1:AP模式USB-WIFI网卡移植与测试
  10. Android 6.0 设备强制要求开启全盘加密
  11. javascript图片库威力增强版
  12. 程序员中年危机的破解之道
  13. mysql的sql性能分析器
  14. element ui的table组件在鼠标滑动时边框线消失的解决
  15. Cplex安装教程与使用介绍
  16. axi时序图_AXI总线学习
  17. python tkinter ttk的使用(上)
  18. 使用protobuf_example_addressbook.proto项目时的问题:PROTOBUF_USE_DLLS
  19. AWB(Attention WaveBlock)
  20. 中国-省-市三级地图及世界地图在线编辑可视化工具上线

热门文章

  1. Oracle 常用的一些函数
  2. 三个线程按顺序输出数字
  3. leetcode 383. 赎金信 思考分析
  4. oo0ooo0ooo0oo_OoO的完整形式是什么?
  5. stl中copy()函数_std :: rotate_copy()函数以及C ++ STL中的示例
  6. Java RandomAccessFile writeBytes()方法与示例
  7. 小学计算机教学教师培训,例谈小学信息技术课堂的有效教学
  8. c++怎么将文件中的数据读出并赋值给字符串_web前端开发过程中如何写JavaScript程序?...
  9. 动态规划-01背包问题详解
  10. Effective C++学习第十一天