机器学习-关联规则算法Apriori及编码实现

一、前置知识

       在了解关联规则之前首先了解一些相关概念,包含项集、频繁项集、支持度、置信度、提升度等基础概念。假如我们在经营一家商品超市,顾客进行购买商品的订单信息如下:

TID  Items
T1  {耳机,背包}
T2{背包,手机手表,鞋子}        
T3 {耳机,手机手表,相机}
T4 {背包,耳机,手机手表}
T5  {背包,耳机,手机,相机}

-- TID是交易编号,表示一次购物交易的唯一标识,即用户购买的一次记录。

-- Items表示一次购买记录中顾客购买的商品如{耳机,背包}

1.项集

       项的集合,包含k个项的项集称为k项集,例如上面 {耳机,背包} 是2项集。

2.支持度

       表示物品A物品B同时出现的次数总的交易次数中的占比,例如 A表示手机,B表示手表,手机和手表同时出现的次数是3次,总的交易记录是5次,支持度=3/5=60%。

公式如下:

support(X→Y)=|X交Y|/N,表示物品集X和Y同时出现的次数占总记录数的比例。

3.置信度

       表示物品A物品B同时出现的总次数 物品A出现的总次数,例如手机和手表同时出现的次数是3次,手机出现的总次数是4次,则置信度=3/4=75%。

公式如下:

confidence(X→Y)=|X交Y|/|X|,集合X与集合Y同时出现的总次数/集合X出现的记录数。

4.提升度

       就是 置信度 除以 支持度。即 (3/4)/(3/5)=5/4 > 1 。

公式如下:

lift(X→Y)=confidence(X→Y)/P(Y),表示含有X的条件下,同时含有Y的概率,与Y总体发生的概率之比。

说明:

      提升度越高,说明置信度和支持度越好,说明物品之间的关联性也比较强。

5、频繁项集

       满足规定的最小支持度的项集,即出现频率大于最小支持度的项集被称作频繁项集。 例如:给定支持度是>50%,耳机和相机的支持度为2/5=40%,不满足规定的最小支持度即 <50%。而手机与手表的支持度是 3/5=60%,满足规定的最小支持度即>50%,因此{手机,手表}  是频繁项集。

       例如,如果在一个超市的销售数据中,发现葡萄酒、尿布和豆奶这三个商品经常一起被购买,
那么{葡萄酒,尿布,豆奶}就是一个频繁项集。

二、关联规则

       某超市的管理者发现:纸尿裤和啤酒放通常会出现在一个订单里,经过数据分析发现,买尿不湿的家长以父亲居多,如果他们在买尿不湿的同时恰好看到了啤酒,就会有很大的概率购买,从而就能提高啤酒的销售量。根据纸尿裤与啤酒的关联规则(买尿不湿的家长以父亲居多),超市经营者可以将这两件商品放在一起出售,并且还可以通过推荐系统向购买纸尿裤的顾客推荐啤酒,这样可以提高超市的效益。
       因此关联规则是分析挖掘购物篮中的购买行为。通过分析购物篮中不同商品之间的关联关系,可以揭示商品之间的搭配规律,为商家提供定制化的推荐策略,优化产品摆放和促销活动,以提高销售额和顾客满意度。
       关联规则分析也被称为购物篮分析,用于分析数据集各项之间的关联关系。
       关联规则挖掘是一种用于发现数据集中的频繁项集关联规则的数据挖掘技术。它可以帮助我们找到数据集中的相关性,从而可以用于市场篮子分析、推荐系统等领域。

关联规则的生成可以通过计算支持度和置信度来完成。
支持度表示项集在数据集中的出现频率,
而置信度表示在前提项集出现的情况下,结论项集出现的概率。

  1. 例如我要计算商品A和B在一起出售的支持度:
    支持度 = (同时包含商品A、B的交易数目) / (所有交易数目)

  2. 置信度是指在购买商品A的交易中,同时也购买了商品B的比例:
    置信度 = (同时包含商品A、B的交易数目) / (购买商品A的交易数目)

  3. 如果支持度和置信度都较高,说明商品A和B之间存在较强的关联关系,可以作为推荐系统中的一条关联规则。

三、数据挖掘算法

       频繁项集的挖掘通常使用数据挖掘算法,如Apriori算法、FPTree(Frequent Pattern Tree)、GSP、CBA等算法,后几种算法都是基于Apriori算法和思想产生,这些可以帮助我们有效地从大规模数据集中找出频繁项集,为商业决策提供支持。现在一般很少直接用Apriori算法来挖掘数据,但理解Apriori算法是理解其它相关算法的前提。

