【数据挖掘】关联规则算法学习—Apriori

关联规则算法学习—Apriori

        Apriori算法是关联规则挖掘中的经典算法,用于发现数据集中的频繁项集和强关联规则。其核心思想基于先验性质:若一个项集是频繁的,则其所有子集也一定是频繁的。该算法通过逐层搜索的迭代方法高效挖掘关联规则。

要求:

        理解并掌握关联规则经典算法Apriori算法,理解算法的原理,能够实现算法,并对给定的数据集进行关联规则挖掘

代码实现:

import pandas as pd
from itertools import combinations
from collections import defaultdict# 读取数据
data = pd.read_csv('实验2-Groceries(1).csv')# 预处理数据,将字符串格式的项集转换为集合
transactions = []
for items in data['items']:# 去除大括号和引号,然后分割items_cleaned = items.strip('{}"').replace('"', '').split(',')transactions.append(set(items_cleaned))print(f"总交易数: {len(transactions)}")
print(f"前5条交易示例: {transactions[:5]}")def get_frequent_itemsets(transactions, min_support):"""实现Apriori算法找出频繁项集"""# 第一次扫描:计算单个项目的支持度item_counts = defaultdict(int)for transaction in transactions:for item in transaction:item_counts[item] += 1# 筛选满足最小支持度的单项num_transactions = len(transactions)frequent_items = {}for item, count in item_counts.items():support = count / num_transactionsif support >= min_support:frequent_items[frozenset([item])] = supportcurrent_frequent = frequent_itemsfrequent_itemsets = {}k = 1while current_frequent:frequent_itemsets.update(current_frequent)# 生成候选项集next_candidates = set()items = [item for itemset in current_frequent.keys() for item in itemset]unique_items = list(set(items))# 生成k+1大小的候选项集if k == 1:# 对于k=1,直接两两组合for i in range(len(unique_items)):for j in range(i+1, len(unique_items)):next_candidates.add(frozenset([unique_items[i], unique_items[j]]))else:# 对于k>1,使用先验性质for itemset1 in current_frequent:for itemset2 in current_frequent:union_set = itemset1.union(itemset2)if len(union_set) == k + 1:next_candidates.add(union_set)# 第二次扫描:计算候选项集的支持度candidate_counts = defaultdict(int)for transaction in transactions:for candidate in next_candidates:if candidate.issubset(transaction):candidate_counts[candidate] += 1# 筛选满足最小支持度的项集current_frequent = {}for itemset, count in candidate_counts.items():support = count / num_transactionsif support >= min_support:current_frequent[itemset] = supportk += 1return frequent_itemsetsdef generate_association_rules(frequent_itemsets, min_confidence):"""生成关联规则"""rules = []for itemset in frequent_itemsets.keys():if len(itemset) < 2:continuesupport_itemset = frequent_itemsets[itemset]# 生成所有可能的非空子集all_subsets = []for i in range(1, len(itemset)):all_subsets.extend(combinations(itemset, i))for subset in all_subsets:subset = frozenset(subset)remaining = itemset - subsetif remaining:support_subset = frequent_itemsets.get(subset, 0)if support_subset > 0:confidence = support_itemset / support_subsetif confidence >= min_confidence:rules.append((subset, remaining, support_itemset, confidence))return rules# 设置支持度和置信度阈值
min_support = 0.05  # 5%的支持度
min_confidence = 0.3  # 30%的置信度# 找出频繁项集
frequent_itemsets = get_frequent_itemsets(transactions, min_support)# 生成关联规则
rules = generate_association_rules(frequent_itemsets, min_confidence)# 按支持度排序
sorted_rules = sorted(rules, key=lambda x: x[2], reverse=True)# 打印频繁项集
print("\n频繁项集 (支持度 ≥ {}):".format(min_support))
for itemset, support in frequent_itemsets.items():if len(itemset) >= 2:  # 只显示多项集print(f"{set(itemset)}: {support:.3f}")# 打印关联规则
print("\n关联规则 (置信度 ≥ {}):".format(min_confidence))
for rule in sorted_rules[:20]:  # 显示前20条规则antecedent, consequent, support, confidence = ruleprint(f"{set(antecedent)} => {set(consequent)} (支持度: {support:.3f}, 置信度: {confidence:.3f})")# 尝试不同的支持度和置信度
parameters = [(0.05, 0.3),  # 原始参数(0.03, 0.4),  # 更低支持度,更高置信度(0.08, 0.25)  # 更高支持度,更低置信度
]for sup, conf in parameters:print(f"\n参数: 最小支持度={sup}, 最小置信度={conf}")freq_itemsets = get_frequent_itemsets(transactions, sup)rules = generate_association_rules(freq_itemsets, conf)print(f"频繁项集数量: {len(freq_itemsets)}")print(f"关联规则数量: {len(rules)}")if rules:# 显示支持度最高的规则top_rule = max(rules, key=lambda x: x[2])print("支持度最高的规则:")print(f"{set(top_rule[0])} => {set(top_rule[1])} (支持度: {top_rule[2]:.3f}, 置信度: {top_rule[3]:.3f})")

