数据挖掘-关联规则学习-Apriori算法原理

数据挖掘-关联规则学习-Apriori算法原理

  • 引言:
  • 一、关联分析是什么?
  • 二、基本概念
    • 1. 项
    • 2. 项集
    • 3. 支持度
    • 4. 置信度
    • 5. 提升度
    • 6. 频繁项集
  • 三、关联分析过程
  • 四、Apriori算法原理
  • 五、程序实现

引言:

比如你女朋友,低头玩手指+沉默,那大概率生气了,那这就是你总结出来的规则。啤酒与尿布的例子相信很多人都听说过吧,故事是这样的:在一家超市中,人们发现了一个特别有趣的现象,尿布与啤酒这两种风马牛不相及的商品居然摆在一起,但这一奇怪的举措居然使尿布和啤酒的销量大幅增加了。为什么有这么奇怪现象呢?是因为美国妇女在丈夫回家前买尿布,然后丈夫顺手买了自己喜欢的啤酒,所以发生了这么有趣的事情。
很多人只记住了啤酒尿不湿,很少深入思考,我们稍微转换下,日常的事情,也存在非常多的关联规则?
此段引言来自这个链接

一、关联分析是什么?

关联分析亦称为关联规则学习。
关联分析就是从大规模数据中,发现对象之间隐含关系与规律的过程。
通常,关联关系表现为某些物品在一起出现的频率大小

二、基本概念

1. 项

项,指的是数据集中的一个对象
苹果,可以称之为项。
汽车,可以称之为项。
1(数字一),可以称之为项。

2. 项集

项集就是若干项构成的集合。
{苹果},可以称之为项集。{苹果,香蕉},可以称之为项集。{1,2,3},可以称之为项集。

关联规则有三个核心概念需要理解:支持度、置信度、提升度

3. 支持度

支持度为某项集在数据集中出现的频率。即项集在数据集中出现的次数除以数据集中所有记录的数量.
s u p p o r t ( A ) = c o u n t ( A ) c o u n t ( D a t a B a s e ) = P ( A ) support(A)=\frac{count(A)}{count(DataBase)}=P(A) support(A)=count(DataBase)count(A)=P(A)
也就是说,支持度指某个 “ 物品 ” 集合在所有集合中出现的概率
支持度体现的是某项集的频繁程度,只有某项集的支持度达到一定程度,我们才有研究分析该项集的必要。

4. 置信度

关联规则{ A -> B }中,置信度为A与B同时出现的次数,除以A出现的次数。
C o n f i d e n c e ( A − > B ) = c o u n t ( A B ) c o u n t ( A ) = c o u n t ( A B ) c o u n t ( D a t a B a s e ) c o u n t ( A ) c o u n t ( D a t a B a s e ) = P ( A B ) P ( A ) = P ( B ∣ A ) Confidence( A -> B )=\frac{count(AB)}{count(A)} =\frac{\frac{count(AB)}{count(DataBase)}}{\frac{count(A)}{count(DataBase)}}=\frac{P(AB)}{P(A)}=P(B|A) Confidence(A>B)=count(A)count(AB)=count(DataBase)count(A)count(DataBase)count(AB)=P(A)P(AB)=P(BA)
也就是说,“置信度指在包含某个物品集合的交易中,同时包含另一个物品集合的概率”。
置信度体现的是关联规则的可靠程度,如果关联规则的{ A -> B }的置信度较高,则说明当A发生时,B有很大概率也会发生,这样就有可能带来研究价值。

5. 提升度

关联规则{ A -> B }中,提升度为{ A -> B }的置信度除以B的支持度。
l i f t ( A − > B ) = C o n d i d e n c e ( A − > B ) s u p p o r t ( B ) = P ( B ∣ A ) P ( B ) = P ( A B ) P ( A ) P ( B ) lift( A -> B )=\frac{Condidence( A->B )}{support(B)}=\frac{P(B|A)}{P(B)}=\frac{P(AB)}{P(A)P(B)} lift(A>B)=support(B)Condidence(A>B)=P(B)P(BA)=P(A)P(B)P(AB)
也就是说,“提升度是在知道 A 的条件下,同时包含 B 的概率与预期同时包含 B 的概率之比
提升度体现的是组合(应用关联规则)相对于不组合(不应用关联规则)的比值。
如果提升度大于1,则说明应用该关联规则是有价值的。
如果提升度小于1,则说明应用该关联规则起到了反方向的影响。

