《机器学习实战》chapter 11 使用apriori算法进行关联分析
代码部分:
# !/usr/bin/env python
# -*- coding: utf-8 -*-def loadData():return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5, ], [2, 5]]def createC1(dataSet):"""构建大小为1的所有候选项集的集合:param dataSet::return:"""C1 = []for transaction in dataSet:for item in transaction:if not [item] in C1:C1.append([item])C1.sort()return list(map(frozenset, C1))def scanD(D, Ck, minSupport):"""Ck中的元素经过最小支持度过滤得到Lk,和每个元素的支持度:param D: 数据集:param Ck::param minSupport: 最小支持度(过滤):return:过程:对数据集中的每条交易记录tran对每个候选项集can:检查一下can是否是tran的子集:如果是:则增加can的计数值如果不是:把can的值设为1对每个候选项集:如果其支持度不低于最小值,则保留该项集返回所有频繁项集列表"""ssCnt = {}for tid in D:for can in Ck:if can.issubset(tid):if can not in ssCnt:ssCnt[can] = 1else:ssCnt[can] += 1numItems = float(len(D))retList = []supportData = {}for key in ssCnt:support = ssCnt[key] / numItemsif support >= minSupport:retList.insert(0, key)supportData[key] = supportreturn retList, supportDatadef aprioriGen(Lk, k):"""合并频繁项集为k个元素:param Lk: 频繁项集列表:param k: 项集元素个数:return:"""retList = []lenLk = len(Lk)for i in range(lenLk):for j in range(i+1, lenLk):# 每一个项集同其后面的项集做比较# 如果前k-2个元素相同(取不到k-2),则合并为k个元素的项集,添加到retList中L1 = list(Lk[i])[:k-2]L2 = list(Lk[j])[:k-2]L1.sort()L2.sort()if L1 == L2:retList.append(Lk[i] | Lk[j])return retListdef Apriori(dataSet, minSupport=0.5):""":param dataSet: 数据集:param minSupport: 最小支持度:return:过程:C1->L1->C2->L2->C3->L3-> ... ->Ck->Lk"""# 单个物品项组成的集合C1 = createC1(dataSet)# 集合表示的数据集DD = list(map(set, dataSet))#L1, supportData = scanD(D, C1, minSupport)L = [L1]k = 2while len(L[k - 2]) > 0:Ck = aprioriGen(L[k - 2], k)Lk, supK = scanD(D, Ck, minSupport)supportData.update(supK)L.append(Lk)k += 1return L, supportDatadef calcConf(freqSet, H, supportData, bigRuleList, minConf=0.7):"""从频繁项集freqSet,计算关联规则(freqSet - H) --> H的置信度并过滤置信度低于最小置信度阈值的规则:param freqSet: 频繁项集:param H: 出现在规则右部:param supportData: 支持度字典:param bigRuleList: 关联规则列表:param minConf: 最小置信度阈值:return: 满足最小可信度要求的规则列表"""# 初始化满足最小可信度要求的规则列表prunedH = []for conseq in H:conf = supportData[freqSet] / supportData[freqSet - conseq]if conf >= minConf:print(freqSet-conseq, "-->", conseq, "conf : ", conf)bigRuleList.append((freqSet - conseq, conseq, conf))# 与bigRuleList对应的置信度值列表prunedH.append(conseq)return prunedHdef rulesFromConseq(freqSet, H, supportData, bigRuleList, minConf=0.7):"""由于freqSet中的元素个数大于等于3,计算规则的右部为多个元素的情形:param freqSet: 频繁项集:param H: 出现在规则右部的元素列表:param supportData: 支持度列表:param bigRuleList: 关联规则列表:param minConf: 最小置信度阈值:return:"""m = len(H[0])# m + 1,其实示一个递归变量,递归地增加右部元素个数if len(freqSet) > (m + 1):# 合并元素,任意组合成m+1个元素的项集Hmp1 = aprioriGen(H, m + 1)# 过滤关联规则(freqSet - Hmp1) --> Hmp1的置信度小于最小置信度阈值的规则# 规则右部有m + 1个元素Hmp1 = calcConf(freqSet, Hmp1, supportData, bigRuleList, minConf)# 递归累加右部元素个数if len(Hmp1) > 1:rulesFromConseq(freqSet, Hmp1, supportData, bigRuleList, minConf)else:# 当右部元素个数和频繁项集freqSet的长度一样时,不再划分,返回returndef generateRules(L, supportData, minConf=0.7):"""基于给定的频繁项集L和支持度supportData,计算满足最小支持度阈值的规则:param L: 频繁项集列表:param supportData: 包含那些频繁项集支持数据的字典:param minConf: 最小置信度阈值:return: 包含可信度的规则列表"""# 初始化规则存放列表bigRuleList = []# 遍历频繁项集for i in range(1, len(L)):#for freqSet in L[i]:# 只包含单个元素集合的列表H1H1 = [frozenset([item]) for item in freqSet]# 过滤关联规则(freqSet - H1) --> H1的置信度小于最小置信度阈值的规则# H1是右部为单个元素的情形H1 = calcConf(freqSet, H1, supportData, bigRuleList, minConf)if i > 1:# 如果频繁项集中元素个数大于等于3,就需要考虑右部为多个元素的情形rulesFromConseq(freqSet, H1, supportData, bigRuleList, minConf)return bigRuleListdataSet = loadData()
L, supportData = Apriori(dataSet)
rules = generateRules(L, supportData, minConf=0.7)
print(rules)
《机器学习实战》chapter 11 使用apriori算法进行关联分析相关推荐
- 机器学习实战---读书笔记: 第11章 使用Apriori算法进行关联分析---2---从频繁项集中挖掘关联规则
#!/usr/bin/env python # encoding: utf-8''' <<机器学习实战>> 读书笔记 第11章 使用Apriori算法进行关联分析---从频繁项 ...
- Apriori算法进行关联分析实战
使用Apriori算法进行关联分析(层次聚类) 一.基础知识 1.关联分析定义及存在的问题 定义:从大规模的数据集中寻找物品间的隐含关系,被称为关联分析或关联规则学习. 关联分析存在的主要问题:主要问 ...
- 【机器学习】Apriori 算法进行关联分析和FP-growth算法
[机器学习]Apriori 算法进行关联分析和FP-growth算法 文章目录 1 关联分析 2 FP-growth算法理解和实现 3 FP增长算法的频繁项集产生 4 FP-Growth关联分析算法在 ...
- 使用Apriori算法进行关联分析
目录 1.名词概念 2.频繁项集发现 3.Apriori算法关联分析 4.代码实现 5.参考文章 通过组合交叉变量制定风控策略时有两种方法:一是通过决策树分箱进行变量交叉,可以见文章一个函数实现自 ...
- 《机器学习实战》之十一——使用Apriori算法进行关联分析
Apriori算法目录 一.前言 二.关联分析 三.Apriori原理 四.利用Apriori算法来发现频繁集 1.Apriori算法及实例描述 2.生成候选项集 2.组织完整的Apriori算法 五 ...
- 机器学习——使用Apriori算法进行关联分析
从大规模的数据集中寻找隐含关系被称作为关联分析(association analysis)或者关联规则学习(association rule learning). Apriori算法 优点:易编码实现 ...
- 机器学习基础(三十二) —— 使用 Apriori 算法进行关联分析
Apriori 在拉丁语中指"来自以前".当定义问题时,通常会使用先验知识或者假设,这被称作"一个先验"(a priori).在贝叶斯统计中,使用先验知识作为条 ...
- 使用 Apriori 算法进行关联分析(机器学习)
关联分析 关联分析是一种在大规模数据集中寻找有趣关系的任务. 这些关系可以有两种形式: 频繁项集(frequent item sets): 经常出现在一块的物品的集合. 关联规则(associatio ...
- Apriori算法进行关联分析(2)
频繁项集及关联规则的应用中,购物.搜索引擎中的查询词等,下面看一个美国国会议员投票的例子. 1. 示例:发现国会投票中的模式 这个例子虽然在数据的获取过程中有点复杂,但我觉得还是很有必要分析下整个过程 ...
最新文章
- 加州最新无人驾驶出租车报告:PonyAI单车运营效率超Waymo
- Android TextView中图文混排设置行间距导致高度不一致问题解决
- Darwin Stream server(DSS服务器)的Relay(中继/转发)设置
- SpringBoot开发最佳实践
- 简单介绍一下solr
- HDU 1754 I Hate It 线段树
- 01_反射_02_反射类的构造方法
- 正式发布!Azure Functions OpenAPI Extension
- java ready_Java PushbackReader ready()用法及代码示例
- 已知两点坐标拾取怎么操作_已知的操作员学习-第4部分
- 华三交换机路由器图标_弱电箱网口不够用,用华三8口千兆交换机搞定
- MusicXML 3.0 (31) - Tab
- EDSR dataloader.py代码问题
- 电脑插入了U盘却读取不出来的方法
- 《周易》乾卦-大象.小象
- ffmpeg 多个音频合并 截取 拆分
- qt 修改.exe文件图标_如何在没有错误的情况下更改压缩的.EXE文件上的图标
- 【数据库】国土空间规划数据库(全域)_模板空库
- 论语 宪问篇(笔记)
- spring4 搭建开发环境
热门文章
- 神策 FM:Airbnb 如何通过用户体验预测用户复购?
- getDeclaredField和getField的区别
- [CODE FESTIVAL 2016]Distance Pairs
- spring boot实现软删除
- [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)
- 友友企业地图(Enterprise MAP)
- 德国Renusol进军南非市场 瞄准屋顶光伏
- 安装补丁出现0xC8000222错误和系统日志中wuaueng.dll SUS20ClientDataStore 无法读取日志文件的错误...
- page和其它几个内置对象(转)
- 2018.8.5 复习笔记