1、学习Apriori算法前提

       假如我们在经营一家商品种类并不多的杂货店,我们对哪些经常在一起被购买的商品非常感兴趣。我们只有四种商品:商品0、商品1、商品2、商品3。那么所有商品的组合有15种:{0}、{1}、{2}、{3}、{0,1}、{0,2}、{0,3}、{1,2}、{1,3}、{2,3}、{0,1,2}、{0,1,3}、{0,2,3}、{01,2,3}。那么所有可能被一起购买的商品组合可能只有一种商品,比如商品0,也可能包括两种、三种或所有四种商品。但我们不关心某人买了两件商品0以及四件商品2的情况,只关心他购买了一种或多种商品。下图显示了物品之间所有可能的组合:

图中使用物品的编号0来表示物品0本身。
图中从上往下的第一个集合是ϕ,表示空集或不包含任何物品的集合。
物品集合之间的连线表明两个或者更多集合可以组合形成一个更大的集合。

       我们的目标是找到经常在一起购买的物品集合。我们使用集合的支持度来度量其出现的频率。如何对一个给定的集合,比如{0,3},来计算其支持度?我们可以遍历上面15种记录中的毎条记录并检查该记录包含0和3,如果记录确实同时包含这两项,那么就增加总计数值。在扫描完所有数据之后,同时出现0和3的总次数是3次,即{0,3}、{0,1,3}、{01,2,3} ,  除以总的交易记录使用统计得到的总数数,就可以得到支持度。

       上述过程我们只有4个商品,组合是15个,只是针对单个集合{0,3},需要遍历15次。而随着物品数目的增加遍历次数会急剧增长。对于包含N种物品的组合项目有2^(n-1)数据集,共需要遍历 2^(n-1)次,而且实际上出售10000或更多种物品的商店并不少见。即使只出售100种商品的商店也会有  2^99个组合。需要变量2^99次,而且还是一个单个集合的遍历。如果所有集合都进行遍历,这样的运算量,其实即使是对于现在的很多计算机而言,也需要很长的时间才能完成运算。
       据挖掘算法Apriori算法的原理可以帮我们减少可能感兴趣的项集,降低所需的计算时间。
 

2、Apriori算法

       据挖掘算法Apriori算法的原理可以帮我们减少可能感兴趣的项集,降低所需的计算时间。

2.1 Apriori算法原理:

  • ​如果某个项集是频繁的,那么它的所有子集都是频繁的,例如,假设{1,2}是频繁的,那么{1}和{2}也一定是频繁的。
  • 将这个原理取反会发现:如果一个项集是非频繁的,那么它的所有超集也是非频繁的
  • 如下图中,已知项集{2,3}是非频繁的,那么可立即判断出项集{0,2,3}、{1,2,3}、{0,1,2,3}都是非频繁的,因此这些项集的支持度也就不需要再计算。使用该原理就可以避免项集数目的指数增长,从而在合理的时间内计算出频繁项集。

        使用该原理就可以避免项集数目的指数增长,从而在合理的时间内计算出频繁项集。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实践笔记-harbor仓库镜像上传与拉取

harbor仓库镜像上传与拉取 1.上传镜像修改 daemon.json 配置文件上传镜像至harbor 2.拉取镜像登录账号&#xff08;跟上传镜像那里一样操作登录步骤就可以了&#xff09;拉取镜像 环境&#xff1a;centos7 1.上传镜像 修改 daemon.json 配置文件 # 编辑daemon.json文件&#…

【Entity Framework】创建并配置模型

【Entity Framework】创建并配置模型 文章目录 【Entity Framework】创建并配置模型一、概述二、使用fluent API配置模型三、分组配置四、对实体类型使用EntityTypeConfigurationAttribute四、使用数据注释来配置模型五、实体类型5.1 在模型中包含类型5.2 从模型中排除类型5.3 …

RabbitMQ--04--发布订阅模式 (fanout)-案例

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 发布订阅模式 (fanout)---案例前言RabbitListener和RabbitHandler的使用 1.通过Spring官网快速创建一个RabbitMQ的生产者项目2.导入项目后在application.yml文件中配…

MSTP环路避免实验(华为)

思科设备参考&#xff1a;MSTP环路避免实验&#xff08;思科&#xff09; 一&#xff0c;技术简介 MSTP&#xff08;多生成树协议&#xff09;&#xff0c;MSTP解决了STP和RSTP没有考虑vlan的问题&#xff0c;STP和RSTP将所有的vlan共享为一个生成树实例&#xff0c;无法实现…

数据链路层之信道:数字通信的桥梁与守护者

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

蓝桥杯刷题第五天(昨天刷了忘记更了)

思路&#xff1a; 用dp来记录最短消耗时间 dp[坐标][zhuangtai] 状态0表示在底部&#xff0c;状态1表示在传送门处&#xff1b; 先初始化dp[1][0] 和dp[1][1]然后循环遍历到dp[n][0] 和dp[n][1]&#xff0c;用动态规划方程去赋值&#xff1b; ps&#xff1a;易错点在于要开…

基于spark的大数据分析预测地震受灾情况的系统设计

