关联规则(理论及实例)

目录

一、啤酒和尿布的故事

二、理论

三、实例

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'))]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

        

                               

 

        

        

        

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序上传到gitee

共三步 1、新建gitee仓库 点号,新建仓库,填入仓库信息新建即可 2、修改版本管理参数 微信开发者工具中点开版本管理,未初始化,需要先点初始化 接下来将设置中的通用、网络认证、远程3个部分的参数填写好 通用:核对…

idea的后端环境配置

首先,在你刚打开idea时红色箭头所指的是你进行配置的地方,接下来我把具体步骤说一下 1,直接点击箭头所指的地方就会出现如图界面,然后点击Tomcat server,使其展开点击第一个 第二步取消勾选,第三步选择bin的上一级然后…

51单片机入门_江协科技_21~22_OB记录的笔记

21. LED点阵屏 21.1. LED点阵屏介绍 •LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列,以灯珠亮灭来显示文字、图片、视频等。LED点阵屏广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等 •LED点阵屏分类 按颜色:单…

基于SpringBoot+Vue实现前后端分离的房屋租赁系统

一、🚀选题背景介绍 📚推荐理由: 计进行房屋租赁工作的管理,不仅能够保证各项信息准确无误、快速输出,同时计算机具有手工管理所无法比拟的优点,例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿…

2024整理一些前端面试题库一

以下是一些2024年前端面试题及其答案: HTML、XML、XHTML之间的区别是什么? HTML是一种标记语言,用于创建网页,定义页面的结构和内容,如标题、段落、表格、链接、图片等。 XML(可扩展标记语言)…

screen服务器后台使用

screen服务器后台使用 想用远程服务器跑程序,想让自己的电脑关机后继续运行,可以使用screen 1.查看已有screen screen -ls2.删除screen screen -X -S 2758463 quit3.新建screen screen -S elsevier查看,显示创建成功: 4.切…

免费的 AIGC工具( 7个 )

人工智能技术有好的一方面,又不好的地方,要区别对待,吸取精华,去其糟粕。目前市场上有很多AI大模型,可以支持聊天,写文稿,创作等,部分可以生成图片,以下是7个很不错的免费…

2024/4/5 AT24C02 总线(I²C总线)

存储器的介绍: 一、易失性存储器RAM:存储速度快,掉电丢失 SRAM(静态RAM):极快DRAM(动态RAM):需要配一个扫描电路,进行“补电”(动态刷新&#x…

02 _ 分布式系统的指标:啥是分布式的三围

你好,我是聂鹏程。 在上一篇文章中,通过对分布式发展历程的学习,我们对分布式技术有了一个整体印象。接下来,我们就再来看看可以用哪些指标去具体地衡量一个分布式系统。如果你已经对分布式系统的指标了解得很清楚了,…

刷题之Leetcode34题(超级详细)

34. 在排序数组中查找元素的第一个和最后一个位置 力扣链接(opens new window)https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/ 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始…

Jenkins 安装部署

1、安装下载 官网地址:Jenkins 下载 war 包 1、前置环境 JDK 环境(根据 Jenkins 版本不同,需要的 JDK 版本不同,目前需要 JDK11 的版本来支持)Maven maven 官网下载压缩包 ,并将其传输到服务器&#xf…

【Python】免费的图片/图标网站

专栏文章索引:Python 有问题可私聊:QQ:3375119339 这里是我收集的几个免费的图片/图标网站: iconfont-阿里巴巴矢量图标库icon(.ico)INCONFINDER(.ico)

clickhouse MPPDB数据库--新特性使用示例

clickhouse 新特性: 从clickhouse 22.3至最新的版本24.3.2.23,clickhouse在快速发展中,每个版本都增加了一些新的特性,在数据写入、查询方面都有性能加速。 本文根据clickhouse blog中的clickhouse release blog中,学…

【C++入门】关键字、命名空间以及输入输出

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

基于Python近红外光谱分析与机器学、深度学习方法融合技术应用

郁磊副教授,主要从事MATLAB 编程、机器学习与数据挖掘、数据可视化和软件开发、人工智能近红外光谱分析、生物医学系统建模与仿真,具有丰富的实战应用经验,主编《MATLAB智能算法30个案例分析》、《MATLAB神经网络43个案例分析》相关著作。已发…

6:算法基础--6.1:线性结构 ,6.2:查找算法

转上一节: http://t.csdnimg.cn/ql5Cdhttp://t.csdnimg.cn/ql5Cd 课程内容提要: 6:知识点考点详解 6.1:线性结构 通常分析时间复杂度的方法是从算法中选取-种对于所研究的问题来说是基本运算的操作,以 该操作重…

51单片机入门:认识开发板

认识开发板 板载资源: 数码管模块 说明: 2个四位一体共阴数码管 详细: 2个四位一体:两个独立的四位数码管,每个四位数码管都是“一体”的设计,也就是说,每个数码管内部集成了四个独立的七段LE…

【Linux】Ubuntu 磁盘管理

准备一个U盘或者SD卡(含读卡器),并将其格式化成 FAT32 格式,不要使用NTFS格式(这是微软的专利,大部分Linux系统不支持)和exFAT格式(有的Linux系统也不支持)。 如果Ubun…

Lafida多目数据集实测

Lafida 数据集 paper:J. Imaging | Free Full-Text | LaFiDa—A Laserscanner Multi-Fisheye Camera Dataset 官网数据:https://www.ipf.kit.edu/english/projekt_cv_szenen.php 官网:KIT-IPF-Software and Datasets - LaFiDa 标定数据下载&…

【蓝桥杯嵌入式】9届程序题刷题记录及反思

一、题目内容分析 二、LCD单字符高亮显示实现 本次要求显示两个字符&#xff0c;此函数高亮pos及它后面一个字符 void highlight(uint8_t *str,uint8_t pos) {int i 0;for(i 0; i < 20; i){if(i ! pos && i! (pos1))LCD_DisplayChar(Line3,(320 - (16 * i)),st…