关联规则挖掘算法_基于Apriori关联规则的协同过滤算法

c59c4424d228504f6750429265569183.png

Apriori 算法

apriori关联规则算法的原理设计较为简单,著名的“啤酒和尿布”说的就是Apriori算法,通俗来讲apriori旨在寻找频繁项集,以帮助商家将消费者有可能一起搭配购买的物品放置在同一个地方,提高消费者的购物效率和良好的购物体验感。Apriori还是十大数据挖掘算法之一,可见Apriori关联规则算法的重要性。

(一)算法基本理论

1、基本概念

Apriori是最常用最经典的挖掘频繁项集的算法,其核心思想是通过连接产生候选项及其支持度然后通过剪枝生成频繁项集。在一个数据集中找出项之间的关系,比如购买鞋子用户10%可能也会去购买袜子。该算 法通过计算3个值来寻找强关联规则!

2、基本名词解释

1)事务:每一条交易称为一个事务

2)项:交易的每一个物品称为一个项

3)项集:包含零个或者多个项的集合叫做项集

4)K-项集:包含K个项的项集叫做K-项集,比如{cola,egg}叫做2-项集

5)频繁项集:支持度大于等于某个阈值的项集就叫做频繁项集

3、关键值:支持度、置信度、提升度,计算这个3个值来寻找强关联规则

1)A->B支持度:表示同时购买A、B的订单数占总订单数的比例;

c2e3c3b16852df6bc61d7fb963713641.png

2)A->B置信度:表示购买A物品订单同时购买了B物品订单的比例,即等于同时购买A和B订单数占购买A物品订单数比例(条件概率)。置信度表示购买A物品有多少概率去购买B物品。

df6ab6b41a5d9f527c5c6f750f7e045c.png

3)A->B提升度:表示购买A物品的用户同时购买B物品的用户数占购买B物品的比例,计算公式为=置信度/B物品占总数的比例。如果大于1表示正相关性越高,如果等于1表示没有相关性,互相独立,如果小于1则表示负相关性越高。一般在提升度大于3,则认为提升度是有价值的。

7a890118d8e0e0f60ab4c4d7fb6fa4a1.png

4、结论

A->B:购买A的用户有【置信度】的概率去购买B,而这种情况发生的概率为【支持度】

1)满足支持度和置信度的规则,称之为【强关联规则】,该又分【无效强关联规则】和【有效强关联规则】

2)无效强关联规则:如果提升度<=1,则表示无效强关联规则

3)有效强关联规则:如果提升度>1,则表示有效强关联规则

(二)算法实现案例演示

求最小支持度计数为2的候选项集及频繁项集。(数据集)

aa5459ae8f0678c2ab6f64ac93aad54c.png

样例演示数据集(来源于网络)

首先,找出频繁“1项集”的集合,该集合记作L1。L1用于找频繁“2项集”的集合L2,而L2用于找L3。如此下去,直到不能找到“K项集”。找每个Lk都需要一次数据库扫描。

核心思想是:连接步和剪枝步。连接步是自连接,原则是保证前k-2项相同,并按照字典顺序连接。剪枝步,是使任一频繁项集的所有非空子集也必须是频繁的。反之,如果某个候选的非空子集不是频繁的,那么该候选肯定不是频繁的,从而可以将其从CK中删除。

简单的讲,1、发现频繁项集,过程为(1)扫描(2)计数(3)比较(4)产生频繁项集(5)连接、剪枝,产生候选项集 重复步骤(1)~(5)直到不能发现更大的频集

Apriori 性质:任一频繁项集的所有非空子集也必须是频繁的。意思就是说,生成一个k-itemset的候选项时,如果这个候选项有子集不在(k-1)-itemset(已经确定是frequent的)中时,那么这个候选项就不用拿去和支持度判断了,直接删除。

比如:K项集{I1,I3,I5},如果任一个子集({I1},{I3},{I5},{I1,I3},{I1,I5},{I3,I5})不在之前的K-1项集的频繁项集里,那么就把该{I1,I3,I5}候选项集去掉。

开始分析

第一次扫描: (左边为候选项集C1,右边为频繁项集L1)

4ad48bd5067f1052e2e744620371e3e3.png

第二次扫描:(左边为C2,右边为L2)

2813390722708fcd70c557de9dc04649.png

去掉最小支持度小于2的项。

连接:是指产生候选项,如两项{I1,I2},{I1,I3},三项{I1,I2,I3},{I1,I2,I4}等。

