机器学习:关联规则:Apriori算法、FP - Growth算法的原理、应用场景及优缺点介绍

一、关联规则算法概述

关联规则挖掘是数据挖掘中的一个重要任务,用于发现数据集中不同项之间的关联关系。

二、Apriori算法

  1. 原理

    • 频繁项集生成:Apriori算法基于一个先验原理,即如果一个项集是频繁的,那么它的所有子集也是频繁的;反之,如果一个项集是非频繁的,那么它的所有超集也是非频繁的。首先,扫描数据集,统计每个单项(1 - 项集)的出现次数,找出满足最小支持度阈值的频繁1 - 项集。然后,通过频繁 k − 1 k - 1 k1 - 项集来生成候选 k k k - 项集,再扫描数据集计算候选 k k k - 项集的支持度,筛选出频繁 k k k - 项集。这个过程不断迭代,直到不能生成新的频繁项集为止。
    • 关联规则生成:对于每个频繁项集 L L L,生成所有可能的非空子集。对于每个非空子集 A A A,计算关联规则 A ⇒ B A\Rightarrow B AB(其中 B = L − A B = L - A B=LA)的置信度,置信度计算公式为:
      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(AB)=Support(A)Support(AB)
      只保留满足最小置信度阈值的关联规则。
  2. 应用场景

    • 超市购物篮分析。例如,分析顾客购买商品的行为,发现“购买牛奶和面包的顾客也经常购买鸡蛋”这样的关联规则,用于商品陈列优化和促销策略制定。
  3. 优点

    • 简单易懂,是关联规则挖掘的经典算法。原理和实现相对直观,容易理解和应用。
    • 能够有效地减少候选项集的数量。通过先验原理,避免了对大量不可能是频繁项集的候选项集进行计算,提高了效率。
  4. 缺点

    • 在生成频繁项集时需要多次扫描数据集。当数据集很大时,频繁的I/O操作会导致性能下降。
    • 可能会生成大量的候选项集,尤其是当最小支持度阈值设置较低时,计算和存储这些候选项集会消耗大量的资源。

三、FP - Growth算法

  1. 原理

    • 构建FP - Tree:FP - Growth(频繁模式增长)算法首先构建一棵FP - Tree(频繁模式树)。扫描数据集一次,统计每个项的出现频率,按照频率降序排列所有项。然后再次扫描数据集,将每个事务中的项按照排好的顺序插入FP - Tree中。在插入过程中,如果树中已经存在当前项的路径,则更新路径上节点的计数;否则,创建新的分支。
    • 挖掘频繁项集:从FP - Tree的头表(存储每个项及其出现次数和指向树中第一个相同项的指针)开始,通过递归的方式挖掘频繁项集。对于每个项,找到它在FP - Tree中的所有路径,根据路径构建条件模式基,然后从条件模式基构建条件FP - Tree,在条件FP - Tree上继续挖掘频繁项集。这个过程类似于FP - Tree的构建和挖掘,直到不能挖掘出新的频繁项集为止。
  2. 应用场景

    • 同样适用于购物篮分析,能够更高效地处理大规模数据集,挖掘商品之间的关联关系。例如在大型连锁超市的销售数据挖掘中,发现不同商品类别之间的关联。
  3. 优点

    • 只需要扫描数据集两次,相比Apriori算法大大减少了I/O开销。一次用于构建FP - Tree,另一次用于挖掘频繁项集(在挖掘过程中通过条件FP - Tree避免了对原始数据集的多次扫描)。
    • 对于挖掘长频繁模式和密集数据集更有效。它能够利用FP - Tree的结构,快速地找到频繁项集,不会像Apriori算法那样生成大量的候选项集。
  4. 缺点

    • 构建FP - Tree需要占用大量的内存空间,尤其是当数据集很大或者数据项很多时,内存消耗可能会成为瓶颈。
    • 算法实现相对复杂,理解和实现FP - Tree的构建和挖掘过程需要一定的技术难度。

四、Eclat算法

  1. 原理

    • 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)=DTID(A)
      其中 T I D ( A ) TID(A) TID(A)是项集 A A A的事务标识符列表, ∣ D ∣ |D| D是数据集 D D D的事务总数。通过递归地计算项集的交集来生成频繁项集。从单个项开始,计算它们之间的交集和支持度,找到频繁1 - 项集。然后通过频繁 k − 1 k - 1 k1 - 项集之间的交集来生成候选 k k k - 项集,计算支持度,筛选出频繁 k k k - 项集,直到不能生成新的频繁项集为止。
  2. 应用场景

    • 在市场调查数据挖掘中,用于分析消费者对不同产品属性的组合偏好。例如,分析消费者对手机品牌、颜色、存储容量等属性组合的偏好,找出频繁出现的属性组合关联。
  3. 优点

    • 采用垂直数据表示和集合交集运算,在某些情况下可以更高效地计算频繁项集。特别是当数据集的事务长度较短或者支持度阈值较高时,能够快速地计算出频繁项集。
    • 可以方便地并行化计算。由于基于集合的交集运算,不同的项集之间的计算相对独立,可以利用并行计算资源来加速挖掘过程。
  4. 缺点

    • 当数据集的事务长度较长或者支持度阈值较低时,计算项集的交集会导致大量的中间结果,需要大量的存储空间和计算时间。
    • 对于稀疏数据集,性能可能会受到影响,因为需要处理大量的事务标识符列表和交集运算。