执行结果:

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

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

相关文章

助力高考,利用python获取本专科专业选考科目要求

大家好&#xff0c;今天我们来利用python技术助力高考&#xff0c;获取网上的本专科专业选考科目要求&#xff0c;用到的Python模块有&#xff1a;Requests、Json、BeautifulSoup、Pandas &#xff0c;主要思路是Requests获取接口请求&#xff0c;利用BeautifulSoup 解析网站的…

Python 商务数据分析—— NumPy 学习笔记Ⅱ

一、 数组元素值的替换 我们可以使用索引或 where () 函数来替换 NumPy 数组中的元素值。 1.1 方式一&#xff1a;索引 import numpy as npnp.random.seed(42)a3 np.random.randint(0, 10, size(3, 4))print("原数组:\n", a3)a3\[1] 0 # 将a3数组第一行数据全…

遥感图像语义分割1-安装mmsegmentation

参考&#xff1a; mmsegmentation: 安装并使用自定义数据集进行训练_mmsegmentation安装-CSDN博客 最新Windows配置安装mmcv与mmsegmentation&#xff0c;以及mmsegmentation的验证_mmcv安装-CSDN博客 GitCode - 全球开发者的开源社区,开源代码托管平台 参考&#xff1a; …

【菜狗的记录】模糊聚类最大树、图神经网络、大模型量化——20250627

每日学习过程中记录的笔记&#xff0c;从各个网站整理下来&#xff0c;用于当日复盘。 如果其中的知识点能帮到你&#xff0c;也很荣幸呀。 -------------------------------------------------------20250622------------------------------------------------------------- …

《短剧平台开发指南:技术方案、核心功能与行业趋势》

一、短剧行业现状与系统开发价值 近年来&#xff0c;短剧市场呈现爆发式增长&#xff0c;成为数字内容领域的新风口。数据显示&#xff0c;2023年国内短剧市场规模已突破300亿元&#xff0c;用户规模达到4.5亿。这种以"短、平、快"为特点的内容形式&#xff0c;凭借…

[FPGA]嵌入式系统FPGA设计资源

嵌入式系统FPGA设计资源 一、供应商 https://www.altera.com- Altera FPGA 供应商网站 https://www.altera.com/events/northamerica/intel-soc-fpga-developer-forum/overview.html- SoC 开发人员论坛 https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/li…

ClickHouse 可观测性最佳实践

ClickHouse 介绍 ClickHouse 是一款高性能、列式存储的开源分析型数据库&#xff0c;专为在线分析处理&#xff08;OLAP&#xff09;场景设计。它能够处理海量数据&#xff0c;支持实时查询和复杂的数据分析&#xff0c;具备极高的读写性能和数据压缩能力。ClickHouse 提供了强…

Android Framework设置时间为24小时制

文章目录 定位源码实现附录12 小时制与 24 小时制的详细解析一、基本定义与核心区别二、转换方法与示例三、应用场景与文化差异四、延伸知识&#xff1a;特殊计时制与历史背景 目的是把设置中使用默认语言区域关掉&#xff0c;并把使用24小时制打开 如下图为原始的&#xff1a;…

基于STM32设计的扫地机器人

一、前言 1.1 项目介绍 【1】项目开发背景 随着社会节奏的加快和人们生活方式的改变&#xff0c;智能家居产品逐渐走入千家万户。作为智能清洁系统的重要组成部分&#xff0c;扫地机器人凭借其自动化、高效性和便捷性&#xff0c;成为现代家庭中不可或缺的智能设备之一。传统…

