机器学习:关联规则:Apriori算法、FP - Growth算法的原理、应用场景及优缺点介绍
一、关联规则算法概述
关联规则挖掘是数据挖掘中的一个重要任务,用于发现数据集中不同项之间的关联关系。
二、Apriori算法
-
原理
- 频繁项集生成:Apriori算法基于一个先验原理,即如果一个项集是频繁的,那么它的所有子集也是频繁的;反之,如果一个项集是非频繁的,那么它的所有超集也是非频繁的。首先,扫描数据集,统计每个单项(1 - 项集)的出现次数,找出满足最小支持度阈值的频繁1 - 项集。然后,通过频繁 k − 1 k - 1 k−1 - 项集来生成候选 k k k - 项集,再扫描数据集计算候选 k k k - 项集的支持度,筛选出频繁 k k k - 项集。这个过程不断迭代,直到不能生成新的频繁项集为止。
- 关联规则生成:对于每个频繁项集 L L L,生成所有可能的非空子集。对于每个非空子集 A A A,计算关联规则 A ⇒ B A\Rightarrow B A⇒B(其中 B = L − A B = L - A B=L−A)的置信度,置信度计算公式为:
C o n f i d e n c e ( A ⇒ B ) = S u p p o r t ( A ∪ B ) S u p p o r t ( A ) Confidence(A\Rightarrow B)=\frac{Support(A\cup B)}{Support(A)} Confidence(A⇒B)=Support(A)Support(A∪B)
只保留满足最小置信度阈值的关联规则。
-
应用场景
- 超市购物篮分析。例如,分析顾客购买商品的行为,发现“购买牛奶和面包的顾客也经常购买鸡蛋”这样的关联规则,用于商品陈列优化和促销策略制定。
-
优点
- 简单易懂,是关联规则挖掘的经典算法。原理和实现相对直观,容易理解和应用。
- 能够有效地减少候选项集的数量。通过先验原理,避免了对大量不可能是频繁项集的候选项集进行计算,提高了效率。
-
缺点
- 在生成频繁项集时需要多次扫描数据集。当数据集很大时,频繁的I/O操作会导致性能下降。
- 可能会生成大量的候选项集,尤其是当最小支持度阈值设置较低时,计算和存储这些候选项集会消耗大量的资源。
三、FP - Growth算法
-
原理
- 构建FP - Tree:FP - Growth(频繁模式增长)算法首先构建一棵FP - Tree(频繁模式树)。扫描数据集一次,统计每个项的出现频率,按照频率降序排列所有项。然后再次扫描数据集,将每个事务中的项按照排好的顺序插入FP - Tree中。在插入过程中,如果树中已经存在当前项的路径,则更新路径上节点的计数;否则,创建新的分支。
- 挖掘频繁项集:从FP - Tree的头表(存储每个项及其出现次数和指向树中第一个相同项的指针)开始,通过递归的方式挖掘频繁项集。对于每个项,找到它在FP - Tree中的所有路径,根据路径构建条件模式基,然后从条件模式基构建条件FP - Tree,在条件FP - Tree上继续挖掘频繁项集。这个过程类似于FP - Tree的构建和挖掘,直到不能挖掘出新的频繁项集为止。
-
应用场景
- 同样适用于购物篮分析,能够更高效地处理大规模数据集,挖掘商品之间的关联关系。例如在大型连锁超市的销售数据挖掘中,发现不同商品类别之间的关联。
-
优点
- 只需要扫描数据集两次,相比Apriori算法大大减少了I/O开销。一次用于构建FP - Tree,另一次用于挖掘频繁项集(在挖掘过程中通过条件FP - Tree避免了对原始数据集的多次扫描)。
- 对于挖掘长频繁模式和密集数据集更有效。它能够利用FP - Tree的结构,快速地找到频繁项集,不会像Apriori算法那样生成大量的候选项集。
-
缺点
- 构建FP - Tree需要占用大量的内存空间,尤其是当数据集很大或者数据项很多时,内存消耗可能会成为瓶颈。
- 算法实现相对复杂,理解和实现FP - Tree的构建和挖掘过程需要一定的技术难度。
四、Eclat算法
-
原理
- Eclat算法基于集合的交集运算来挖掘频繁项集。它使用垂直数据表示,即将每个项的事务标识符(TID)列表存储起来。对于两个项集 A A A和 B B B,它们的交集的事务标识符列表就是同时包含 A A A和 B B B的事务集合。
- 频繁项集的支持度计算方式为:
S u p p o r t ( A ) = ∣ T I D ( A ) ∣ ∣ D ∣ Support(A)=\frac{|TID(A)|}{|D|} Support(A)=∣D∣∣TID(A)∣
其中 T I D ( A ) TID(A) TID(A)是项集 A A A的事务标识符列表, ∣ D ∣ |D| ∣D∣是数据集 D D D的事务总数。通过递归地计算项集的交集来生成频繁项集。从单个项开始,计算它们之间的交集和支持度,找到频繁1 - 项集。然后通过频繁 k − 1 k - 1 k−1 - 项集之间的交集来生成候选 k k k - 项集,计算支持度,筛选出频繁 k k k - 项集,直到不能生成新的频繁项集为止。
-
应用场景
- 在市场调查数据挖掘中,用于分析消费者对不同产品属性的组合偏好。例如,分析消费者对手机品牌、颜色、存储容量等属性组合的偏好,找出频繁出现的属性组合关联。
-
优点
- 采用垂直数据表示和集合交集运算,在某些情况下可以更高效地计算频繁项集。特别是当数据集的事务长度较短或者支持度阈值较高时,能够快速地计算出频繁项集。
- 可以方便地并行化计算。由于基于集合的交集运算,不同的项集之间的计算相对独立,可以利用并行计算资源来加速挖掘过程。
-
缺点
- 当数据集的事务长度较长或者支持度阈值较低时,计算项集的交集会导致大量的中间结果,需要大量的存储空间和计算时间。
- 对于稀疏数据集,性能可能会受到影响,因为需要处理大量的事务标识符列表和交集运算。
五、举例说明
假设我们有一个小型超市的购物篮数据集如下:
购物篮编号 | 购买商品 |
---|---|
1 | 牛奶、面包、鸡蛋 |
2 | 牛奶、面包 |
3 | 面包、鸡蛋、果汁 |
4 | 牛奶、鸡蛋 |
5 | 牛奶、面包、果汁 |
- Apriori算法示例
- 频繁项集生成:
- 首先计算1 - 项集的支持度,假设最小支持度阈值为 0.4 0.4 0.4。“牛奶”出现了4次,支持度为 4 5 = 0.8 \frac{4}{5}=0.8 54=0.8;“面包”出现了4次,支持度为 0.8 0.8 0.8;“鸡蛋”出现了3次,支持度为 0.6 0.6 0.6;“果汁”出现了2次,支持度为 0.4 0.4 0.4。所以频繁1 - 项集为{牛奶、面包、鸡蛋、果汁}。
- 然后生成候选2 - 项集:{牛奶、面包},{牛奶、鸡蛋},{牛奶、果汁},{面包、鸡蛋},{面包、果汁},{鸡蛋、果汁}。计算它们的支持度,例如{牛奶、面包}出现了3次,支持度为 3 5 = 0.6 \frac{3}{5}=0.6 53=0.6。经过筛选,频繁2 - 项集为{牛奶、面包},{牛奶、鸡蛋},{面包、鸡蛋},{牛奶、果汁}。
- 接着生成候选3 - 项集:{牛奶、面包、鸡蛋},{牛奶、面包、果汁},{牛奶、鸡蛋、果汁},{面包、鸡蛋、果汁}。计算支持度后,发现只有{牛奶、面包、鸡蛋}的支持度为 2 5 = 0.4 \frac{2}{5}=0.4 52=0.4满足阈值,是频繁3 - 项集。
- 关联规则生成:
- 对于频繁3 - 项集{牛奶、面包、鸡蛋},生成非空子集:{牛奶},{面包},{鸡蛋},{牛奶、面包},{牛奶、鸡蛋},{面包、鸡蛋}。计算关联规则的置信度,例如对于规则{牛奶、面包} ⇒ \Rightarrow ⇒{鸡蛋},置信度为 S u p p o r t ( { 牛奶、面包、鸡蛋 } ) S u p p o r t ( { 牛奶、面包 } ) = 0.4 0.6 = 2 3 \frac{Support(\{牛奶、面包、鸡蛋\})}{Support(\{牛奶、面包\})}=\frac{0.4}{0.6}=\frac{2}{3} Support({牛奶、面包})Support({牛奶、面包、鸡蛋})=0.60.4=32。根据最小置信度阈值(假设为 0.6 0.6 0.6),保留满足条件的关联规则。
- 频繁项集生成:
- FP - Growth算法示例
- 构建FP - Tree:
- 首先统计每个项的出现次数,按照出现次数降序排列为:牛奶(4次)、面包(4次)、鸡蛋(3次)、果汁(2次)。
- 构建FP - Tree,对于购物篮1(牛奶、面包、鸡蛋),先插入牛奶,然后在牛奶节点下插入面包,在面包节点下插入鸡蛋。以此类推,构建完整的FP - Tree。
- 挖掘频繁项集:
- 从FP - Tree的头表开始,对于“果汁”,找到它在树中的路径,构建条件模式基,然后从条件模式基构建条件FP - Tree,挖掘包含“果汁”的频繁项集。同样地,对其他项进行挖掘,最终得到所有的频繁项集。
- 构建FP - Tree:
- Eclat算法示例
- 垂直数据表示:
- 牛奶的TID列表为{1,2,4,5},面包的TID列表为{1,2,3,5},鸡蛋的TID列表为{1,3,4},果汁的TID列表为{3,5}。
- 频繁项集生成:
- 计算1 - 项集的支持度,方法同Apriori算法。频繁1 - 项集为{牛奶、面包、鸡蛋、果汁}。
- 计算2 - 项集的交集和支持度,例如牛奶和面包的交集TID列表为{1,2,5},支持度为 3 5 = 0.6 \frac{3}{5}=0.6 53=0.6。经过筛选得到频繁2 - 项集,然后继续生成3 - 项集并计算支持度,以此类推,挖掘出所有频繁项集。
- 垂直数据表示:
相关文章:
机器学习:关联规则:Apriori算法、FP - Growth算法的原理、应用场景及优缺点介绍
一、关联规则算法概述 关联规则挖掘是数据挖掘中的一个重要任务,用于发现数据集中不同项之间的关联关系。 二、Apriori算法 原理 频繁项集生成:Apriori算法基于一个先验原理,即如果一个项集是频繁的,那么它的所有子集也是频繁的…...
从0开始深度学习(7)——线性回归的简洁实现
在从0开始深度学习(5)——线性回归的逐步实现中,我们手动编写了数据构造模块、损失函数模块、优化器等,但是在现代深度学习框架下,这些已经包装好了 本章展示如果利用深度学习框架简洁的实现线性回归 0 导入头文件 im…...
【网络安全 | Java代码审计】华夏ERP(jshERP)v2.3
未经许可,不得转载。 文章目录 技术框架开发环境代码审计权限校验绕过SQL注入Fastjson反序列化命令执行存储型XSS越权/未授权重置密码越权/未授权删除用户信息越权/未授权修改用户信息会话固定安全建议项目地址:https://github.com/jishenghua/jshERP 技术框架 核心框架:Sp…...
Setting the value of ‘*‘ exceeded the quota
H5之localStorage限额报错quota_exceeded the quota-CSDN博客 Uncaught DOMException: Failed to set a named property on Storage: Setting the value of background exceeded the quota. 超出了 localStorage 的最大长度。...
前端页面模块修改成可动态生成数据模块——大部分数据为GPT生成(仅供学习参考)
前端页面模块修改成可动态生成数据模块: 这些案例展示了如何通过Blade模板将前端页面模块变成可动态生成的模板。通过巧妙使用Blade语法、控制结构、CSS/JS分离、组件复用等技巧,可以大大提高代码的灵活性和复用性。在Laravel的Controller中准备好数据并…...

