关联规则(理论及实例)

目录

一、啤酒和尿布的故事

二、理论

三、实例

1. 自定义数据集

2. 数据需转换成one-hot编码

3.电影题材关联分析


一、啤酒和尿布的故事

        在美国,一些年轻的父亲下班后经常要到超市去购买婴儿尿布,超市因此发现一个规律,在购买婴儿尿布的年轻父亲们中,有30%~40%的人同时要买一些啤酒。超市随后调整了货架的摆放,把尿布和啤酒放在一起,明显增加了销售额。

        若两个或多个变量的取值之间存在某种规律性,就称为关联

        关联规则是寻找在同一个事件中出现的不同项的相关性,比如在一次购买活动中所买的不同商品的相关性。

        "在购买计算机的顾客中,有30%的人也同时购买了打印机”

二、理论

编号牛奶果冻啤酒面包花生酱
T111001
T201011

        一个样本称为一个“事务” 

        每个事务由多个属性来确定,这里的属性称为“项”

        多个项组成的集合称为“项集”

        由K个项构成的集合

        {牛奶},{啤酒}....称为1项集

        {牛奶,啤酒}....称为2项集

        ......3项集,4项集,5项集

         x-->y的含义:x和y是项集,x称为规则前项,y称为规则后项。

        有必要说明一下:事务包含其涉及到的项目,而不包含项目的具体信息。在超市的关联规则挖掘问题中事务是顾客一次购物所购买的商品,但事务并不包括这些商品的具体信息,如商品的数量,价格,用途等等。
         

      支持度(support):一个项集或者规则在所有事务中出现的频率,\sigma(x):表示项集X的支持度计数

       项集X的支持度S(x) = \sigma(x)/N

        规则x-->y表示物品集x对物品集y的支持度,也就是x和y同时出现的概率。某天共有100个顾客到商场购买物品,其中有30个顾客同时购买了啤酒和尿布,那么上述的关联规则的支持度就是30%。        

        置信度:确定y在包含x的事务中出现的频繁程度。C(x\rightarrow y)=\sigma(x\cup y)/\sigma(x)P(y|x)=p(xy)/p(x)

        置信度反应了关联规则的可信度-购买了项目集x的商品的顾客同时也购买了y中商品的可能性有多大。

        购买薯片的顾客中有50%的人购买了可乐,则置信度为50%。

        例:

交易ID购买的商品
1ABC
2AC
3AD
4BEF

         (x,y)--->z:支持度:交易中包含{x,y,z}的可能性

                        置信度:包含{x,y}的交易中也包含z的条件概率

        设最小支持度50%,最小可信度为50%,则可以得到:
        A-->C(50%,66.6%)        C-->A(50%,100%)

        若关联规则x-->y的支持度和置信度分别大于或等于用户指定的最小支持率minsupport,和最小置信度minconfidence,则称x-->y为强关联规则,否则为弱关联规则。

        提升度(lift):物品集A的出现对物品集B的出现概率发生了多大的变化。

        lift(A\rightarrow B)=confidence(A\rightarrow B)/support(B)=p(B|A)/p(B)

        现在有1000个消费者,有500人购买了茶叶,其中有450人同时购买了咖啡,另外50人没有。由于confidence(茶叶-->咖啡)=450/500=90%,由此可能会认为喜欢喝茶的人往往喜欢喝咖啡。但是如果另外没有购买茶叶的500人,其中同样也有450人购买了咖啡同样很高的置信度90%,由此得到不爱喝茶的人也爱喝咖啡。这样看来,其实是否购买咖啡,与有没有购买茶叶没有关联,两者是相互独立的,其提升度90\%/[(450+450)/1000]=1

        由此可见,lift正是弥补了confidence的这一缺陷,if lift = 1,x与y独立,x对于y的出现的可能性没有提升作用,其值越大(lift>1),则表明x对y的提升程度就越大,也表明关联性越强。

三、实例

        首先

        使用mlxtend工具包得出频繁项集与规则

        pip install mlxtend