基于spark的大数据分析预测地震受灾情况的系统设计 在本篇博客中,我们将介绍如何使用Apache Spark框架进行地震受灾情况的预测。我们将结合数据分析、特征工程、模型训练和评估等步骤,最终建立一个预测模型来预测地震造成的破坏程度,同时使用可视化大屏的方式展示数据的分布…

CCF-CSP19<2020-06>-第1/2题

202006-1 线性分类器 题目分析&#xff1a; 给定n个点&#xff0c;并标记为AB两类&#xff0c;问给定直线是否能将其分为两个点集。 简单数学知识&#xff0c;点在直线上满足axbyc0&#xff0c;点在直线割平面所得的上下其值会正负相反。 AC代码&#xff1a; // -*- codin…

C++入门知识详细讲解

C入门知识详细讲解 1. C简介1.1 什么是C1.2 C的发展史1.3. C的重要性1.3.1 语言的使用广泛度1.3.2 在工作领域 2. C基本语法知识2.1. C关键字(C98)2.2. 命名空间2.2 命名空间使用2.2 命名空间使用 2.3. C输入&输出2.4. 缺省参数2.4.1 缺省参数概念2.4.2 缺省参数分类 2.5. …

日历插件fullcalendar【笔记】

日历插件fullcalendar【笔记】 前言版权开源推荐日历插件fullcalendar一、下载二、初次使用日历界面示例-添加事件&#xff0c;删除事件 三、汉化四、动态数据五、前后端交互1.环境搭建-前端搭建2.环境搭建-后端搭建3.代码编写-前端代码fullcalendar.htmlfullcalendar.js 4.代码…

【前端】layui前端框架学习笔记

【前端目录贴】 参考视频:LayUI 参考笔记:https://blog.csdn.net/qq_61313896/category_12432291.html 1.介绍 官网&#xff1a;http://layui.apixx.net/index.html 国人16年开发的框架,拿来即用,门槛低 … 2. LayUi的安装及使用 Layui 是一套开源的 Web UI 组件库&#xff0…

乐乐音乐鸿蒙版-支持krc歌词(动感歌词、翻译和音译歌词)

简介 乐乐音乐主要是基于HarmonyOS开发的音乐播放器&#xff0c;它支持lrc歌词和动感歌词(ksc歌词、krc歌词和hrc歌词等)、多种格式歌词转换器及制作动感歌词、翻译歌词和音译歌词。 开发环境 ArkTS、Stage模型、SDK3.1、 API 9 注&#xff1a;没试过在真机条件下调试。 功…

SpringCloud-Eureker配置中心搭建

一、基于本地配置文件的 Eureker配置中心搭建 1.、创建一个springBoot项目 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version><component.version>0.0.1-SNAPSHOT</…

机器学习:探索数据中的模式与智能

文章目录 导言介绍&#xff1a;机器学习的定义和重要性发展历程&#xff1a;从概念到现实应用 基础概念机器学习的基本原理监督学习、无监督学习和强化学习的区别与应用1.监督学习2.无监督学习3.强化学习 常见的机器学习任务和应用领域 结语 导言 当代科技领域中最为引人注目的…

两张图片相似度匹配算法学习路线

大纲&#xff1a;​​​​​​目标跟踪基础&#xff1a;两张图片相似度算法-腾讯云开发者社区-腾讯云 (tencent.com) 目标跟踪基础&#xff1a;两张图片相似度算法 (qq.com) 一、传统方法 1.欧式距离&#xff08;用于判断是否完全相同&#xff09; [三维重建] [机器学习] 图…

NC13610 矩阵

题目描述 给出一个n * m的矩阵。让你从中发现一个最大的正方形。使得这样子的正方形在矩阵中出现了至少两次。输出最大正方形的边长。 输入描述: 第一行两个整数n, m代表矩阵的长和宽&#xff1b; 接下来n行&#xff0c;每行m个字符&#xff08;小写字母&#xff09;&#x…

Java8 新特性 Stream流操作

数据准备 package test;/*** [一句话描述该类的功能]** author : [61692]* version : [v1.0]* createTime : [2024/3/31 14:52]*/ public class Student {private int id;private int age;private int yuwenScore;private int mathScore;private String name;private int yi…

c++初阶篇----string的底层模拟

string类的模拟 目录 string类的模拟功能介绍各功能的实现类的构造函数&#xff0c;拷贝构造函数&#xff0c;析构函数迭代器的实现string的内部容量访问成员函数string的修改成员函数string类的相关联函数string类的输入输出友元 汇总string功能的实现汇总测试代码 功能介绍 …

Vue3+.NET6前后端分离式管理后台实战(八)

1&#xff0c;Vue3.NET6前后端分离式管理后台实战(八)已经在订阅号发布有兴趣的可以关注一下&#xff01; 有兴趣的可以关注一下&#xff1a;