Apriori(关联规则挖掘算法)
关联规则分析
-
事务库

上表所示的购物篮数据即是一个事务库,该事务库记录的是用户行为的数据。 -
事务
上表事务库中的每一条记录被称为一笔事务。在购物篮事务中,每一次购物行为即为一笔事务,例如第一行数据“用户1购买商品A,B,C”即为一条事务。 -
项和项集
在购物篮事务中,每样商品代表一个项,项的集合称为项集。每样商品的组合构成项集,例如“A,B”、 “A,C”、 “B,C”、 “A,B,C”都是一个项集,其实也就是不同商品的组合。 -
关联规则
关联规则是形如X → Y的表达式,X称为前件,Y称为后件。
注意X和Y不是指单一的商品,而是指上面提到的项集,比如其形式可以为:{A, B} →{C},其含义就是如果购买商品A和B的用户也会买C。 -
支持度(Support)
项集的支持度定义为包含该项集的事务在所有事务中所占的比例。 -
频繁项集
支持度大于等于人为设定的阈值(该阈值也称为最小支持度)的项集即为频繁项集,其实也就是指该项集在所有事务中出现的较为频繁。 -
置信度(Confidence)
置信度表示在关联规则的先决条件X发生的条件下,关联结果Y发生的概率
在购物篮事务当中,关联规则X → Y的置信度为购买商品X的基础上购买商品Y的概率P(Y|X),据公式有:

- 强关联规则
寻找强关联规则的主要步骤:
- 先寻找满足最小支持度的频繁项集
- 在频繁项集中寻找到满足最小置信度的关联规则
- 提升度(Lift)
提升度表示先购买X对Y的概率的提升作用,用来判断规则是否有实际价值,即使用规则后商品在购物车中出现的频率是否高于商品单独出现在购物车中的频率。如果大于1说明规则有效,小于1则无效,等于1则表示X与Y相互独立。

满足最小支持度和最小置信度的规则,叫做“强关联规则”。然而,强关联规则里,又分为有效的强关联规则和无效的强关联规则。具体划分情况如下:
若Lift(X→Y)>1,则规则“X→Y”是有效的强关联规则。
若Lift(X→Y)<1,则规则“X→Y”是无效的强关联规则。
若Lift(X→Y) =1,则表示X与Y相互独立。
注意:
关联规则分析与协同过滤算法都可以用来作为推荐系统的实现,但仍有区别:
- 协同过滤算法是基于用户或商品之间的距离或相似度进行推荐
- 关联规则分析是通过寻找强关联规则后进行推荐
Apriori
Apriori 是一种数据挖掘算法,用于发现数据集中的频繁项集和关联规则。它通常用于市场篮分析,以确定哪些商品通常一起购买。这个算法基于"先验原则",它假设如果一个项集是频繁的,那么它的所有子集也必须是频繁的。这一假设有助于减少搜索空间,提高算法的效率
Apriori算法步骤
- 设定最小支持度和最小置信度
- 根据最小支持度找出所有的频繁项集
- 根据最小置信度发现强关联规则
以购物篮数据演示Apriori算法的计算步骤,数据如下所示:

-
设定最小支持度和最小置信度
- 首先设置最小支持度为2/5,也即40%
- 其次设置最小置信度为4/5,也即80%
-
根据最小支持度找出所有的频繁项集
Apriori算法采用了一个精巧的思路来加快运算速度:
先计算长度为1的项集,然后挖掘其中的频繁项集;再将长度为1的频繁项集进行排列组合,从中挖掘长度为2的频繁项集,然后以此推。核心逻辑是一个迭代判断的思想:如果连长度为n-1的项集都不是频繁项集,那就不用考虑长度为n的项集了,例如,如果在迭代的过程发现{A, B, C}不是频繁项集,那么{A, B, C, D}必然不是频繁项集,也就不用去考虑它了。
首先计算长度为1的候选项集,扫描交易数据集,统计每种商品出现的次数,如下表 所示:
将长度为1的频繁项集进行两两组合,形成长度为2的候选集,扫描交易数据集,统
计各个候选项集在购物篮事务中出现的次数,如下表所示:

