返回顶部
首页 > 资讯 > 后端开发 > Python >怎么用Python代码实现Apriori关联规则算法
  • 815
分享到

怎么用Python代码实现Apriori关联规则算法

2023-06-29 11:06:38 815人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍了怎么用python代码实现Apriori关联规则算法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Python代码实现Apriori关联规则算法文章都会有所收获,下面我们一起来看看吧。一

这篇文章主要介绍了怎么用python代码实现Apriori关联规则算法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Python代码实现Apriori关联规则算法文章都会有所收获,下面我们一起来看看吧。

    一、关联规则概述

    1993年,Agrawal等人在首先提出关联规则概念,迄今已经差不多30年了,在各种算法层出不穷的今天,这算得上是老古董了,比很多人的年纪还大,往往是数据挖掘入门算法,但深入研究的不多,尤其在风控领域,有着极其重要的应用潜力,是一个被低估的算法,很少见到公开的文章提及,我尝试一一剖析,希望给你带来一定的启示。

    我倒是进行了比较深刻、全面的思考,并进行了大量的实验,这个话题感觉可以聊三天三夜。世界风云变幻,但本质没变化,各种关联一直存在,有意或无意的!

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

    很多人只记住了啤酒尿不湿,很少深入思考,我们稍微转换下,日常的事情,也存在非常多的关联规则?

    二、应用场景举例

    1、股票涨跌预测

    放量+高换手率 -> 大概率上涨,历史数据挖掘,假如发现放量+高换手率的股票大概率上涨,则挖掘当天满足条件的个股,然后第二天买入,躺赚。

    2、视频、音乐、图书等推荐

    根据历史数据,如果大规模的存在某些用户看剧列表为:小时代 -> 上海堡垒,那么一个新的用户看了小时代,马上就给推荐上海堡垒,那大概率也会被观看,呼兰的账号,就是这么脏的。

    3、打车路线预测(考虑时空)

    根据大量的数据挖掘出以下规则

    早上: 起点家->目的地公司,

    晚上: 起点家->目的高铁站

    周末: 起点家->目的地购物中心

    那当你每天早上打开软件的时候,打车软件就会推荐你的公司作为目的地,大大的减少用户的打车时间。如下图,我输入小区名称,马上给我推荐了三个地方,杭州东站第一位,因为平时的打车这个组合的支持度最高。

    怎么用Python代码实现Apriori关联规则算法

    4、风控策略自动化挖掘

    根据历史标题,总结出规律发现商品标题包含 老司机+百度网盘 -> 色情风险高,那后面遇到这标题包含这两个词语的,就直接拒绝了。

    根据历史行为数据,发现了 沉默用户+非常用地登录+修改密码 ->大概率都被盗号了,那一个新的账户满足这个三个条件,那马上就进行账户冻结或者实人认证,就能避免盗号风险的发生。

    根据历史数据,发现用户A +B 每天都相隔10s登录 ,则可以认为A、B存在关联关系,可能是机器控制的同一批薅羊毛账户。

    风控策略的自动化挖掘,这个也是我们后续要重点关注和讲解的地方。

    三、3个最重要的概念

    关联规则有三个核心概念需要理解: 支持度、置信度、提升度 ,下面用最经典的啤酒-尿不湿案例给大家举例说明这三个概念,假如以下是几名客户购买订单的商品列表:

    怎么用Python代码实现Apriori关联规则算法

    1、支持度

    支持度 (Support): 指某个 商品组合出现的次数 与 总订单数 之间的比例。

    在这个例子中,我们可以看到“牛奶”出现了 4 次,那么这 5 笔订单中“牛奶”的支持度就是 4/5=0.8。

    怎么用Python代码实现Apriori关联规则算法

    同样“ 牛奶 + 面包 ”出现了 3 次,那么这 5 笔订单中“牛奶 + 面包”的支持度就是 3/5=0.6

    怎么用Python代码实现Apriori关联规则算法

    这样理解起来是不是非常简单了呢,大家可以动动手计算下 '尿不湿+啤酒' 的支持度是多少?

    2、置信度

    置信度 (Confidence): 指的就是当你购买了商品 A,会有多大的概率购买商品 B,在包含A的子集中,B的支持度,也就是包含B的订单的比例。

    置信度(牛奶→啤酒)= 3/4=0.75,代表购买了牛奶的订单中,还有多少订单购买了啤酒,如下面的表格所示。

    怎么用Python代码实现Apriori关联规则算法

    置信度(啤酒→牛奶)= 3/4=0.75,代表如果你购买了啤酒,有多大的概率会购买牛奶?

    怎么用Python代码实现Apriori关联规则算法

    置信度(啤酒→尿不湿)= 4/4=1.0,代表如果你购买了啤酒,有多大的概率会买尿不湿,下面的表格看出来是100%。

    怎么用Python代码实现Apriori关联规则算法

    由上面的例子可以看出,置信度其实就是个条件概念,就是说在 A 发生的情况下,B 发生的概率是多大。如果仅仅知道这两个概念,很多情况下还是不够用,需要用到提升度的概念。比如A出现的情况下B出现的概率为80%,那到底AB是不是有关系呢,不一定,人家B本来在大盘中的比例95%。你的A出现,反而减少了B出现的概率。

    3、提升度

    提升度 (Lift): 我们在做商品推荐或者风控策略的时候,重点考虑的是提升度,因为提升度代表的是A 的出现,对B的出现概率提升的程度。

    提升度 (A→B) = 置信度 (A→B)/ 支持度 (B)

    所以提升度有三种可能:

    • 提升度 (A→B)>1:代表有提升;

    • 提升度 (A→B)=1:代表有没有提升,也没有下降;

    • 提升度 (A&rarr;B)<1:代表有下降。

    提升度 (啤酒&rarr;尿不湿) =置信度 (啤酒&rarr;尿不湿) /支持度 (尿不湿) = 1.0/0.8 = 1.25,可见啤酒对尿不湿是有提升的,提升度为1.25,大于1。

    可以简单理解为:在全集的情况下,尿不湿的概率为80%,而在包含啤酒这个子集中,尿不湿的概率为100%,因此,子集的限定,提高了尿不湿的概率,啤酒的出现,提高了尿不湿的概率。

    4、 频繁项集

    频繁项集(frequent itemset) : 就是支持度大于等于最小支持度 (Min Support) 阈值的项集,所以小于最小值支持度的项目就是非频繁项集,而大于等于最小支持度的的项集就是频繁项集,项集可以是单个商品,也可以是组合。

    频繁集挖掘面临的最大难题就是项集的组合爆炸 ,如下图:

    怎么用Python代码实现Apriori关联规则算法

    随着商品数量增多,这个网络的规模将变得特别庞大,我们不可能根据传统方法进行统计和计算,为了解决这个问题,Apriori算法提出了两个核心思想:

    某个项集是频繁的,那么它的所有子集也是频繁的 {Milk, Bread, Coke} 是频繁的 &rarr; {Milk, Coke} 是频繁的

    如果一个项集是 非频繁项集,那么它的所有超集也是非频繁项集 {Battery} 是非频繁的 &rarr; {Milk, Battery} 也非平凡

    如下图,如果我们已知 B 不频繁,那么可以说图中所有绿色的项集都不频繁,搜索时就要这些项避开,减少计算开销。

    怎么用Python代码实现Apriori关联规则算法

    同理,如果下图所示, {A,B}这个项集是非频繁的 ,那虚线框后面的都不用计算了, 运用Apriori算法的思想,我们就能去掉很多非频繁的项集,大大简化计算量,当然,面对大规模数据的时候,这种排除还是解决不了问题,于是还有FP-Growth(Frequent pattern Growth,频繁模式增长树)这种更高效的方法,后面有机会慢慢讲。

    怎么用Python代码实现Apriori关联规则算法

    需要注意的是:

    1)如果支持度和置信度阈值过高,虽然可以在一定程度上减少数据挖掘的时间,但是一些隐含在数据中的非频繁特征项容易被忽略掉,难以发现足够有用的规则;

    2)如果支持度和置信度阈值过低,可能会导致大量冗余和无效的规则产生,导致较大计算量负荷。

    四、Python算法介绍

    这里用的是Python举例,用的包是apriori,当然R语言等其他语言,也有对应的算法包,原理都是一样的,大家自行进行试验。

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

    五、挖掘实例

    每个导演都有自己的偏好、比如周星驰有星女郎,张艺谋有谋女郎,且巩俐经常在张艺谋的电影里面出现,因此,每个导演对演员的选择都有一定的偏爱,我们以宁浩导演为例,分析下选择演员的一些偏好,没有找到公开的数据集,自己手动扒了一部分,大概如下,有些实在有点多,于是简化下进行分析。

    怎么用Python代码实现Apriori关联规则算法

    可以看到,我们一共扒了9部电影,计算的时候,支持度的时候,总数就是9.

    #把电影数据转换成列表 
    data = [['葛优','黄渤','范伟','邓超','沈腾','张占义','王宝强','徐峥','闫妮','马丽'], 
    ['黄渤','张译','韩昊霖','杜江','葛优','刘昊然','宋佳','王千源','任素汐','吴京'], 
    ['郭涛','刘桦','连晋','黄渤','徐峥','优恵','罗兰','王迅'], 
    ['黄渤','舒淇','王宝强','张艺兴','于和伟','王迅','李勤勤','李又麟','宁浩','管虎','梁静','徐峥','陈德森','张磊'], 
    ['黄渤','沈腾','汤姆&middot;派福瑞','马修&middot;莫里森','徐峥','于和伟','雷佳音','刘桦','邓飞','蔡明凯','王戈','凯特&middot;纳尔逊','王砚伟','呲路'],
     ['徐峥','黄渤','余男','多布杰','王双宝','巴多','杨新鸣','郭虹','陶虹','黄精一','赵虎','王辉'], 
     ['黄渤','戎祥','九孔','徐峥','王双宝','巴多','董立范','高捷','马少骅','王迅','刘刚','WorapojThuantanon','赵奔','李麒麟','姜志刚','王鹭','宁浩'], 
     ['黄渤','徐峥','袁泉','周冬雨','陶慧','岳小军','沈腾','张俪','马苏','刘美含','王砚辉','焦俊艳','郭涛'], 
     ['雷佳音','陶虹','程媛媛','山崎敬一','郭涛','范伟','孙淳','刘桦','黄渤','岳小军','傅亨','王文','杨新鸣']] 
    #算法应用 
    itemsets, rules = apriori(data, min_support=0.5,  min_confidence=1) 
    print(itemsets)
    {1: {('徐峥',): 7, ('黄渤',): 9}, 2: {('徐峥', '黄渤'): 7}} 
    print(rules) [{徐峥} -> {黄渤}]

    通过上述分析可以看出:

    在宁浩的电影中,用的最多的是黄渤和徐峥,黄渤9次,支持度100%,徐峥7次,支持度78%,('徐峥', '黄渤') 同时出现7次,置信度为100%,看来有徐峥,必有黄渤,真是宁浩必请的黄金搭档,且是一对好基友。

    关于“怎么用Python代码实现Apriori关联规则算法”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“怎么用Python代码实现Apriori关联规则算法”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网Python频道。

    --结束END--

    本文标题: 怎么用Python代码实现Apriori关联规则算法

    本文链接: https://lsjlt.com/news/324322.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • 怎么用Python代码实现Apriori关联规则算法
      这篇文章主要介绍了怎么用Python代码实现Apriori关联规则算法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Python代码实现Apriori关联规则算法文章都会有所收获,下面我们一起来看看吧。一...
      99+
      2023-06-29
    • 基于Python代码实现Apriori 关联规则算法
      目录一、关联规则概述二、应用场景举例1、股票涨跌预测2、视频、音乐、图书等推荐3、打车路线预测(考虑时空)4、风控策略自动化挖掘三、3个最重要的概念1、支持度2、置信度3、提升度4、...
      99+
      2024-04-02
    • 【商业挖掘】关联规则——Apriori算法(最全~)
      目录 一、关联规则挖掘 二、Apriori-关联规则算法 三、Apriori算法分解—Python大白话式实现 步骤1: 外部库调用❀  步骤2: 数据导入❀ 步骤3: 数据处理❀   步骤4:输出所有Goodlist❀ 步骤5:项集重组❀...
      99+
      2023-09-15
      数据挖掘 人工智能 python 剪枝 数据结构
    • 【推荐系统入门到项目实战】:关联规则之Apriori算法(含代码实现)
      【推荐系统】:关联规则 🌸个人主页:JOJO数据科学📝个人介绍:统计学top3高校统计学硕士在读💌如果文章对你有帮助,欢迎✌关注、👍...
      99+
      2023-09-12
      1024程序员节 推荐算法 关联规则
    • python数据挖掘Apriori算法实现关联分析
      目录摘要:关联分析Apriori原理算法实现挖掘关联规则利用Apriori算法解决实际问题发现毒蘑菇的相似特征总结:摘要: 主要是讲解一些数据挖掘中频繁模式挖掘的Apriori算法原...
      99+
      2024-04-02
    • 怎么用python代码实现knn算法
      下面是一个简单的示例代码,实现了knn算法:```pythonimport numpy as npfrom collections ...
      99+
      2023-10-11
      python knn算法
    • 怎么用python代码实现遗传算法
      要使用Python代码实现遗传算法,可以按照以下步骤进行操作:1. 定义问题:首先,需要明确要解决的问题是什么,例如优化问题、寻找最...
      99+
      2023-10-10
      python
    • python实现动态规划算法的示例代码
      动态规划(Dynamic Programming,DP)是一种常用的算法思想,通常用于解决具有重叠子问题和最优子结构性质的问题。动态规划算法通常是将问题分解为子问题,先解决子问题,再...
      99+
      2023-02-16
      python 动态规划算法
    • 使用python实现rsa算法代码
      RSA算法是一种非对称加密算法,是现在广泛使用的公钥加密算法,主要应用是加密信息和数字签名。 维基百科给出的RSA算法简介如下: 假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息。她可以用...
      99+
      2022-06-04
      算法 代码 python
    • 怎么实现git代码规范
      这篇文章主要介绍“怎么实现git代码规范”,在日常操作中,相信很多人在怎么实现git代码规范问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么实现git代码规范”的疑惑有所帮...
      99+
      2024-04-02
    • 用python实现一幅春联实例代码
      目录前言代码展示效果展示总结前言 过年了,家家户户都得贴春联,红红火火过大年~ 春联是天朝传统节日完美衔接了民族文化的产物,以美好的诗词文字表达美好愿望,是天朝特有文学形式绽放。也是...
      99+
      2024-04-02
    • Python实现调度算法代码详解
      调度算法 操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源。这就是调度。目的是控制资源使用者的数量,选取资源...
      99+
      2022-06-04
      算法 详解 代码
    • 怎么用@keyframes规则实现CSS动画
      这篇文章主要讲解了“怎么用@keyframes规则实现CSS动画”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用@keyframes规则实现CSS动画”...
      99+
      2024-04-02
    • python动态规划算法怎么用
      小编给大家分享一下python动态规划算法怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pillow;4.twisted;5...
      99+
      2023-06-14
    • 使用Python实现遗传算法的完整代码
      目录遗传算法具体步骤:1.2 实验代码1.3 实验结果1.4 实验总结1、如何在算法中实现“优胜劣汰”?2 、如何保证进化一直是在正向进行?3、交叉如何实现?...
      99+
      2023-03-23
      Python 遗传算法 python算法
    • Python密码学ROT13算法怎么实现
      今天小编给大家分享一下Python密码学ROT13算法怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。ROT13算法的...
      99+
      2023-06-30
    • Python实现印章代码的算法解析
      目录1.题目2.代码3.代码解析1.题目 2.代码 #共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率。 n,m=map(int,input(...
      99+
      2024-04-02
    • 怎么用Python代码实现一个简单的凯撒加密算法
      本篇内容介绍了“怎么用Python代码实现一个简单的凯撒加密算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
      99+
      2024-04-02
    • Java实现雪花算法的代码怎么写
      这篇文章主要介绍了Java实现雪花算法的代码怎么写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java实现雪花算法的代码怎么写文章都会有所收获,下面我们一起来看看吧。一、介绍SnowFlow算法是Twitte...
      99+
      2023-06-29
    • 使用Python处理KNN分类算法的实现代码
      目录KNN分类算法的介绍测试数据Python代码实现结果分析简介: 我们在这世上,选择什么就成为什么,人生的丰富多彩,得靠自己成就。你此刻的付出,决定了你未来成为什么样的人...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作