python关联分析实践学习笔记

news2025/2/24 23:11:04

曾经有个沃尔玛超市,它将啤酒与尿布这样两个奇怪的东西放在一起进行销售,并且最终让啤酒与尿布这两个看起来没有关联的东西的销量双双增加。

我们关注的是在这样的场景下,如何找出物品之间的关联规则。接下来就来介绍下如何使用Apriori算法,来找到物品之间的关联规则。

1. 关联分析概述

我们先举个超市交易记录如下:

交易序号交易商品
0‘牛奶’,‘洋葱’,‘肉豆蔻’,‘芸豆’,‘鸡蛋’,‘酸奶’
1‘莳萝’,‘洋葱’,‘肉豆蔻’,‘芸豆’,‘鸡蛋’,‘酸奶’
2‘牛奶’,‘苹果’,‘芸豆’,‘鸡蛋’
3‘牛奶’,‘独角兽’,‘玉米’,‘芸豆’,‘酸奶’
4‘玉米’,‘洋葱’,‘洋葱’,‘芸豆’,‘冰淇淋’,‘鸡蛋’

关联分析的几个概念:

  • 支持度(Support):支持度可以理解为物品当前流行程度。计算方式是:
    支持度 = (包含物品A的记录数量) / (总的记录数量)

用上面的超市记录举例,一共有五个交易,牛奶出现在三个交易中,故而{牛奶}的支持度为3/5。{鸡蛋}的支持度是4/5。牛奶和鸡蛋同时出现的次数是2,故而{牛奶,鸡蛋}的支持度为2/5。

support(A⇒B)=support_count(A∪B)/N
支持度反映了A和B同时出现的概率,关联规则的支持度等于频繁集的支持度。

  • 置信度(Confidence):置信度是指如果购买物品A,有较大可能购买物品B。计算方式是这样:
    置信度( A -> B) = (包含物品A和B的记录数量) / (包含 A 的记录数量)

举例:我们已经知道,(牛奶,鸡蛋)一起购买的次数是两次,鸡蛋的购买次数是4次。那么Confidence(牛奶->鸡蛋)的计算方式是Confidence(牛奶->鸡蛋)=2 / 4。

confidence(A⇒B)=support_count(A∪B)/support_count(A)
置信度反映了如果交易中包含A,则交易包含B的概率。也可以称为在A发生的条件下,发生B的概率,成为条件概率。

  • 提升度(Lift):提升度指当销售一个物品时,另一个物品销售率会增加多少。计算方式是:
    提升度( A -> B) = 置信度( A -> B) / (支持度 A)

举例:上面我们计算了牛奶和鸡蛋的置信度Confidence(牛奶->鸡蛋)=2 / 4。牛奶的支持度Support(牛奶)=3 / 5,那么我们就能计算牛奶和鸡蛋的支持度Lift(牛奶->鸡蛋)=0.83,当提升度(A->B)的值大于1的时候,说明物品A卖得越多,B也会卖得越多。而提升度等于1则意味着产品A和B之间没有关联。最后,提升度小于1那么意味着购买A反而会减少B的销量。

2. Apriori算法概述

Apriori算法是发现频繁项集的一种方法。并不会找出关联规则,关联规则需要在找到频繁项集以后我们再来统计。

频繁项集:频繁项集挖掘是数据挖掘研究课题中一个很重要的研究基础,它可以告诉我们在数据集中经常一起出现的变量,为可能的决策提供一些支持。频繁项集挖掘是关联规则、相关性分析、因果关系、序列项集、局部周期性、情节片段等许多重要数据挖掘任务的基础。

Apriori算法是第一个关联规则挖掘算法,也是最经典的算法。它利用逐层搜索的迭代方法找出数据库中项集的关系,以形成规则,其过程由连接(类矩阵运算)与剪枝(去掉那些没必要的中间结果)组成。该算法中项集的概念即为项的集合。包含K个项的集合为k项集。项集出现的频率是包含项集的事务数,称为项集的频率。如果某项集满足最小支持度,则称它为频繁项集。