将长度为2的频繁项集进行两两组合,形成长度为3的候选集,扫描交易数据集,统计各个候选项集在购物篮事务中出现的次数,如下表所示:

两个数据之间,所以我们需要选择长度大于1的频繁项集,长度大于1的所有频繁项 集,如下表所示:

-
根据最小置信度发现强关联规则

简单代码
transactions = [['A', 'B', 'C'], ['A', 'B'], ['B', 'C'], ['A', 'B', 'C', 'D'], ['B', 'C', 'D']]from apyori import apriori
# 调用apriori函数,指定最小支持度和最小置信度
rules = apriori(transactions, min_support=0.4, min_confidence=0.8)
# 将生成器对象转化成列表
results = list(rules)for i in results: # 遍历results中的每一个频繁项集for j in i.ordered_statistics: # 获取频繁项集中的关联规则X = j.items_base # 关联规则的前件Y = j.items_add # 关联规则的后件x = ', '.join([item for item in X]) # 连接前件中的元素y = ', '.join([item for item in Y]) # 连接后件中的元素if x != '': # 防止出现关联规则前件为空的情况print(x + ' → ' + y) # 通过字符串拼接的方式更好呈现结果
相关文章:
Apriori(关联规则挖掘算法)
关联规则分析 事务库 上表所示的购物篮数据即是一个事务库,该事务库记录的是用户行为的数据。 事务 上表事务库中的每一条记录被称为一笔事务。在购物篮事务中,每一次购物行为即为一笔事务,例如第一行数据“用户1购买商品A,B,C”即为一条事…...
new Object()到底占用几个字节
Java内存模型 对象内存中可以分为三块区域:对象头(Header),实例数据(Instance Data)和对齐填充(Padding),以64位操作系统为例(未开启指针压缩的情况)Java对象布局 如下图所示: 其中对象头中的Mark Word中的详细信息在文章synchr…...
瞬态抑制二极管TVS的工作原理?|深圳比创达电子EMC(上)
TVS二极管具有响应速度快、漏电流小、钳位电压稳以及无寿命衰减的特性,从小到信号线静电防护,大到电力系统抗雷击浪涌,TVS都发挥着至关重要的作用。本章对瞬态抑制二极管TVS工作机理展开分析,供产品选型参考。接下来就跟着深圳比创…...
Nginx 同一端口 同时支持http与https 协议
文章目录 需求分析 需求 通过 nginx ,让同一端口 同时支持http与https 协议 分析 通过使用 Nginx,可以实现同一端口同时支持 HTTP 和 HTTPS 协议。下面是一种可能的配置方式: 配置 HTTP 服务 在 Nginx 配置文件中,添加以下配置…...
【Express】文件上传管理 multer 中间件
Multer是Node.js中用于处理文件上传的中间件。它可以帮助你处理文件上传的相关逻辑,如接收和保存上传的文件、限制文件大小、设置文件类型限制等。只能用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件。 下面是使用Multer中间件的基本…...
性能监控软件是什么?有哪些优势?
在现代科技驱动的世界中,计算机系统的性能对于企业和个人用户都至关重要。性能监控软件是一种不可或缺的工具,可以帮助我们实时跟踪、分析和优化系统的性能。本文将介绍性能监控软件的概念、其重要性以及如何选择和使用这些工具来提高系统效率。 一、性能…...
分布式事务及CAP和BASE顶底
一、分布式事务 单体应用肯定就不存在分布式事务了,只有在分布式微服务系统中,各个服务之间通过RPC调用后,每个微服务有自己和数据库的连接,各个微服务的回滚不影响其他的微服务事务,这几必须使用分布式事务来解决分布…...
Django REST Framework完整教程-认证与权限-JWT的使用
文章目录 1.认证(Authentication)与权限(Permission)1.1.视图添加权限1.2.登录验证1.3.常用DRF自带权限类1.4.自定义权限类1.5.全局权限1.6.函数视图权限 2.认证详解2.1.认证方案2.2.如何使用TokenAuthentication? 3.JSON Web Token(JWT)认证3.1.工作原理3.2.安装3.…...
领域内容第18名
恭喜入榜...
[1024]程序员节 一晃6年过去了
加入开发者大军,一晃已是6年有余,从最初的Andoird开发如火如荼,到现在的秋风萧瑟,宛如被秋风吹得只剩躯干的树木,等待来年的焕发新芽。 我本不是一个科班出身的开发者,但是为了生活,说白了为了钱…...
数据结构 | 构造哈夫曼树
template<class T> void Heap<T>::PercolateUp() //为了向上调整为堆,我们需要比较当前节点和其父节点的值,如果父节点的值比当前节点大,则交换它们的值。 { int p size - 1, c (p - 1) / 2;//c表示当前节点的父节点࿰…...
实验室烧杯可以用超声波清洗机吗
实验室烧杯可以用超声波清洗机吗?答案是可以的!超声波清洗机不仅可以清洗实验烧杯,还可以用于清洗实验室中的试管、培养皿、移液管、载玻片、容量瓶、锥形瓶等各类实验器皿。在实验中,如果烧杯清洁不到位,会使得实验数…...
Unity之ShaderGraph如何实现UV抖动
前言 今天我们通过噪波图来实现一个UV抖动的效果。 如下图所示: 关键节点 Time:提供对着色器中各种时间参数的访问 UV:提供对网格顶点或片段的UV坐标的访问。可以使用通道下拉参数选择输出值的坐标通道。 SimpleNoise:根据…...
#力扣:771. 宝石与石头@FDDLC
771. 宝石与石头 - 力扣(LeetCode) 一、Java class Solution {public int numJewelsInStones(String jewels, String stones) {int[] isJewel new int[z 1];for (int i jewels.length() - 1; i > 0; i--) isJewel[jewels.charAt(i)] 1;int cnt …...
【网络协议】聊聊拓扑网络结构与原理
拓扑结构 上一篇我们简单讲述了一种交换机的情况,但是实际的场景是比较复杂的,在一个楼层可能有几十或者上百个接口,那么当知道对方的IP地址,求对方的MAC地址,其实是通过ARP协议进行处理的。 上图是一个两个交换机的…...
uview表单 hooks
在UViewUI库中,使用hooks封装表单二次可以让我们以更灵活的方式使用表单组件。下面是一个示例,展示如何将表单封装成hooks,并以JSON形式传递参数: 首先,我们可以创建一个自定义的Hook来处理表单逻辑。在这个例子中&…...
车载视频如何转换视频格式
当你收集了多种视频想在车内进行播放,它们可能不会自动播放。你有可能会在屏幕上看到一条消息,显示“文件格式不受支持”,这是因为这些视频可能采用了你的汽车无法识别的格式。 那我们如何才可以转换为车载播放器上运行的最重要且最广泛使用…...
虚拟音频设备软件 Loopback mac中文版软件介绍
创建虚拟音频设备以从应用程序和音频输入设备获取声音,然后将其发送到音频处理应用程序,它就是—Loopback for Mac,Loopback mac为您提供高端工作室混音板的强大功能,有了它在Mac上传递音频会变得很容易。 Loopback for mac中文版…...
Android SurfaceControlViewHost介绍及使用
概要介绍 SurfaceControlViewHost是一个工具类, 用于帮助在其他进程中显示本进程的view。 SurfaceControlViewHost 为绘制进程持有,其中的SurfacePackage 交给另外的显示进程,在显示进程中的SurfaceView中通过SurfaceView.setChildSurface…...
微信小程序开发(一)
目录 开发者界面 app.json配置(举例) 组件 样式 像素 flex布局 微信小程序是一种基于微信平台的应用程序开发模式,它可以让开发者使用前端开发技术(如HTML、CSS和JavaScript)开发应用程序,并在微信客户端中运行。以下是微信…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
