python关联分析实践学习笔记

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

我们关注的是在这样的场景下,如何找出物品之间的关联规则。接下来就来介绍下如何使用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.mzph.cn/news/103349.shtml

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

相关文章

RabbitMQ与springboot整合

1、基本概念 Server:接收客户端的连接,实现AMQP实体服务;Connection:连接,应用程序与Server的网络连接,TCP连接;Channel:信道,消息读写等操作在信道中进行。客户端可以建…

读书笔记-《ON JAVA 中文版》-摘要26[第二十三章 注解]

文章目录 第二十三章 注解1. 基本语法1.1 基本语法1.2 定义注解1.3 元注解 2. 编写注解处理器2.1 编写注解处理器2.2 注解元素2.3 默认值限制 3. 使用javac处理注解4. 基于注解的单元测试5. 本章小结 第二十三章 注解 注解(也被称为元数据)为我们在代码…

【Overload游戏引擎细节分析】从视图投影矩阵提取视锥体及overload对视锥体的封装

overoad代码中包含一段有意思的代码,可以从视图投影矩阵逆推出摄像机的视锥体,本文来分析一下原理 一、平面的方程 视锥体是用平面来表示的,所以先看看平面的数学表达。 平面方程可以由其法线N(A, B, C)和一个点Q(x0,…

让 Visual Studio 用上 ChatGPT

一、简介 Visual chatGPT Studio 是 Visual Studio 的一个免费扩展,它直接在 IDE 中添加了 chatGPT 功能。它允许用户以可以根据菜单功能的方式使用 chatGPT。 二、功能介绍 该扩展提供了一组使用 ChatGPT 命令,可以在编辑器中选择你需要处理的代码或…

k8s修改集群IP--不重置集群

正常在用集群想要更换ip master 节点ip192.168.10.138 改为192.168.10.148 node1节点ip192.168.10.139 改为192.168.10.149 node2节点ip192.168.10.140 改为192.168.10.150 master 节点 1)执行脚本1233.sh 1233.sh 内容如下: # master 节点 export oldip1192.168.…

可完全替代FTP的文件传输工具大集合

在当今的信息时代,文件传输是我们日常工作和生活中不可或缺的一项功能。无论是企业内部还是与外部合作伙伴之间,我们都需要频繁地进行各种类型和大小的文件的交换和共享。然而,传统的文件传输方式,如FTP、HTTP、CIFS等&#xff0c…

一键部署开源AI(人工智能对话模型)(支持显卡或CPU加内存运行)--ChatGLM-6B

一、基本介绍: 基于ChatGLM-6B 的快速安装服务,支持一键安装,无需任何服务配置和代码编写即可完成。 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数…

多尺度retinex图像去雾算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 clc; clear; close all; warning off; addpath(genpath(pwd)); rng(default)img_in im2doub…

微软 AR 眼镜新专利:包含热拔插电池

近日,微软在增强现实(AR)领域进行深入的研究,并申请了一项有关于“热插拔电池”的专利。该专利于2023年10月5日发布,描述了一款采用模块化设计的AR眼镜,其热插拔电池放置在镜腿部分,可以直接替代…

SpringBoot 如何使用 Sleuth 进行分布式跟踪

使用Spring Boot Sleuth进行分布式跟踪 在现代分布式应用程序中,跟踪请求和了解应用程序的性能是至关重要的。Spring Boot Sleuth是一个分布式跟踪解决方案,它可以帮助您在分布式系统中跟踪请求并分析性能问题。本文将介绍如何在Spring Boot应用程序中使…

Zabbix第二部分:基于Proxy分布式部署实现Web监控和Zabbix HA集群的搭建

代理和高可用 一、基于zabbix-proxy的分布式监控1.1 分布式监控的作用1.2 数据流向1.3 构成组件 二、部署zabbix代理服务器Step1 前置准备Step2 设置 zabbix 的下载源,安装 zabbix-proxyStep3 部署数据库并将zabbix相关文件导入Step4 修改zabbix-proxy的配置文件&am…

简述WPF中MVVM的设计思想

近年来,随着WPF在生产、制造、工控等领域应用越来越广泛,对WPF的开发需求也在逐渐增多,有很多人不断的从Web、WinForm开发转向了WPF开发。 WPF开发有很多新的概念及设计思想,如数据驱动、数据绑定、依赖属性、命令、控件模板、数…

智慧工地:助力数字建造、智慧建造、安全建造、绿色建造

智慧工地管理系统融合计算机技术、物联网、视频处理、大数据、云计算等,为工程项目管理提供先进的技术手段,构建施工现场智能监控系统,有效弥补传统监理中的缺陷,对人、机、料、法、环境的管理由原来的被动监督变成全方位的主动管…

AlphaPose Pytorch 代码详解(一):predict

前言 代码地址:AlphaPose-Pytorch版 本文以图像 1.jpg(854x480)为例对整个预测过程的各个细节进行解读并记录 python demo.py --indir examples/demo --outdir examples/res --save_img1. YOLO 1.1 图像预处理 cv2读取BGR图像 img [480,…

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

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

Design patterns--策略模式

设计模式之策略模式 笔者经常使用Modbus TCP和Modbus RTU通信协议&#xff0c;而两种的请求数据的格式不一样&#xff0c;故而采用策略模式来健壮整个工程项目。 代码示例 #ifndef MODBUS_H #define MODBUS_H #include <string>std::string convertToHex(unsigned char…

[GAMES101]透视投影变换矩阵中为什么需要改变z值

一、问题提出 在GAMES101-Lecture4 Transformation Matrices 一节中&#xff0c;闫老师介绍了正交投影和透视投影。 在讲透视投影变换矩阵 M p e r s p → o r t h o M_{persp→ortho} Mpersp→ortho​时&#xff0c;同学们对矩阵中的z分量是变化的还是不变的有很多争论。即下…

数据一致性分发

为什么要数据分发 微服务中&#xff0c;每个服务都有独立的数据源&#xff0c;这使得数据同步成为难题。 拉模式or推模式&#xff1f; 拉模式存在的问题 由于网络延迟&#xff0c;拉取的数据不一定是最新的 如果频繁向另一服务拉取数据&#xff0c;会给服务造成压力&#xf…

保护敏感数据的艺术:数据安全指南

多年来&#xff0c;工程和技术迅速转型&#xff0c;生成和处理了大量需要保护的数据&#xff0c;因为网络攻击和违规的风险很高。为了保护企业数据&#xff0c;组织必须采取主动的数据安全方法&#xff0c;了解保护数据的最佳实践&#xff0c;并使用必要的工具和平台来实现数据…

大模型时代的开发者:从飞桨PPDE到文心布道师

飞桨开发者技术专家&#xff08;PPDE&#xff09;谢杰航研究方向为AI城市规划、景观设计、生态环境及农业等领域的应用落地。他在此前Wave Summit 2023深度学习开发者大会上为大家带来了主题为《大模型时代的开发者&#xff1a;从飞桨PPDE到文心布道师》的演讲。本次演讲共分为…