L2自身连接(根据算法性质,注意理解,这样只需要对有可能成为频繁项集的候选项集进行处理,提高效率):(如果看得出下一步结果,这一步以及剪枝可以省略,直接进行第三次扫描)

a29b72eaefaaa36337271040fa98dbf1.png

剪枝得到:(剪枝规则是将自身连接得到的C2,将次数小于最小支持度2的剪掉)

第三次扫描:(左边为C3,右边为L3)

020f4c3ea16d3c0c6499e8525343e7de.png

得到最终结果:

ed1d5f5e38cccc296e5062229f360509.png

如果购买I1,那么可以推荐I2,I3或者I2,I5给用户搭配购买。

(三)算法优缺点

优点:Apriori算法使用Apriori性质来生产候选项集的方法,大大压缩了频繁集的大小, 取得了很好的性能。

缺点:每一次迭代都要遍历整个数据进行计数计算和判断,运行效率低。

(四)参考资料

[1] 参考公式,https://www.jianshu.com/p/26d61b83492e

[2] 参考案例,https://blog.csdn.net/qq_28697571/article/details/84678422

[3] 参考流程,https://www.jianshu.com/p/d0dc8c8bf465

今天的文章主要是Apriori算法的理论以及如何实现的案例流程思路,后续将用python语言来实现算法,进行频繁项集的实战挖掘,并公开到github,方便大家一起交流学习。

想学习python、数据分析、可视化、机器学习、深度学习、目标检测、NLP情感分析中的哪些内容,欢迎大家留言,小编会根据大家的需要来写哦,感谢大家的关注!

有不懂的地方或者文章有不足的地方,欢迎留言一起探讨学习!觉得文章对你有帮助,点赞、关注、转发喔!

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

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

相关文章

【转】RabbitMQ六种队列模式-1.简单队列模式

前言 RabbitMQ六种队列模式-简单队列 [本文]RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主题模式 在官网的教程中&#xff0c;描述了如上六类工作队列模式&#xff1a; 简单队列模式&#xff1a;最简单的…

【转】RabbitMQ六种队列模式-2.工作队列模式

前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列 [本文]RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主题模式 上文我们了解了 RabbitMQ 六种队列模式中的简单队列&#xff0c;代码也是非常的简单&#xff0c;比较容易…

redis 哨兵模式 cluster模式区别_Redis哨兵(Sentinel)模式快速入门

当主服务器宕机后&#xff0c;需要手动把一台从服务器切换为主服务器&#xff0c;这就需要人工干预&#xff0c;费事费力&#xff0c;还会造成一段时间内服务不可用。 所以更多时候&#xff0c;我们优先考虑哨兵(sentinel) 模式。Redis sentinel是Redis高可用实现方案&#xff…

IOS开发入门笔记

IB&#xff1a;IB是指Interface Builder&#xff0c;如IBAction&#xff0c;IBOutlet。IBOutlet和IBAction是什么&#xff1f;IBOutlet&#xff1a;中文翻译应该是&#xff1a;插座&#xff0c;连接点&#xff08;书上写的是出口&#xff09;。autorelease相当于Qt中的deleteLa…

【转】RabbitMQ六种队列模式-3.发布订阅模式

前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅 [本文]RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主题模式 上文的工作队列模式是直接在生产者与消费者里声明好一个队列&#xff0c;这种情况下消息只会对应同类型的…

组建一个局域网一般会用到哪些设备_路由器和交换机的区别是什么?在实际使用中有哪些不同...

电工之家&#xff1a;www.dgzj.com QQ群&#xff1a;2179090关注电工之家官方微信公众号“电工之家”&#xff0c;收获更多经验知识。其实关于路由器和交换机确实有很多人容易混淆&#xff0c;包括猫MOdem&#xff0c;我最初就认为猫就是路由器&#xff0c;现在回想起来真的傻…

【转】RabbitMQ六种队列模式-4.路由模式

前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式 [本文]RabbitMQ六种队列模式-主题模式 本文带大家了解 RabbitMQ 队列模式中的路由模式。 其实只要看过上篇发布模式后&#xff0c;相信路由模式…

百度二年级手工机器人_让父母少弯腰的家务神器——追觅扫拖机器人慧目F9评测...

大家好&#xff0c;我是CC。父母都已过了花甲之年&#xff0c;退休在家本应是享清福的时候&#xff0c;为了照顾双上班族的我&#xff0c;平时承担了接儿子放学和给我蹭晚餐的任务&#xff0c;操劳不少。眼看着他们一点点老去&#xff0c;总想也为他们做点什么&#xff0c;所以…

【转】RabbitMQ六种队列模式-5.主题模式

