机器学习模型——关联规则

目录

关联规则 - 基本概念

关联规则的挖掘步骤:

Apriori算法

Apriori算法简介:

Apriori算法举例:

Apriori算法优缺点:

Apriori算法应用

FP-growth算法:

FP-growth算法简介:

FP-growth的数据结构:

FP-Growth算法流程:

FP-Growth算法优缺点: 


关联规则 - 基本概念

项集:项的集合,包含k个项的项集称为k项集。

频繁项集:满足规定的最小支持度的项集。

支持度:support((X,Y)) =|X交Y|/N,表示物品集X和Y同时出现的次数占总记录数的比例。就是几个关联的数据在数据集中出现的次数占总数据集的比重,或者说几个数据关联出现的概率。一般来说,支持度高的数据不一定构成频繁项集,但是支持度太低的数据肯定不构成频繁项集。

置信度:confidence(X→Y) = |X交Y|/|X| ,集合X与集合Y同时出现的总次数/集合X出现的记录数 。体现了一个数据出现后,另一个数据出现的概率,或者说数据的条件概率。

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

利用提升度体现了X和Y之间的关联关系:

  •     提升度大于1则𝑋→𝑌是强关联规则;
  •     提升度小于等于1则𝑋→𝑌是无效的关联规则;
  •     如果X和Y独立,则有 Lift(X→Y)=1 ,因为此时P(X|Y)=P(X)。

最小支持度:专家定义的衡量支持度的阈值,表示项目集在统计意义上的最低重要性。

最小置信度:专家定义的衡量置信度的阈值,表示关联规则的最低可靠性。

强关联规则:同时满足最小支持度阈值和最小置信度阈值的规则。

关联规则的挖掘步骤:

生成频繁项集和生成规则

找出强关联规则

找到所有满足强关联规则的项集

Apriori算法

Apriori算法简介:

Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过频繁项集生成和关联规则生成两个阶段来挖掘频繁项集。它的主要任务就是设法发现事物之间的内在联系。

比如在常见的超市购物数据集,或者电商的网购数据集中,如果我们找到了频繁出现的数据集,那么对于超市,我们可以优化产品的位置摆放,对于电商,我们可以优化商品所在的仓库位置,达到节约成本,增加经济效益的目的。

Apriori算法举例:

Apriori使用频繁项集的先验知识,使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集。其原理是如果某个项集是频繁的,那么它的子集也是频繁的。反过来说,如果一个项集是非频繁的,那么它的所有超集也是非频繁的。比如{1,2}出现的次数已经小于最小支持度了(非频繁的),那么超集{0,1,2}的组合肯定也是非频繁项集。

连接步

若有两个k-1项集,每个项集按照“属性-值”(一般按值)的字母顺序进行排序。如果两个k-1项集的前k-2个项相同,而最后一个项不同,则证明它们是可连接的,即这个k-1项集可以联姻,即可连接生成k项集。使如有两个3项集:{a, b, c}{a, b, d},这两个3项集就是可连接的,它们可以连接生成4项集{a, b, c, d}。又如两个3项集{a, b, c}{a, d, e},这两个3项集显示是不能连接生成3项集的; 

剪枝步

若一个项集的子集不是频繁项集,则该项集肯定也不是频繁项集。例如,若存在3项集{a, b, c},如果它的2项子集{a, b}的支持度即同时出现的次数达不到阈值,则{a, b, c}同时出现的次数显然也是达不到阈值的。因此,若存在一个项集的子集不是频繁项集,那么该项集就应该被无情的舍弃。

Apriori算法优缺点:

优点:

(1)使用先验原理,大大提高了频繁项集逐层产生的效率;

(2)简单易理解;数据集要求低。

缺点:

(1)每一步产生侯选项目集时循环产生的组合过多,没有排除不应该参与组合的元素;

(2)每次计算项集的支持度时,都对数据库D中的全部记录进行了一遍扫描比较,如果是一个大型的数据库的话,这种扫描比较会大大增加计算机系统的I/O开销。而这种代价是随着数据库的记录的增加呈现出几何级数的增加。因此人们开始寻求更好性能的算法。

Apriori算法是一个非常经典的频繁项集的挖掘算法,很多算法都是基于Apriori算法而产生的,包括FP-Tree,GSP, CBA等。这些算法利用了Apriori算法的思想,但是对算法做了改进,数据挖掘效率更好一些,因此现在一般很少直接用Apriori算法来挖掘数据了,但是理解Apriori算法是理解其它Apriori类算法的前提,同时算法本身也不复杂。

scikit-learn中并没有频繁集挖掘相关的算法类库,这不得不说是一个遗憾。

Apriori算法应用

推荐系统:用关联算法做协同过滤

可以找出用户购买的所有物品数据里频繁出现的项集,找到满足支持度阈值的关联物品的频繁N项集或者序列。如果用户购买了频繁N项集或者序列里的部分物品,可以将频繁项集或序列里的其他物品按一定的评分准则推荐给用户,这个评分准则可以包括支持度,置信度和提升度等。