什么是接口测试?

2025最新Jmeter接口测试从入门到精通&#xff08;全套项目实战教程&#xff09; 接口测试概念 接口测试是项目测试的一部分&#xff0c;它测试的主要对象是接口&#xff0c;是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与所测系统之间以及内部各系统之间的交…

JDY-23蓝牙模块与电脑的连接方式

JDY-23蓝牙模块支持多种连接方式&#xff0c;包括SPP&#xff08;串口通信&#xff09;模式和BLE&#xff08;低功耗蓝牙&#xff09;模式。以下是与电脑连接的具体方法&#xff1a; 1. 通过SPP模式连接 JDY-23模块支持SPP协议&#xff0c;可以通过串口与电脑通信。以下是连接…

【网络】Linux 内核优化实战 - net.core.rmem_max

目录 参数作用与原理默认值与查看方法调整场景与方法适用场景调整方法 与其他参数的协同性能影响与注意事项典型案例总结 net.core.rmem_max 是 Linux 内核中控制 套接字接收缓冲区&#xff08;Receive Buffer&#xff09;最大允许值 的参数。它与 net.core.rmem_default&#…

设计模式 | 工厂模式

工厂模式&#xff08;Factory Pattern&#xff09; 是创建型设计模式的核心成员&#xff0c;它通过将对象创建的逻辑封装起来&#xff0c;实现了创建与使用的解耦。本文将深入探讨工厂模式的核心思想、实现技巧以及在C中的高效实现方式。 为什么需要工厂模式&#xff1f; 在软…

数字孪生技术驱动UI前端变革:从静态展示到动态交互的飞跃

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字化转型的深水区&#xff0c;数字孪生技术正以破竹之势重构 UI 前端的技术逻辑与设计理念…

Django实战:自定义中间件实现全链路操作日志记录

文章目录 一、中间件介绍激活中间件生命周期 二、自定义中间件中间件钩子函数基于类的中间件 三、实战案例操作日志功能参考资料 一、中间件 介绍 在 Django 中&#xff0c;中间件&#xff08;Middleware&#xff09;是一组轻量级、底层的插件系统&#xff0c;用于全局地改变…

Java编程之迭代器模式(Iterator Pattern)

引言&#xff1a; 走进图书馆&#xff0c;你站在一排书架前&#xff0c;想要浏览书籍。你会一格格地从左到右翻阅书籍&#xff0c;而不是去研究书架是什么。 一本书一本书地翻&#xff0c;才知道书架上藏了什么书&#xff0c;研究书架的构造是不知道书籍的内容的。 这种“逐本…

ARM64 linux系统的一般执行过程

1、正在运行的用户进程X 2、发生异常&#xff08;包括系统调用等&#xff09;&#xff0c;CPU完成的工作&#xff1a;把当前程序指针寄存器PC放入ELR_EL1寄存器&#xff0c;把PSTATE放入SPSR_EL1寄存器&#xff0c;把异常产生的原因放在ESR_EL1寄存器&#xff0c;将异常向量表…

Vue3+ element 实现导入导出

一、导入功能相关代码分析 相关变量定义 importVisible&#xff1a;这是一个ref类型的响应式变量&#xff0c;用于控制导入对话框的显示与隐藏&#xff0c;初始值为false。当用户点击 “导入” 按钮时&#xff0c;会尝试将其值设为true来显示导入对话框&#xff0c;若出现异常则…

Git安装(纯小白版)

一、Git安装 1. 简介 Git是一款免费开源的分布式版本控制系统&#xff0c;常用于软件开发。它能记录文件在不同时间的改动&#xff0c;让用户在需要时查看、恢复旧版本。支持多人协作开发&#xff0c;多人可同时修改项目文件&#xff0c;Git会处理好冲突。开发者能在本地创建…

cocos2 本地根据文本内容生成二维码

cocos2 本地根据文本内容生成二维码 之前做了一个功能&#xff0c;就是cocos2小游戏&#xff0c;结算页面需要有一个二维码&#xff0c;二维码内容是一个网址&#xff0c;这个网址需要根据用户游玩分数确定访问哪个网址&#xff0c;但是这个小游戏是单机小游戏&#xff0c;不连…