最小支持度:最小支持度就是人为规定的阈值,表示项集在统计意义上的最低重要性。 最小置信度:最小置信度也是人为规定的阈值,表示关联规则最低可靠性。 只有支持度与置信度同时达到了最小支持度与最小置信度,此关联规则才会被称为强规则。 频繁项集:满足最小支持度的所有项集,称作频繁项集。 频繁项集性质:1、频繁项集的所有非空子集也为频繁项集;2、若A项集不是频繁项集,则其他项集或事务与A项集的并集也不是频繁项集)

要想获得频繁项集,最简单直接的方法就是暴力搜索法,但是这种方法计算量过于庞大,如下图所示,k项的数据集可能生成 2 k − 1 2^k-1 2k1个频繁项集。
在这里插入图片描述

先验原理,由于直接暴力搜索不可行,因此我们要利用支持度对数据集进行剪枝。

  • Apriori定律1:如果一个集合是频繁项集,则它的所有子集都是频繁项集。
  • Apriori定律2:如果一个集合不是频繁项集,则它的所有超集都不是频繁项集。

如图所示,我们发现{A,B}这个项集是非频繁的,那么{A,B}这个项集的超集,{A,B,C},{A,B,D}等等也都是非频繁的,这些就都可以忽略不去计算。

运用Apriori算法的思想,我们就能去掉很多非频繁的项集,大大简化计算量。

Apriori算法流程
要使用Apriori算法,我们需要提供两个参数,数据集和最小支持度。我们从前面已经知道了Apriori会遍历所有的物品组合,怎么遍历呢?答案就是递归。

  • 先遍历1个物品组合的情况,剔除掉支持度低于最小支持度的数据项,然后用剩下的物品进行组合。
  • 遍历2个物品组合的情况,再剔除不满足条件的组合。
  • 不断递归下去,直到不再有物品可以组合。

3. mlxtend-强大的机器学习扩展包

mlxtend是一款基于python的机器学习扩展包,其本身使用非常简介方便自带数据集,同时也作为sklearn的一个补充和辅助工具。

它可以非常简单高效的利用堆栈泛化来构建更具预测性的模型,让我们能够快速组装堆叠回归器的库。集成了从数据到特征选择、建模(分类、聚类、图形图像,文本)、验证、可视化整个一套完整的workflow。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple mlxtend

3.1. apriori函数

从一个one-hot集中获取频繁项目集,支持度。

apriori(df, min_support=0.5, use_colnames=False, max_len=None)

参数如下:

  • df:这个不用说,就是我们的数据集。
  • min_support:给定的最小支持度。
  • use_colnames:默认False,则返回的物品组合用编号显示,为True的话直接显示物品名称。
  • max_len:最大物品组合数,默认是None,不做限制。如果只需要计算两个物品组合的话,便将这个值设置为2。

3.2. 关联规则函数

association_rules函数,语法:

association_rules(df, metric=‘confidence’, min_threshold=0.8, support_only=False)

参数如下:

  • df: pandas模块中的数据帧,DataFrame形式的数据;
  • metric: 用于评估规则是否有意义的度量。可选参数有以下几种:‘support’, ‘confidence’, ‘lift’, 'leverage’和 ‘conviction’
  • min_threshold: 评估度量的最小阈值,通过度量参数确定候选规则是否有意义。
  • support_only : 只计算规则支持并用 NaN 填充其他度量列。如果: a)输入 DataFrame 是不完整的,例如,不包含所有规则前因和后果的支持值 b)你只是想加快计算速度,因为你不需要其他度量。

4. 实验小案例

import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori

#设置数据集
dataset = [['牛奶','洋葱','肉豆蔻','芸豆','鸡蛋','酸奶'],
        ['莳萝','洋葱','肉豆蔻','芸豆','鸡蛋','酸奶'],
        ['牛奶','苹果','芸豆','鸡蛋'],
        ['牛奶','独角兽','玉米','芸豆','酸奶'],
        ['玉米','洋葱','洋葱','芸豆','冰淇淋','鸡蛋']]

te = TransactionEncoder()
#进行 one-hot 编码
te_ary = te.fit(dataset).transform(dataset)
df = pd.DataFrame(te_ary, columns=te.columns_)
df