Apriori不适于非重复项集数元素较多的案例,建议分析的商品种类为10类左右。

FP-growth算法:

FP-growth算法简介:

FP-growth算法建立在Apriori算法的概念之上,不同之处是它采用了更高级的数据结构FP-tree减少扫描数据次数,只需要两次扫描数据库,相比于Apriori减少了I/O操作,克服了Apriori算法需要多次扫描数据库的问题。

FP-growth的数据结构:

为了减少I/O次数, FP-growth算法引入了一些数据结构来临时存储数据。这个数据结构包括三部分:

一个项头表里面记录了所有的1项频繁集出现的次数,按照次数降序排列。

FP-Tree将原始数据集映射到了内存中的一颗FP树。

节点链表所有项头表里的1项频繁集都是一个节点链表的头,它依次指向FP树中该1项频繁集出现的位置。这样做主要是方便项头表和FP-Tree之间的联系查找和更新,也好理解。

 https://www.cnblogs.com/pinard/p/6307064.html

FP-Growth算法流程:

  1. 扫描数据,得到所有频繁一项集的的计数。然后删除支持度低于阈值的项,将1项频繁集放入项头表,并按照支持度降序排列。
  2. 扫描数据,将读到的原始数据剔除非频繁1项集,并将每一条再按照支持度降序排列。
  3. 读入排序后的数据集,逐条插入FP树,插入时按照排序后的顺序,插入FP树中,排序靠前的节点是祖先节点,而靠后的是子孙节点。如果有共用的祖先,则对应的公用祖先节点计数加1。插入后,如果有新节点出现,则项头表对应的节点会通过节点链表链接上新节点。直到所有的数据都插入到FP树后,FP树的建立完成。
  4. 从项头表的底部项依次向上找到项头表项对应的条件模式基。从条件模式基递归挖掘得到项头表项项的频繁项集。
  5. 如果不限制频繁项集的项数,则返回步骤4所有的频繁项集,否则只返回满足项数要求的频繁项集。

FP-Growth算法优缺点: 

优点:     

FP-Growth一般要快于Apriori ;

缺点:

FP-Growth实现比较困难,在某些数据集上性能会下降;     

FP-Growth适用数据类型:离散型数据

由于python中并未封装有关关联规则欸到第三方库,因此代码实现部分我会放在将spark时在对关联规则进行代码实现

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

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

相关文章

AI帮助写代码:在python中,如何替换字符串中指定位置的字符

用python编写一段代码,在下面的字符串中:#1#2#3#4#5#6#7#8#9#10#11#12#13#14#15#16#17#18#19#20#21#22#23#24#25#26#27#28#29,从第2个‘#开始,每个#前面加一个字符串 or ‘。 # 原始字符串 s "#1#2#3#4#5#6#7#8#9#10#11#12#13#14#15#…

多线程学习-线程池

目录 1.线程池的作用 2.线程池的实现 3.自定义创建线程池 1.线程池的作用 当我们使用Thread的实现类来创建线程并调用start运行线程时,这个线程只会使用一次并且执行的任务是固定的,等run方法中的代码执行完之后这个线程就会变成垃圾等待被回收掉。如…

2024最新GPT4.0使用教程:GPTs,AI绘画,AI换脸,AI绘画,文档分析一站式解决

一、前言 ChatGPT3.5、GPT4.0、相信对大家应该不感到陌生吧?简单来说,GPT-4技术比之前的GPT-3.5相对来说更加智能,会根据用户的要求生成多种内容甚至也可以和用户进行创作交流。 然而,GPT-4对普通用户来说都是需要额外付费才可以…

超强AI辅助工具:BitoCLI的简单使用

今天要推荐一个爱不释手的好东西–Bito; 从事相关工作的人大概率在自己的代码编辑器中已经用上了Bito的插件版本,所以这里主要介绍的是一个适合与所有人且方便快捷的Bito CLI,也就是Bito的命令行版本。 BitoCLI 从官方介绍来看,这是一款为 …

卸载不留痕,App Cleaner Uninstaller助你打造清爽Mac

在数字时代,我们的Mac设备上积累了大量的应用程序,其中一些可能不再需要或不再使用。随着时间的推移,这些不再使用的应用程序可能会占用宝贵的存储空间,影响设备的性能。为了解决这个问题,App Cleaner & Uninstall…

【C+ +初阶】前言篇章---C+ +的广袤

目录 1.C语言到C的过渡 2.C的发展历程 2.1C语言的诞生 2.2 c的历史版本 3.c 的地位 4. c的应用场景 4.1. 操作系统以及大型系统软件开发 所有操作系统几乎都是C/C写的 4.2. 服务器端开发 后台开发: 4.3. 游戏开发 4.4. 嵌入式 4.5. 数字图像处理 4.6. 人工智能 4.7.…

初始Java篇(JavaSE基础语法)(6)(继承和多态)(上)