五、举例说明

假设我们有一个小型超市的购物篮数据集如下:

购物篮编号购买商品
1牛奶、面包、鸡蛋
2牛奶、面包
3面包、鸡蛋、果汁
4牛奶、鸡蛋
5牛奶、面包、果汁
  1. 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),保留满足条件的关联规则。
  2. FP - Growth算法示例
    • 构建FP - Tree
      • 首先统计每个项的出现次数,按照出现次数降序排列为:牛奶(4次)、面包(4次)、鸡蛋(3次)、果汁(2次)。
      • 构建FP - Tree,对于购物篮1(牛奶、面包、鸡蛋),先插入牛奶,然后在牛奶节点下插入面包,在面包节点下插入鸡蛋。以此类推,构建完整的FP - Tree。
    • 挖掘频繁项集
      • 从FP - Tree的头表开始,对于“果汁”,找到它在树中的路径,构建条件模式基,然后从条件模式基构建条件FP - Tree,挖掘包含“果汁”的频繁项集。同样地,对其他项进行挖掘,最终得到所有的频繁项集。
  3. 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 - 项集并计算支持度,以此类推,挖掘出所有频繁项集。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

shell 脚本批量更新本地git仓库

文章目录 一、问题概述二、解决方法三、运行效果1. windows2. centos 一、问题概述 你是否遇到这样的场景: 本地git仓库克隆了线上的多个项目,需要更新时,无法象svn一样,选中多个项目一起更新。 只能苦逼的一个个选中&#xff0c…

软考《信息系统运行管理员》- 4.3 信息系统软件运维的过程

4.3 信息系统软件运维的过程 文章目录 4.3 信息系统软件运维的过程日常运维日常运维的内容日常运行例行测试维护例行测试流程的关键点例行维护流程的关键点 定期测试维护 缺陷诊断与修复信息系统软件缺陷的概念信息系统软件缺陷的分类信息系统软件缺陷诊断与修复流程缺陷诊断与…

2024百度云智大会|百度大模型内容安全合规探索与实践

9月25日,2024百度云智大会在北京举办。会上,百度智能云分别针对算力、模型、AI 应用,全面升级百舸 AI 异构计算平台 4.0、千帆大模型平台 3.0 两大 AI 基础设施,并升级代码助手、智能客服、数字人三大 AI 原生应用产品。 在大模型…

App测试时常用的adb命令

adb 全称为 Android Debug Bridge(Android 调试桥),是 Android SDK 中提供的用于管理 Android 模拟器或真机的工具。 adb 是一种功能强大的命令行工具,可让 PC 端与 Android 设备进行通信。adb 命令可执行各种设备操作&#xff0…

Biomamba求职| 国奖+4篇一作SCI

转眼间我也要参加秋招啦,认真的求职帖,各位老师/老板欢迎联系~其它需要求职的小伙伴也欢迎把简历发给我们,大家一起找工作。 一、基本信息 姓名:Biomamba 性别:男 出厂年份:1998 籍贯:浙江…

如何选择医疗器械管理系统?盘谷医疗符合最新版GSP要求

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

【笔记学习篇】一篇文章搞定Mybatis-快速回顾

概述 5.1.1 Mybatis简介 Mybatis是一款优秀的持久层框架,它以sql为中心,支持定制化sql、存储过程以及高级映射。 使用Mybatis框架,可以无需手动编写基础的JDBC代码、无需手动设置参数和转换结果集到对象。 Mybatis可以使用简单的xml或注解来…

xtu oj 四位数

样例输入# 2 1990 1111样例输出# 5 0 分离整数与合并 AC代码 #include<stdio.h> //判断四个数码是否相等 int Judge(int n){int flag1;int gn%10,sn/10%10,bn/100%10,qn/1000;if(gs&&gb&&gq)flag0;return flag; } int main(){int T;scanf("%d…

使用 Go 语言与 Redis 构建高效缓存与消息队列系统

