频繁项集挖掘之Apriori算法

①在事务数据搜索每个成员的个数,并剪掉小于最小支持度的项
②计算由①中每2个成员的组合出现的个数,并剪掉小于最小支持度的项
③同理计算由②中有的每3个成员的组合,并剪掉小于最小支持度的项
支持度:个数
置信度confidence(A到B)
=P(BIA)=(A,B)个数/A个数

# coding=utf-8
"""
实现 Apriori 算法,并采用所写程序提取购物篮数据中的 频繁项集 和 强关联规则
参数设置:最小支持度计数 = 4,最小置信度 = 0.6
"""
min_sup = 2
min_conf = 0.6
# 最大 K 项集
K = 3# apriori 算法
def apriori():# 1.读入数据data_set = load_data()# 2.计算每项的支持数C1 = create_C1(data_set)item_count = count_itemset1(data_set, C1)# 3.剪枝,去掉支持数小于最小支持度数的项L1 = generate_L1(item_count)# 4.连接# 5.扫描前一个项集,剪枝# 6.计数,剪枝# 7.重复4-6,直到得到最终的 K 项频繁项集Lk_copy = L1.copy()L = []L.append(Lk_copy)for i in range(2, K + 1):Ci = create_Ck(Lk_copy, i)Li = generate_Lk_by_Ck(Ci, data_set)Lk_copy = Li.copy()L.append(Lk_copy)# 8.输出频繁项集及其支持度数print('频繁项集\t支持度计数')support_data = {}for item in L:for i in item:print(list(i), '\t', item[i])support_data[i] = item[i]# 9.对每个关联规则计算置信度,保留大于最小置信度的频繁项为 强关联规则strong_rules_list = generate_strong_rules(L, support_data, data_set)strong_rules_list.sort(key=lambda result: result[2], reverse=True)print("\nStrong association rule\nX\t\t\tY\t\tconf")for item in strong_rules_list:print(list(item[0]), "\t", list(item[1]), "\t", item[2])# 读入数据
def load_data():# 事务ID 购买商品data = {'001': '面包,黄油,尿布,啤酒', '002': '咖啡,糖,小甜饼,鲑鱼,啤酒','003': '面包,黄油,咖啡,尿布,啤酒,鸡蛋', '004': '面包,黄油,鲑鱼,鸡','005': '鸡蛋,面包,黄油', '006': '鲑鱼,尿布,啤酒','007': '面包,茶,糖鸡蛋', '008': '咖啡,糖,鸡,鸡蛋','009': '面包,尿布,啤酒,盐', '010': '茶,鸡蛋,小甜饼,尿布,啤酒'}data_set = []for key in data:item = data[key].split(',')data_set.append(item)print(data_set)return data_set# 构建 1-项集
def create_C1(data_set):C1 = set()for t in data_set:for item in t:item_set = frozenset([item])C1.add(item_set)return C1# 计算给定数据每项及其支持数,第一次
def count_itemset1(data_set, C1):item_count = {}for data in data_set:for item in C1:if item.issubset(data):if item in item_count:item_count[item] += 1else:item_count[item] = 1return item_count# 生成剪枝后的 L1
def generate_L1(item_count):L1 = {}for i in item_count:if item_count[i] >= min_sup:L1[i] = item_count[i]return L1# 判断是否该剪枝
def is_apriori(Ck_item, Lk_copy):for item in Ck_item:sub_Ck = Ck_item - frozenset([item])if sub_Ck not in Lk_copy:return Falsereturn True# 生成 k 项商品集,连接操作
def create_Ck(Lk_copy, k):Ck = set()len_Lk_copy = len(Lk_copy)list_Lk_copy = list(Lk_copy)for i in range(len_Lk_copy):for j in range(1, len_Lk_copy):l1 = list(list_Lk_copy[i])l2 = list(list_Lk_copy[j])l1.sort()l2.sort()if l1[0:k-2] == l2[0:k-2]:Ck_item = list_Lk_copy[i] | list_Lk_copy[j]# 扫描前一个项集,剪枝if is_apriori(Ck_item, Lk_copy):Ck.add(Ck_item)return Ck# 生成剪枝后的 Lk
def generate_Lk_by_Ck(Ck, data_set):item_count = {}for data in data_set:for item in Ck:if item.issubset(data):if item in item_count:item_count[item] += 1else:item_count[item] = 1Lk2 = {}for i in item_count:if item_count[i] >= min_sup:Lk2[i] = item_count[i]return Lk2# 产生强关联规则
def generate_strong_rules(L, support_data, data_set):strong_rule_list = []sub_set_list = []# print(L)for i in range(0, len(L)):for freq_set in L[i]:for sub_set in sub_set_list:if sub_set.issubset(freq_set):# 计算包含 X 的交易数sub_set_num = 0for item in data_set:if (freq_set - sub_set).issubset(item):sub_set_num += 1conf = support_data[freq_set] / sub_set_numstrong_rule = (freq_set - sub_set, sub_set, conf)if conf >= min_conf and strong_rule not in strong_rule_list:# print(list(freq_set-sub_set), " => ", list(sub_set), "conf: ", conf)strong_rule_list.append(strong_rule)sub_set_list.append(freq_set)return strong_rule_listif __name__ == '__main__':# 运行 Apriori 算法apriori()