考虑到大部分的应用场景,应该尽可能让关联规则的提升度大于1,提升度越大,则应用该关联规则的效果越好。

6. 频繁项集

通常情况下,我们只会对频繁出现的项集进行研究。
因此,我们会设置一个支持度阈值,如果一个项集的支持度达到(大于等于)该阈值,则该项集就成为频繁项集。
特别的,如果频繁项集中含有 k 个项,我们称之为频繁 k 项集。

三、关联分析过程

  1. 从数据集中寻找频繁项集
  2. 从频繁项集中生成关联规则

寻找频繁项集,我们当然可以利用暴力搜索的方式,逐个寻找不同种组合的是否为频繁项集。
我们可以计算一下暴力搜索的次数,一项集、二项集、三项集等等,直至N项集。
C N 0 + C N 1 + C N 2 + . . . + C N N = 2 N C_{N}^{0}+C_{N}^{1}+C_{N}^{2}+ ... +C_{N}^{N}=2^{N} CN0+CN1+CN2+...+CNN=2N
当然,0项集在分析中是没有意义的。
故, C N 1 + C N 2 + . . . + C N N = 2 N − 1 C_{N}^{1}+C_{N}^{2}+ ... +C_{N}^{N}=2^{N}-1 CN1+CN2+...+CNN=2N1
在大数据的背景下, 2 N − 1 2^{N}-1 2N1会消耗大量的计算资源。
因此,暴力搜索的方法,理论可行,实际不可用
那么,是否存在一种方法能够减少计算,优化效率?

四、Apriori算法原理

为了降低运算量,使用Apriori算法进行优化。
算法有两个性质:

  • 如果一个项集是频繁项集,则其所有子集(非空)也是频繁项集。
  • 如果一个项集(非空)是非频繁项集,则其所有超集也是非频繁项集。

证明:
频繁项集的区分以支持度为标准,即频率(概率),记为 P P P。运算过程满足概率论的基本原理。
P ( A ) ≥ P ( A B ) ≥ 支持度阈值 P(A)≥P(AB)≥支持度阈值 P(A)P(AB)支持度阈值
频繁项集{ A,B}的支持度大于阈值,项集{A}的支持度当然大于阈值,因此项集{A}也为频繁项集。
同理,
项集{C}为非频繁项集,其支持度 P ( C ) P(C) P(C)小于阈值。
P ( C D ) ≤ P ( C ) ≤ 支持度阈值 P(CD)≤P(C)≤支持度阈值 P(CD)P(C)支持度阈值
非频繁项集{ C }的支持度小于阈值,项集{CD}的支持度当然小于阈值,因此项集{CD}也为非频繁项集。

算法流程:

  1. 扫描数据集,从数据集中生成候选k项集 C k C_k Ck(k从1开始)。
  2. 计算 C k C_k Ck中,每一个项集的支持度,删除低于阈值的项集,构成频繁项集 L k L_k Lk
  3. 将频繁项集 L k L_k Lk中的元素进行组合,生成候选k+1项集 C k + 1 C_{k+1} Ck+1
  4. 重复步骤②③,直到满足以下两个条件之一时,算法结束。
    • 频繁k项集无法组合合成候选k+1项集。
    • 所有候选k项集支持度都低于指定的阈值(最小支持度),无法生成频繁k+1项集。

五、程序实现

可以使用Python中的efficient-apriori库帮助我们快速实现上述算法。

apriori(transactions: typing.Iterable[typing.Union[set, tuple, list]], min_support: float=0.5, min_confidence: float=0.5, max_length: int=8, verbosity: int=0, output_transaction_ids: bool=False)
上面就是这个函数的参数
min_support:最小支持度
min_confidence:最小置信度
max_length:项集长度