前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主题模式 [本文] 从前面的几篇我们依次经历了 exchange 模式从 fanout > direct 的转变过程&#xff0c;在 fanout 时&a…

javase哪部分最难_高中物理哪部分最难?这里有答案和方法!一定要收藏

高中物理最难的部分是什么?对于大多数同学来说&#xff0c;电粒子在电磁场中的运动、动力学分析以及电学实验比较难搞定&#xff0c;看看下面的方法&#xff0c;希望对你有所帮助。从应试而言&#xff0c;应是带电粒子在电磁场中的运动(力&#xff0c;运动轨迹&#xff0c;几何…

【转】分布式websocket服务器

最近在开发一个游戏的客服系统&#xff0c;同一时间咨询问题的玩家多&#xff0c;为了保证服务器高可用&#xff0c;需要利用分布式&#xff0c;另外服务器宕机还需要玩家无感知重连&#xff0c;最关键的一点是如何实现服务器的高扩展性&#xff0c;即性能不足时&#xff0c;如…

【Rational Rose使用笔记】协作图

例题 用例题亲自画一下是最好的。 例题出处&#xff1a;掌握在Rational Rose中绘制协作图&#xff08;交互图&#xff09;的操作方法 其他参考文章&#xff1a; UML–协作图详解UML中创建对象的方法&#xff1a;Rational Rose建立对象图 笔记 以下是总结的一些笔记&#x…

【Rational Rose使用笔记】用例图

一 先找例题&#xff1a; 掌握运用Rose工具绘制用例图的基本操作 再学习&#xff1a; UML建模——用例图&#xff08;Use Case Diagram&#xff09; 二 下面是笔记&#xff1a; 了解几种关系&#xff1a;依赖、关联、泛化、包含、扩展。 如何区别依赖、关联&#xff1f; 依…

sqlserver获取当前时间_c#获取并显示当前日期时间

主要使用ToLongDateString、ToShortDateString、ToLongTimeString、ToShortTimeString、DayOfWeek等获取日期、时间、星期等数据。MM 两位数月份mm 两位数分钟HH 两位小时&#xff0c;24小时制hh 两位小时&#xff0c;12小时制string br ""; string a1 D…

【考研计算机】AOE关键路径

介绍 数据结构AOE网 计算题专题&#xff1a;关键路径法(CPM) 需要注意的点&#xff1a; 最重要的点&#xff0c;以下图为例&#xff1a; 一个活动有多个入口&#xff0c;这是表示此活动必须在前置的多个入口都完成时&#xff0c;才能开始。 即&#xff0c;开始条件 入口1 &…

【转】.NET程序内存分析工具CLRProfiler的使用

大家都知道.net有一套自己的内存&#xff08;垃圾&#xff09;回收机制&#xff0c;除非有一些数据&#xff08;方法&#xff09;长期占有内存不随着垃圾回收功能而释放内存&#xff0c;这样就造成了我们经常说的内存泄露、内存持续增长得不到释放等问题导致APS.net网站或者C/S…

sql over函数_SQL 高级函数

今天是高端局&#xff0c;都是超级高大上的内容&#xff0c;惯例上目录今天觉得红黑配色好好看呀今天没有什么具体的栗子合集&#xff0c;大家的应用场景都很不一样&#xff0c;so&#xff0c;到具体知识点&#xff0c;我们再具体举栗子。窗口函数概念&#xff1a; 窗口函数&am…

【转】SVN各种颜色状态

黄色感叹号(有冲突): 这是有冲突了&#xff0c;冲突就是说你对某个文件进行了修改&#xff0c;别人也对这个文件进行了修改&#xff0c;别人抢在你提交之前先提交了&#xff0c;这时你再提交就会被提示发生冲突&#xff0c;而不允许你提交&#xff0c;防止你的提交覆盖了别人的…

实现二分归并排序算法_如何实现归并排序?

归并排序归并排序是分而治之的排序算法。划分步骤很简单&#xff1a;将当前数组分成两半(如果N是偶数&#xff0c;则将其完全平等&#xff0c;或者如果N是奇数&#xff0c;则一边稍大于一个元素)&#xff0c;然后递归地对这两半进行排序。递归写法归并排序递归写法的思想是&…

【手算】逆序数树形计算方法

计算过程&#xff1a; 给定一列数&#xff0c;从左向右&#xff0c;依次将每个数拿出来&#xff0c;作为一棵树的树根。从剩下的数中&#xff0c;找比此数小的数&#xff0c;作为子节点加入到树中。重复1、2&#xff0c;直到到达最后一个数停止。 数出二级节点&#xff0c;即…