5.错误处理在存储过程中的重要性(5/10)
错误处理在存储过程中的重要性 引言 在数据库编程中,存储过程是一种重要的组件,它允许用户将一系列SQL语句封装成一个单元,以便重用和简化数据库操作。然而,像任何编程任务一样,存储过程中的代码可能会遇到错误或异常…...

【WebGis开发 - Cesium】如何确保Cesium场景加载完毕
目录 引言一、监听场景加载进度1. 基础代码2. 加工代码 二、进一步封装代码1. 已知存在的弊端2. 封装hooks函数 三、使用hooks方法1. 先看下效果2. 如何使用该hooks方法 三、总结 引言 本篇为Cesium开发的一些小技巧。 判断Cesium场景是否加载完毕这件事是非常有意义的。 加载…...

【数据结构】6道经典链表面试题
目录 1.返回倒数第K个节点【链接】 代码实现 2.链表的回文结构【链接】 代码实现 3.相交链表【链接】 代码实现 4.判断链表中是否有环【链接】 代码实现 常见问题解析 5.寻找环的入口点【链接】 代码实现1 代码实现2 6.随机链表的复制【链接】 代码实现 1.…...

等保测评1.0到2.0的演变发展
中国等保测评的演变 作为中国强化网络安全监管制度的重要组成部分,信息安全等级保护测评不是一个新概念,可以追溯到1994年和2007年发布的多项管理规则(通常称为等保测评 1.0规则),根据这些规则,网络运营商…...
yum 源配置
在/etc/yum.repo.d目录下 格式: [repository_name] nameRepository description baseurlhttp://repository_url enabled1 gpgcheck0 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 其中: [repository_name]:源的标识名称,…...