1. 自定义数据集

import pandas as pd
from mlxtend.frequent_patterns import apriori  
from mlxtend.frequent_patterns import association_rules### 自定义一份购物数据集
data = {'ID':[1,2,3,4,5,6],'Online':[1,0,0,1,1,1],'Potato':[1,1,0,1,1,1],'Burger':[1,1,0,0,1,1],'Milk':[0,1,1,1,0,1],'Beer':[0,0,1,0,1,0]}
df = pd.DataFrame(data)
df = df[['ID','Online','Potato','Burger','Milk','Beer']]
print(df)

        

        设置支持度(support)来选择频繁集

            选择最小支持度为50%

            apriori(df,min_support=0.5,use_clonames=true)

frequent_itemsets = apriori(df[['Online','Potato','Burger','Milk','Beer']],min_support=0.50,use_colnames=True)
print(frequent_itemsets)

         计算规则

         association_rules(df,metric='lift,min_threshold=1)

            可以指定不同的衡量标准与最小阈值

rules = association_rules(frequent_itemsets,metric='lift',min_threshold=1)
print(rules)

        针对选择 

rules [(rules['lift'] > 1.125) & (rules['confidence'] > 0.8)]

这几条结果就比较有价值了

洋葱和马铃薯 汉堡和马铃薯 可以搭配着来卖

如果洋葱和汉堡在购物篮中,顾客买马铃薯的可能性也比较高,如果篮子里面没有,可以推荐一下

        2. 数据需转换成one-hot编码

        在实际的数据中,数据并不是Apriori工具包直接能使用的数据格式,需要先转换成数值的形式。

retail_shopping_basket = {'ID':[1,2,3,4,5,6],'Basket':[['Beer','Diaper','Pretzels','Chips','Aspirin'],['Diaper','Beer','Chips','Lotion','Juice','BabyFood','Milk'],['Soda','Chips','Milk'],['Soup','Beer','Diaper','Milk','IceCream'],['Soda','Coffee','Milk','Breed'],['Beer','Chips']]}
retail = pd.DataFrame(retail_shopping_basket)
retail = retail[['ID','Basket']]
pd.options.display.max_colwidth=100
print(retail)

         数据集中都是字符串组成的,需要转换成数值编码

#先把ID拿出来
retail_id = retail.drop('Basket',axis=1)
print(retail_id)
retail_Basket = retail.Basket.str.join(',')
print(retail_Basket)

retail_Basket = retail_Basket.str.get_dummies(',')
print(retail_Basket)

#将ID加入进去
retail = retail_id.join(retail_Basket)
print(retail)

frequent_itemsets_2 = apriori(retail.drop('ID',axis=1),use_colnames=True)
print(frequent_itemsets_2)

 

如果光考虑支持度support(X-->Y),[Beer,Chips]和[Beer,Diaper]都是很频繁的,哪一种组合更相关呢?

        看提升度

print(association_rules(frequent_itemsets_2,metric='lift'))

        3.电影题材关联分析

        moiveLen数据集,广泛用于推荐系统。读者可以自行下载。

        

uname = ['Movie_id', 'title', 'genres']
movies = pd.read_table(r'ml-1m\movies.dat', sep='::', header=None, names=uname,engine='python',encoding='ISO-8859-1')
print(movies.head(10))

 

        数据中包括电影名字与电影类型的标签,第一步还是先转换成one-hot格式 

movies_ohe = movies.drop('genres',axis=1).join(movies.genres.str.get_dummies())
print(movies_ohe.head(10))

        将ID和电影名字都作为索引

movies_ohe.set_index(['Movie_id','title'],inplace=True)
print(movies_ohe.head(10))

frequent_itemsets_movies = apriori(movies_ohe,use_colnames=True,min_support=0.025)
print(frequent_itemsets_movies)

 

rules_movies = association_rules(frequent_itemsets_movies,metric='lift',min_threshold=1.25)
print(rules_movies)

rules_movies[(rules_movies.lift>3)].sort_values(by=['lift'],ascending=False)

        Advebture 和 Action 这两个题材是最相关的了,常识也可以分辨出来 

#查看相关题材电影
movies[(movies.genres.str.contains('Adventure')) & (~movies.genres.str.contains('Action'))]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

        

                               

 

        

        

        

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

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

相关文章

剑指Offer题目笔记25(使用回溯法解决其他类型问题)

面试题85: 问题: ​ 输入一个正整数n,输出所有包含n个左括号和n个右括号的组合,要求每个组合的左括号和右括号匹配。 解决方案: ​ 使用回溯法。因为要生成n个左括号和n个右括号,故需要走2n步&#xff0…

SD-WAN国际网络专线:高效、合规且可靠的跨境连接解决方案

在数字化时代,企业对跨境网络连接的需求日益增长。SD-WAN技术作为一种新兴的解决方案,正逐渐成为构建跨境网络连接的首选。本文将探讨SD-WAN国际网络专线的发展现状、合规性要求以及选择时需要考虑的关键因素。 SD-WAN技术:跨境网络连接的新…

【C++】排序算法 --快速排序与归并排序

目录 颜色分类(数组分三块思想)快速排序归并排序 颜色分类(数组分三块思想) 给定⼀个包含红⾊、⽩⾊和蓝⾊、共 n 个元素的数组 nums ,原地对它们进⾏排序,使得相同颜⾊ 的元素相邻,并按照红⾊、…

12-项目部署_持续集成

项目部署_持续集成 1 今日内容介绍 1.1 什么是持续集成 持续集成( Continuous integration , 简称 CI )指的是,频繁地(一天多次)将代码集成到主干 持续集成的组成要素 一个自动构建过程, 从…

【解读Kubernetes架构】全面指南,带你掌握Kubernetes的设计原理与构成!

了解 Kubernetes 架构:综合指南 前言一、什么是 Kubernetes 架构?1.1、控制平面1.2、工作节点 二、Kubernetes 控制平面组件2.1、kube-api服务器2.2、etcd2.3、kube-scheduler2.4、Kube 控制器管理器2.5、云控制器管理器 (CCM) 三…

《QT实用小工具·十四》面板容器控件和图形字体示例

1、概述 源码放在文章末尾 面板容器控件包含如下功能: 支持所有widget子类对象,自动产生滚动条。 支持自动拉伸自动填充。 提供接口获取容器内的所有对象的指针。 可设置是否自动拉伸宽度高度。 可设置设备面板之间的间距和边距。 超级图形字体类…

无库存,无货源,怎么做视频号小店?

大家好,我是电商糖果 有朋友跟糖果说,这视频号小店非常火,自己想趁着这次的风口开店赚钱。 自己无库存,也无货源,能开店卖货不? 糖果告诉他,能卖货,而且还可以让他不到一个月时间…

vivado 系统监控器

系统监控器 (SYSMON) 模数转换器 (ADC) 用于测量硬件器件上的裸片温度和电压。 SYSMON 可通过片上温度和供电传 感器来监控物理环境。 ADC 可为各种应用提供高精度模拟接口。 请参阅下文 , 以获取有关特定器件架构的更多信息 : • 《 UltraScale …

c# wpf Template ContentTemplate

1.概要 1.1 定义内容的外观 2.2 要点分析 2.代码 <Window x:Class"WpfApp2.Window1"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schem…

LangChain学习笔记—RAG(检索增强生成)

LangChain LangChain是一个软件开发框架&#xff0c;可以更轻松地使用大型语言模型&#xff08;LLM&#xff09;创建应用程序。它是一个具有 Python 和 JavaScript 代码库的开源工具。LangChain 允许开发人员将 GPT-4 等 LLM 与外部数据相结合&#xff0c;为聊天机器人、代码理…

C++之函数提高(HM)

目录 1.函数默认参数&#xff08;缺省参数&#xff09; 2.占位参数 3.函数重载 4.类和对象--封装 &#xff08;1&#xff09;圆类&#xff1a; &#xff08;2&#xff09;访问权限 &#xff08;3&#xff09;struct&&class &#xff08;4&#xff09;立方体类的…

第1讲——预备知识

一、视觉SLAM十四讲在讲些啥 SLAM&#xff1a;Simultaneous Localization and Mapping 翻译&#xff1a;同时定位与地图构建 搭载特定传感器的主体&#xff0c;在没有环境先验信息的情况下&#xff0c;于运动过程中建立环境的模型&#xff0c;同时估计自己的运动。 当特定传感…

WWDC24定档6月 | 崩坏3将推Mac系统版 苹果AI启航 visionOS 2.0将系数登场WWDC24

这几天又有一件苹果用户圈大事发生了&#xff01;WWDC24正式定档&#xff0c;将在6月10日-14日召开&#xff0c;届时一众软件系统&#xff0c;包括iOS18&#xff0c;iPadOS&#xff0c;WatchOS&#xff0c;VisionOS等等&#xff0c;都将迎来更新。另外就是手游崩坏3官宣&#x…

有效感受野可视化学习

有效感受野可视化 过程记录创建环境准备数据、脚本脚本测试 其他参考尝试运行 过程记录 创建环境 conda create -n ERF python3.8 -y conda activate ERF pip3 install empy rospkg pyyaml catkin_pkg conda install pytorch2.1.0 torchvision0.16.0 torchaudio2.1.0 pytorch…

基于k8s的高性能综合web服务器搭建

目录 基于k8s的高性能综合web服务器搭建 项目描述&#xff1a; 项目规划图&#xff1a; 项目环境&#xff1a; k8s&#xff0c; docker centos7.9 nginx prometheus grafana flask ansible Jenkins等 1.规划设计整个集群的架构&#xff0c;k8s单master的集群环境&…

【R】Error in library(foreach) : 不存在叫‘foreach’这个名字的程辑包

Error in library(foreach) : 不存在叫‘foreach’这个名字的程辑包 此外: Warning message: package ‘parallel’ is a base package, and should not be updated 解决方法 缺少名为 foreach 的包&#xff0c;使用install.packages("foreach")将名为foreach 的包…

Qt事件学习案例

视频链接 https://www.bilibili.com/video/BV18B4y1K7Cs?p7&spm_id_frompageDriver&vd_sourcefa4ef8f26ae084f9b5f70a5f87e9e41bQt5跟着视频做即可&#xff0c;Qt6部分代码需要改动,改动的地方注释有写 素材 百度云 链接&#xff1a;https://pan.baidu.com/s/158j…

Mybatis——一对一映射

一对一映射 预置条件 在某网络购物系统中&#xff0c;一个用户只能拥有一个购物车&#xff0c;用户与购物车的关系可以设计为一对一关系 数据库表结构&#xff08;唯一外键关联&#xff09; 创建两个实体类和映射接口 package org.example.demo;import lombok.Data;import …

STM32H5 读取温度传感器校准值时进 HardFault 的原因分析

1.前言 有客户反馈&#xff0c;在使用 STM32H5 读取温度传感器校准值地址时&#xff0c;会进入 HardFault&#xff0c;而在其他系列芯片中读取这个参数时并没有此现象。在 NUCLEO-H563ZI 开发板上去复现此问题&#xff0c;发现只有开启 ICACHE 后才会复现&#xff0c;初步验证…

【旅行商问题TSP】基于大邻域搜索算法LNS

课题名称&#xff1a;大规模邻域搜索算法LNS求解TSP问题 版本时间&#xff1a;2024-04-01 程序运行&#xff1a;直接运行LNS_TSP.m 文件即可 代码获取方式&#xff1a; QQ&#xff1a;491052175 VX&#xff1a;Matlab_Lover 模型介绍&#xff1a; 第一步&#xff1a;设定…