#包安装 我们使用efficient-apriori,python中也可以利用apyori库和mlxtend库
pip install efficient-apriori#加载包
from efficient_apriori import apriori# 构造数据集
data = [('牛奶','面包','尿不湿','啤酒','榴莲'),('可乐','面包','尿不湿','啤酒','牛仔裤'),('牛奶','尿不湿','啤酒','鸡蛋','咖啡'),('面包','牛奶','尿不湿','啤酒','睡衣'),('面包','牛奶','尿不湿','可乐','鸡翅')]
#挖掘频繁项集和频繁规则
itemsets, rules = apriori(data, min_support=0.6,  min_confidence=1)
#频繁项集
print(itemsets)itemsets[1] #满足条件的一元组合itemsets[2]#满足条件的二元组合itemsets[3]#满足条件的三元组合#频繁规则
print(rules)
#我们把max_length=2这个参数加进去看看
itemsets, rules = apriori(data, min_support=0.6,
min_confidence=0.5,
max_length=2)
#频繁项集
print(itemsets)

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

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

相关文章

基于深度神经网络的分类--实现与方法说明

1、分类系统的设计 采用神经网络进行分类需要考虑以下几个步骤: 数据预处理: 将数据特征参数和目标数据整理成合适的输入和输出形式,可以使用过去一段时间的数据作为特征,然后将未来的数据作为输出标签,进行分类问题的…

c++ future与promise

C11 标准中 头文件中包含了以下几个类和函数: Providers 类:std::promise, std::package_taskFutures 类:std::future, shared_future.Providers 函数:std::async()其他类型:std::future_error, std::future_errc, st…

sleep () 和 wait () 有什么区别?

sleep () 方法 sleep () 方法是Thread类的静态方法,可以通过Thread.sleep()来调用。 它是线程的一个静态方法,用于让当前线程休眠一段指定的时间。 sleep () 不会释放线程持有的锁,因此其他线程无法获得锁资源,可能导致同步问题…

13.4 目标检测锚框标注 非极大值抑制

锚框的形状计算公式 假设原图的高为H,宽为W 锚框形状详细公式推导 以每个像素为中心生成不同形状的锚框 # s是缩放比,ratio是宽高比 def multibox_prior(data, sizes, ratios):"""生成以每个像素为中心具有不同形状的锚框"""in_he…

后端Windows软件环境安装配置大全[JDK、Redis、RedisDesktopManager、Mysql、navicat、VMWare、finalshell、MongoDB...持续更新中]

文章目录 前言1. 安装 JDK2. 安装 Redis3. 安装 RedisDesktopManager(Redis可视化工具)4. 安装 Mysql5. 安装 navicat (Mysql可视化工具)6. 安装 VMWare7. 安装 finalshell (VMWare可视化工具)8. 安装 MongodDB9. 安装 maven 总结 前言 为了巩固所学的知…

vue 主组件把日期选择器给子组件props传obj值, 与子组件监听 watch对象或对象属性

1 主组件 1.1 :passObj 这种 非v-model ; change"DateChange"触发事件 <template> <div class"date-picker-panel"><el-date-picker v-model"value2" type"datetimerange" :picker-options"pickerOptions"…

Web安全测试(三):SQL注入漏洞

一、前言 结合内部资料&#xff0c;与安全渗透部门同事合力整理的安全测试相关资料教程&#xff0c;全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试&#xff0c;覆盖Web、APP、中间件、内外网、Linux、Windows多个平台。学完后一定能成为安全大佬&#xff01; 全部…

WSL2 window上高效运行Linux

1 WSL及优势 1.1 WSL简介 WSL&#xff08;Windows Subsystem for Linux&#xff09;是Windows操作系统中的一个功能&#xff0c;它允许用户在Windows环境下运行Linux应用程序。WSL提供了一个与Linux内核兼容的系统调用转发层&#xff0c;使得Linux二进制文件可以在Windows上直…

基于风险的漏洞管理

基于风险的漏洞管理涉及对即将被利用的漏洞的分类响应&#xff0c;如果被利用&#xff0c;可能会导致严重后果。本文详细介绍了确定漏洞优先级时要考虑的关键风险因素&#xff0c;以及确保基于风险的漏洞管理成功的其他注意事项。 什么是基于风险的漏洞管理对基于风险的漏洞管…

vue中html引入使用<%= BASE_URL %>变量

首先使用src相对路径引入 注意&#xff1a; js 文件放在public文件下 不要放在assets静态资源文件下 否则 可能会报错 GET http://192.168.0.113:8080/src/assets/js/websockets.js net::ERR_ABORTED 500 (Internal Server Error) 正确使用如下&#xff1a;eg // html中引…