在这里插入图片描述

#利用 Apriori 找出频繁项集
freq = apriori(df, min_support=0.05, use_colnames=True)
freq.head(10)

在这里插入图片描述

#导入关联规则包
from mlxtend.frequent_patterns import association_rules
#计算关联规则
result = association_rules(freq, metric="confidence", min_threshold=0.6)
result.head(10)

在这里插入图片描述

5. 总结

关联规则挖掘是一种基于规则的机器学习算法,该算法可以在大数据库中发现感兴趣的关系。它的目的是利用一些度量指标来分辨数据库中存在的强规则。也即是说关联规则挖掘是用于知识发现,而非预测,所以是属于无监督的机器学习方法。

关联规则挖掘可以让我们从数据集中发现项与项(item与item)之间的关系,它在我们的生活中有很多应用场景,“购物篮分析”就是一个常见的场景,这个场景可以从消费者交易记录中发掘商品与商品之间的关联关系,进而通过商品捆绑销售或者相关推荐的方式带来更多的销售量。

参考:

zzzzMing. Python --深入浅出Apriori关联分析算法(一). 博客园. 2019.08
翻滚的小@强. 白话机器学习算法理论+实战之关联规则. CSDN博客. 2020.02
https://rasbt.github.io/mlxtend/user_guide/frequent_patterns/apriori/
https://rasbt.github.io/mlxtend/user_guide/frequent_patterns/association_rules/

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

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

相关文章