通过AI技术克服自动化测试难点(上)
本文我们一起分析一下AI技术如何解决现有的自动化测试工具的不足和我们衍生出来的新的测试需求。 首先我们一起看一下计算机视觉的发展历史,在上世纪70年代,处于技术萌芽期,由字符的识别技术慢慢进行演化,发展到现在,人…...
等保测评:如何建立有效的网络安全监测系统
等保测评中的网络安全监测系统建立 在建立等保测评中的网络安全监测系统时,应遵循以下步骤和策略: 确定安全等级和分类:首先,需要根据信息系统的安全性要求、资产的重要性和风险程度等因素,确定网络系统的安全等级&…...
yjs12——pandas缺失值的处理
1.缺失值的表示 正常来说,pandas缺失值是“nan”表示,但是有且文件可能自己改成了相应的别的符号 2.如何将缺失值符号改成nan xxx.replace(to_replace"...",valuenp.nan) 3.判断是否有缺失值 1.pd.notnull(xxx)————如果有缺失,…...
噪声分布 双峰,模拟函数 或者模拟方法 python人工智能 深度神经网络
在Python中模拟双峰分布,可以通过多种方法实现。以下是一些常用的方法: 1. **使用正态分布混合**: 可以通过组合两个正态分布来创建一个双峰分布。每个正态分布都有其自己的均值(mu)和标准差(sigma&…...

5个免费ppt模板网站推荐!轻松搞定职场ppt制作!
每次过完小长假,可以明显地感觉到,2024这一年很快又要结束了,不知此刻的你有何感想呢?是满载而归,还是准备着手制作年终总结ppt或年度汇报ppt呢? 每当说到制作ppt,很多人的第一反应,…...
HTML5+Css3(背景属性background)
css背景属性 background 1. background-color背景颜色 背景颜色可以用“十六进制”、“rgb()”、“rgba()”或“英文单词”表示 2. background-image:url(路径);背景图片 也可以写成 background:url(); 3. background-repeat背景重复 属性值: - repeat:x,y平铺…...

高亚科技助力优巨新材,打造高效数字化研发项目管理平台
近日,中国企业管理软件资深服务商高亚科技与广东优巨先进新材料股份有限公司(以下简称“优巨新材”)正式签署合作协议,共同推进产品研发管理数字化升级。此次合作的主要目标是通过8Manage PM项目管理系统,提升优巨新材…...

用布尔表达式巧解数字电路图
1.前置知识 明确AND,OR,XOR,NOR,NOT运算的规则 参见:E25.【C语言】练习:修改二进制序列的指定位 这里再补充一个布尔运算符:NOR,即先进行OR运算,再进行NOT运算 如下图为其数字电路的符号 注意到在OR符号的基础上,在尾部加了一个(其实由简化而来) 附:NOR的真值表 2.R-S触发…...
面试--开源框架面试题集合
Spring 谈谈自己对于 Spring IoC 的了解什么是 IoC?IoC 解决了什么问题?什么是 Spring Bean?将一个类声明为 Bean 的注解有哪些?Component 和 Bean 的区别是什么?注入 Bean 的注解有哪些?Autowired 和 Resource 的区别是什么?…...

如何选择医疗器械管理系统?盘谷医疗符合最新版GSP要求
去年12月7日,新版《医疗器械经营质量管理规范》正式发布,并于今年7月1日正式实施。新版GSP第五十一条提出“经营第三类医疗器械的企业,应当具有符合医疗器械经营质量管理要求的计算机信息系统,保证经营的产品可追溯”,…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...

rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...