Java学习篇 个人主页(找往期文章包括但不限于本期文章中不懂的知识点):我要学编程(ಥ_ಥ)-CSDN博客 目录 继承篇 为什么需要继承? 继承概念 继承的语法 父类成员访问 super关键字 子类构造方法 super和this的比较 再谈…

深度学习十大算法之深度Q网络(DQN)

一、简介 深度Q网络(DQN)是一种结合了深度学习和强化学习的算法,它在近年来成为了人工智能领域的一个热点。DQN首次被引入是在2013年,由DeepMind的研究人员开发。它标志着深度学习技术在解决高维度决策问题上的一大突破。 DQN的…

Python可视化之pandas

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.解决坐标轴刻度负号乱码2.解决中文乱码问题3.折线图Series.plot()&DataFrame.plot()4.条形图5.箱线图6.区域面积图(堆积折线图)7.散点…

Ideal的使用技巧

一、springcloud项目如何将多个服务放到services中一起启动 1、打开ideal,再view -> Tool Windows -> services 2、在services界面 找到 run configuration type -> springboot即可 二、配置临时的启动参数 1、在edit configurations中 2、选择相应的服务…

关于Linux下的进程状态(进程篇)

目录 Linux操作系统的一般进程状态 关于阻塞 关于挂起 Linux内核状态源代码: 关于僵尸进程 关于孤儿进程 Linux操作系统的一般进程状态 新建:字面意思运行:task_struct结构体在运行队列中排队,就叫做运行态阻塞:等待非…

基于springboot实现学科竞赛管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现学科竞赛管理系统演示 摘要 随着国家教育体制的改革,全国各地举办的竞赛活动数目也是逐年增加,面对如此大的数目的竞赛信息,传统竞赛管理方式已经无法满足需求,为了提高效率,竞赛管理系统应运而生。…

计算机语言 之【C++】入门级知识讲解(命名空间,C++输入输出,缺省参数,函数重载,引用,内敛函数,auto关键字,for循环,指针空值nullptr)

三点睡六点起,阎王夸我好身体 不到三点我不睡,太平间里抢C位 一、命名空间 1.命名空间的作用 2.命名空间定义 3.命名空间使用 二、C的输入输出 1.输入输出说明介绍 2.std命名空间的使用惯例 三、缺省参数 1.缺省参数概念 2.缺省参数分类 四、…

“Linux 三剑客”,通常指的是三个经典的命令行工具:grep、sed 和 awk

1、grep: 简介:grep 是一个强大的文本搜索工具,可以用于在文件中查找匹配特定模式的行。示例: 搜索包含特定关键词的行: grep "keyword" filename 递归搜索目录下所有文件: grep -r define zj…

C++要点细细梳理(下)(内存分配、异常处理、template和文件读写)

4. 类动态内存分配 4.1 C语言动态内存分配:malloc和free 4.2 C动态内存分配:new和delete 思考:定义一个对象和定义一个普通变量有何区别? 普通变量:分配足够空间即可存放数据对象:除了需要空间,还要构造/析构 类比:…

路由策略与路由控制之双点双向重发布(OSPF-ISIS)实验

双点双向重发布在路由协议中,特别是在OSPF(开放式最短路径优先)与IS-IS(中间系统到中间系统)等协议之间,指的是在两个协议间或者两个进程间进行路由信息共享的机制。这种机制涉及到在两个不同的协议区域使用…

isc-dhcp-server DNS配置

我遇到一个有趣的问题,我先在一台Ubuntu服务器上使用isc-dhcp-server在其其中一个网口运行DHCP服务,然后我自己的笔记本电脑直连到这个网口,来上网。 本来直接就应该能上网,但是我的电脑只有在打开Clash时才能访问互联网&#xf…

【STL】栈

笔者在做下面这道题的时候想到用栈&#xff0c;但写的很麻烦 代码&#xff1a; #include<bits/stdc.h> using namespace std; #define MAXC 255 typedef int SElemType; typedef struct StackNode {SElemType data;struct StackNode *next; }StackNode,*LinkStack; bool…

手机扫码获取文件怎么做?文件活码在电脑上的制作方法

现在很多人会把文件生成二维码之后&#xff0c;将二维码图片打印或者分享给其他人&#xff0c;通过扫描二维码的方式快速在手机上查看或者下载文件内容&#xff0c;从而提升文件传输的速度和效率。 制作文件活码二维码可以长期有效的扫码显示文件&#xff0c;支持多个文件存入…

如果在 Ubuntu 系统中两个设备出现两个相同的端口号解决方案

问题描述&#xff1a; 自己的移动机器人在为激光雷达和IMU配置动态指定的端口时&#xff0c;发现激光雷达和深度相机配置的 idVendor 和 idProduct 相同&#xff0c;但是两个设备都具有不同的ttyUSB号&#xff0c;如下图所示 idVendor&#xff1a;代表着设备的生产商ID,由USB设…