(线特征)opencv+opencv contribute 配置

写一篇博客&#xff0c;记录开始线特征slam的历程。 在配置环境的时候&#xff0c;可以发现大多数都是用到了opencv3.4.16和其contribute版本&#xff0c;这里进行一个相关操作的教学。配置环境是在Ubuntu下面进行的&#xff0c;建议使用Ubuntu18来进行线特征的配置以及代码的…

8月27日,每日信息差

1、大众集团在美因发动机故障召回2018辆汽车。发动机连杆轴承可能损坏&#xff0c;导致发动机故障和熄火&#xff0c;从而增加撞车风险。经销商将对发动机进行检查&#xff0c;必要时免费更换发动机&#xff08;财联社&#xff09; 2、赛百味确认出售协议达成。美国快餐连锁店…

国产AI芯片突破,芯片或成白菜价,恐惧的美芯阻止台积电为它代工

日前消息指台积电大幅减少一家中国AI芯片企业的产能&#xff0c;原因在于国产AI芯片的性能已接近美芯&#xff0c;美国芯片企业NVIDIA与相关的资本机构贝莱德联手施压台积电所致&#xff0c;凸显出美国芯片忧虑中国AI芯片的竞争力。 这家国产AI芯片企业为壁仞科技&#xff0c;据…

【精算研究01/10】 计量经济学的性质和范围

一、说明 计量经济学是使用统计方法来发展理论或测试经济学或金融学中的现有假设。计量经济学依赖于回归模型和零假设检验等技术。计量经济学也可以用来预测未来的经济或金融趋势。 图片来源&#xff1a;https://marketbusinessnews.com 二、 计量经济之简介 计量经济学是对经济…

定义和实施需求基线

在传统的瀑布开发模式中&#xff0c;开发人员通常在初始阶段就确定需求并将之“冻结”&#xff0c;以便在不受需求变更影响的情况下进行开发。然而&#xff0c;实际经验告诉我们&#xff0c;这种方法在多数情况下并不适用&#xff0c;更为有效的方法是先建立需求基线&#xff0…

Spring MVC 学习总结

学习目标 了解 Spring MVC 是什么&#xff0c;为什么要使用它或者说它能解决什么问题&#xff0c;其与 Spring 是什么关系。理解为什么配置 Spring MVC 的前端控制器的映射路径为 “/” 会导致静态资源访问不了&#xff0c;掌握怎么处理这个问题。掌握基于注解方式使用 Spring…

有哪些前端调试和测试工具? - 易智编译EaseEditing

前端开发调试和测试工具帮助开发人员在开发过程中发现和修复问题&#xff0c;确保网站或应用的稳定性和性能。以下是一些常用的前端调试和测试工具&#xff1a; 调试工具&#xff1a; 浏览器开发者工具&#xff1a; 现代浏览器&#xff08;如Chrome、Firefox、Safari等&#…

深度学习2.神经网络、机器学习、人工智能

目录 深度学习、神经网络、机器学习、人工智能的关系 大白话解释深度学习 传统机器学习 VS 深度学习 深度学习的优缺点 4种典型的深度学习算法 卷积神经网络 – CNN 循环神经网络 – RNN 生成对抗网络 – GANs 深度强化学习 – RL 总结 深度学习 深度学习、神经网络…

Hbase-技术文档-java.net.UnknownHostException: 不知道这样的主机。 (e64682f1b276)

问题描述&#xff1a; 在使用spring-boot操作habse的时候&#xff0c;在对habse进行操作的时候出现这个问题。。 报错信息如下&#xff1a; 第一段报错&#xff1a; 第二段报错&#xff1a; java.net.UnknownHostException: e64682f1b276 问题定位解读&#xff1a; 错误 ja…

Android 13 - Media框架(7)- NuPlayer::Source

Source 在播放器中起着拉流&#xff08;Streaming&#xff09;和解复用&#xff08;demux&#xff09;的作用&#xff0c;Source 设计的好坏直接影响到播放器的基础功能&#xff0c;我们这一节将会了解 NuPlayer 中的通用 Source&#xff08;GenericSource&#xff09;关注本地…