什么是 Redis&#xff1f; Redis 是一个开源的内存数据库&#xff0c;支持多种数据结构&#xff0c;包括字符串、列表、集合、哈希和有序集合。由于 Redis 运行在内存中&#xff0c;读写速度极快&#xff0c;常被用于构建缓存系统、实时排行榜、会话存储和消息队列等高并发场景…

代码随想录算法训练营第四十六天 | 647. 回文子串,516.最长回文子序列

四十六天打卡&#xff0c;今天用动态规划解决回文问题&#xff0c;回文问题需要用二维dp解决 647.回文子串 题目链接 解题思路 没做出来&#xff0c;布尔类型的dp[i][j]&#xff1a;表示区间范围[i,j] &#xff08;注意是左闭右闭&#xff09;的子串是否是回文子串&#xff0…

YOLO11改进|SPPF篇|引入YOLOv9提出的SPPELAN模块

目录 一、【SPPELAN】模块1.1【SPPELAN】模块介绍1.2【SPPELAN】核心代码 二、添加【SPPELAN】模块2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【SPPELAN】模块 1.1【SPPELAN】模块介绍 下图是【SPPELAN】的结构图&#xff0c;让我们…

手游和应用出海资讯:字节跳动《Lemon8》在美下载量飙升;美团海外版《Keeta》进军沙特市场

NetMarvel帮助游戏和应用广告主洞察全球市场、获取行业信息&#xff0c;以下为10月第一周资讯&#xff1a; ● OpenAI Sora负责人加盟 Google DeepMind ● 字节跳动《Lemon8》登顶美国App Store排行榜 ● 消息称腾讯与Guillemot家族考虑收购育碧 ● OpenAI官宣获66亿美元融资 ●…

Could not get JDBC Connection: wait millis 10000, active 500

Could not get JDBC Connection: nested exception is com,alibaba,druid.pool,GetConnectionTimeoutException: wait millis 10000, active 500 1、生产突然出现这样的问题&#xff0c;后经过各种分析查找 jmap -dump:formatb,filewar_l.hporf 10333 ‌jmap -dumpb命令用于生成…

DGL库之HGTConv的使用

DGL库之HGTConv的使用 论文地址和异构图构建教程HGTConv语法格式HGTConv的使用 论文地址和异构图构建教程 论文地址&#xff1a;https://arxiv.org/pdf/2003.01332 异构图构建教程&#xff1a;异构图构建 异构图转同构图&#xff1a;异构图转同构图 HGTConv语法格式 dgl.nn.…

示教器界面介绍

1. 示教器外部按键介绍 1. 程序编辑完成后&#xff0c;可以热插拔示教器&#xff0c;按下拔出示教器按钮 2. 模式切换旋钮&#xff0c;切换到水平状态进行模式选择&#xff1a;T1手动低速、T2手动高速、自动模式、外部自动模式&#xff0c;选择完成后&#xff0c;模式切换旋钮…

数据质量指标:如何衡量数据的准确性

数据质量是任何数据驱动运营的重要组成部分。即使对于不打算将数据集出售给其他公司的企业&#xff0c;数据的质量和准确性也会极大地影响决策效率。 不幸的是&#xff0c;没有单一指标可以确保数据质量达到标准。您必须跟踪多个指标并不断关注它们。因此&#xff0c;维护数据…

阅读摘抄(七)——The best approach to address the misuse of body ideals

adj.道德的,伦理的,环保的,(药品)凭处方出售的 n/v.误用,滥用 v.虐待,不公平对待Relying on ethical persuasion rather than law to address the misuse of body ideals may bev.相信,依赖 n.说服力 persuade v.说服,劝服,使相信,使信服 …

【案例】—— 基于OpenCV方法的指纹验证

一、案例整体介绍 下图中上面一张指纹图片与下面两张图片中的其中一个指纹是同一个指纹分别将上面的指纹图片与下面的两张图片进行匹配验证在model(模板指纹图片)与验证的两张指纹图片的2次匹配中&#xff0c;分别需要提取出模板指纹图片与验证指纹图片的特征(特征检测)&#…

【论文阅读】SRCNN

学习资料论文题目&#xff1a;Learning a Deep Convolutional Network for Image Super-Resolution&#xff08;学习深度卷积网络用于图像超分辨率&#xff09;论文地址&#xff1a;link.springer.com/content/pdf/10.1007/978-3-319-10593-2_13.pdf代码&#xff1a;作者提出的…

Vue检测获取最新资源 解决浏览器缓存问题

Vue检测获取最新资源 解决浏览器缓存问题 1、在public文件夹下创建version.json文件2、vue.config.js中&#xff0c;每次打包动态更新version.json内容3、App.vue中使用定时器去检测版本号和本地是否有差异 背景&#xff1a;由于浏览器缓存问题&#xff0c;vue2项目发布后&…