结果如下:

Apriori算法个人理解与代码相关推荐

  1. 【机器学习】关联分析Apriori算法详解以及代码实现

    Apriori算法以及统计学基础 什么是关联分析 简单的统计学基础 Apriori输出频繁集 从频繁项集中挖掘关联规则 什么是关联分析 从大规模数据集中寻找物品间的隐含关系被称作关联分析.而寻找物品的 ...

  2. python降维可视化 自编码_deep learning 自编码算法详细理解与代码实现(超详细)...

    在有监督学习中,训练样本是有类别标签的.现在假设我们只有一个没有带类别标签的训练样本集合 ,其中 .自编码神经网络是一种无监督学习算法,它使用了反向传播算法,并让目标值等于输入值,比如 .下图是一个自 ...

  3. apriori算法代码_sklearn(九)apriori 关联规则算法,以及FP-growth 算法

    是什么: apriori算法是第一个关联规则挖掘算法,利用逐层搜索的迭代方法找出数据库中的项集(项的集合)的关系,以形成规则,其过程由连接(类矩阵运算)与剪枝(去掉没必要的中间结果)组成.是一种挖掘关 ...

  4. 关联规则----Apriori算法以及代码实现

    关联规则 概述 关联规则中的几个概念 频繁项集和强规则 误区 Apriori算法 Apriori核心思想 Apriori流程 算法步骤 问题的关键---如何由频繁项集生成候选集 详细例子 生成规则 A ...

  5. 支持度、置信度、提升度、apriori算法理解(简易版)

    关于支持度.置信度.提升度以及apriori算法的理解(简单版) 理解支持度 所谓支持度,就是比如说10个用户购买商品,有8个用户购买商品A,那么商品A的支持度就是80%.支持度越大,关联规则越重要, ...

  6. 利用weka进行数据挖掘——基于Apriori算法的关联规则挖掘实例

    文章目录 1. weka安装 2. 先分析一个Apriori算法的关联规则挖掘实例 3. 利用weka进行数据挖掘 3.1 将数据转为ARFF格式 3.2 利用weka进行分析 4. 参考文章 首先, ...

  7. [DM复习]Apriori算法-国会投票记录关联规则挖掘(上)

    Apriori算法|关联规则挖掘 〇.相关基础概念 1.购物篮数据的二元表示 事务:购物篮数据可以用一个列表来表示,列表中的每一行都对应一个事务 项:表格中的每一列则对应一个数据项 项的二元表示:如果 ...

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

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

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

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

最新文章

  1. Solr部署如何启动
  2. 力扣(LeetCode)刷题,简单题(第6期)
  3. node.js+express,实现RESTful API
  4. C#字典Dictionary排序(顺序、倒序)
  5. Unity FixedUpdate 与 Update 的线程关系实验
  6. 搜狐2012.9.15校园招聘会笔试题
  7. 工资管理信息系统java_java+sql server,工资管理信息系统,源程序+数据库+报告
  8. SAP CRM One Order scheduline buffer handling
  9. Spring_02_AOP初级总结
  10. 网页中文乱码--UTF-8和GB2312互转
  11. php5 数据库框架,数据库 · FastAdmin - 基于ThinkPHP5的极速后台开发框架文档 · 看云...
  12. 十年前乔布斯曾试图颠覆电视行业 如今苹果终于出手了
  13. 使用 ExpandableListView 实现折叠ListView
  14. 清华寒门女孩毕业演讲刷爆网络:世界本不公平,努力是你唯一的路!
  15. wxml、wxss、js 引入外部文件的方法
  16. python爬取起点中文网小说
  17. 教孩子编程python 语言 nostarch 下载_教孩子学编程 Python语言版
  18. FreeBSD安装MySQL
  19. 如何卸载阿里巴巴PC流氓软件
  20. Java源文件编译出错:类文件包含错误的类 请删除该文件或确保文件位于正确的类路径子目录中

热门文章

  1. insert into 批量导入数据的案例
  2. Java的BigDecimal,对运算封装
  3. 学习Java过程中,复制多级文件夹出现的错误:文件拒绝访问
  4. 数学建模之数据分析图(在项目中叫数据可视化)
  5. 第一次运行TestNG测试类时报Cannot find class in classpath
  6. Python剪刀、石头、布游戏
  7. Drupal—关于Drupal8的详细安装建站教程
  8. 追你到天涯海角(1)
  9. 四种方式搭建文件服务器
  10. Android开发工具类文档地址