【图像去噪的扩散滤波】图像线性扩散滤波、边缘增强线性和非线性各向异性滤波(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

您需要知道的API基础知识都在这里

API是应用程序编程接口(Application Programming Interface)的缩写,能够起到两个软件组件之间的连接器或中介的作用。此类接口往往通过一组明确的协议,来表示各种原始的请求和响应。API文档可以向开发人员展示请求和响应是如何形成…

跨境独立站代购中国电商平台商品PHP多语言多货币

跨境独立站代购中国电商平台商品是指代购者在海外建立自己的独立电商平台,代理中国主流电商平台(如淘宝、京东等)的商品进行销售和代购。这种模式的优势在于代购者可以自主选择产品和价格策略,同时还能提供更专业和优质的服务。 …

【爬虫】python爬虫爬取网站页面(基础讲解)

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

亚马逊频繁扫号下的跨境电商,跨境电商卖家应该何去何从?

相信各位同行都知道,自2021年起,亚马逊的扫号活动就从未间断,直到如今2023年的亚马逊,仍然是隔2周-几个月就有大规模的审核扫号,大批卖家店铺被封,亚马逊卖家人人自危,面对时间间隔短频率高的扫…

富文本文案存储翻译方案

一般富文本的功能会有些样式,存储到数据库表里面之后会带上一大堆的标签和样式,底层如果要对这些进行翻译的话会变得非常困难,因为我们要翻译的只是里面的中文内容,这就面临第一个问题,把中文取出来,如果把…

(echarts)饼图封装相关总结及使用

(echarts)饼图封装相关总结 一、封装组件pieCharts.vue <template><div :id"id" :class"className" :style"{ height: height, width: width }" /> </template><script> import echarts from echarts import resize fr…

STM32Cube高效开发教程<基础篇>(三)----STM32CubeMX创建工程

声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。    本专栏博客参考《STM32Cube高效开发教程(基础篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。 一、新建项目 …

亚马逊频繁封号,跨境电商卖家如何应对?

相信各位同行都知道&#xff0c;自2021年起&#xff0c;亚马逊的扫号活动就从未间断&#xff0c;直到如今2023年的亚马逊&#xff0c;仍然是隔2周-几个月就有大规模的审核扫号&#xff0c;大批卖家店铺被封&#xff0c;亚马逊卖家人人自危&#xff0c;面对时间间隔短频率高的扫…

WordPress插件 WP-PostViews 汉化语言包

WP-PostViews汉化语言包 WP-PostViews是一款很受欢迎的文章浏览次数统计插件&#xff0c;记录每篇文章展示次数、根据展示次数显示历史最热或最衰的文章排行、展示范围可以是全部文章和页面&#xff0c;也可以是某些目录下的文章和页面。本文还介绍了一些隐藏的功能&#xff0…

【完美世界】石昊偷渡出境四人组产生分歧,云曦和石昊牵手,二人世界要开始了

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析完美世界。 转眼又到完美世界动漫更新日&#xff0c;现在第132集已经更新了了。而这一集看下来&#xff0c;很明显完美世界又进步了&#xff0c;不但剧情紧凑&#xff0c;高潮点也要来了。而这一集看下来信息量也很多&…

k8s 1.28版本二进制安装

本文目录 二进制安装Kubernetes&#xff08;k8s&#xff09;v1.28.0介绍1.环境1.0.环境准备1.Linux网卡没有eth0显示ens33或者其它&#xff08;以ens33为例&#xff09;方法一&#xff1a;修改网卡配置方法二&#xff1a;重新安装机器(本文为虚拟机) 2.克隆的虚拟机&#xff0c…

UE5 Texture2D数组资产BUG!!!

Texture2D数组资产中的元素资产更新后&#xff0c;并未被更新&#xff0c;读取的仍然是之前缓存的Texture2D&#xff0c;需要手动清除后再手动设置新的Texture2D&#xff0c;才能生效&#xff01;&#xff01;&#xff01; 说明&#xff1a;Texture2D数组资产中的后期参数高于…

vmware vsphere用户权限分级

组或用户创建 在“系统管理→Single Sign On→用户和组”中“用户”选项卡中的“域”下拉列表中选择vSphere.local&#xff0c;单击“添加用户”。 权限分配 “系统管理→访问控制→角色”中查看或分配权限。 分类 1、管理员&#xff1a;具有完全的权限&#xff1b; 2、只…

当多条折线数据渲染在一个echarts里,这些折线的x轴数据是不统一的,处理方法

文档中series可以写成[[x轴值&#xff0c;y轴值],[x轴值&#xff0c;y轴值],[x轴值&#xff0c;y轴值]] 这种形式&#xff0c; 如果写成这样那么x轴会以series数组第一个子数组的x轴值的范围来定义&#xff0c;所以大家可以在给series赋值之前排个序&#xff0c;将子数组最多的…

【特纳斯电子】基于STM32的商用厨房监控系统-实物设计

视频及资料链接&#xff1a;基于STM32的商用厨房监控系统-实物设计 - 电子校园网 (mcude.com) 编号&#xff1a; T0052203M-SW 设计简介&#xff1a; 本设计是基于STM32的商用厨房监控系统&#xff0c;主要实现以下功能&#xff1a; 1.通过OLED显示温度、烟雾浓度、燃气浓…

2023年中国云存储优势、产值及市场规模分析[图]

云存储是基于云计算建立起来的一个网络存储技术即与计算的存储部分&#xff0c;将网络中的不同设备通过应用程序连接起来&#xff0c;进行协同工作&#xff0c;对外提供数据存储和业务访问。 云存储优势 资料来源&#xff1a;共研产业咨询&#xff08;共研网&#xff09; 云存…

Kafka SASL认证授权(四)认证源码解析

Kafka SASL认证授权(四)认证源码解析。 官网地址:https://kafka.apache.org/ 一、认证流程 在了解kafka网络模型的基础上,了解它的认证流程: ApiVersionsRequest->SaslHandshakeRequest->a series of SASL client and server tokens corresponding to the mechani…

vue自定义指令directives

官网:https://cn.vuejs.org/v2/guide/custom-directive.html v-if等是内置的指令, 在这里研究自定义指令 局部自定义指令 在directives中定义,在一个组件中定义的,只能在这一个组件中使用 ; 定义命令: directives:{//自定义指令color,el是这个标签,binding是传入的值color:f…

SyntaxError: invalid character ‘:‘ (U+FF1A)问题解决

问题&#xff1a; SyntaxError: invalid character &#xff1a; (UFF1A) 原因及解决方法&#xff1a; 冒号输入的格式不对&#xff0c;冒号的输入为中文&#xff0c;改成英文即可。