【机器学习与R语言】10- 关联规则
1.理解关联规则
1)基本认识
- 购物篮分析:用来判别事务型数据中商品之间关联的机器学习方法,在零售店之间广泛使用。
- 购物篮分析的结果是一组指定商品之间关系模式的关联规则。
- 表现形式:{花生酱,果冻}——>{面包},即如果购买了花生酱和果冻,就很有可能购买面包。商品的集合称为项集。
- 特点:无监督学习,不能预测,智能发现知识;不能衡量算法性能,只能定性地评估。
- 其他应用场景:癌症种寻找DNA和蛋白质频繁出现的模式;信用卡欺诈和保险或医疗津贴的模式等。
2)Apriori算法
- Apriori:a priori,即事先
- 事务型数据特点:一般很庞大,潜在的项集数量随着特征的数量呈指数增加。给定k个项,则有2^k个可能的项集必须用于规则的搜索。
- 采用启发式算法来减少需要搜索的项集数,如广泛使用的Apriori算法,利用了一个简单的先验信念作为准则来减少关联规则的搜索空间(Apriori性质:一个频繁项集的所有子集必须也是频繁的)。

度量规则兴趣度:支持度和置信度
- 支持度:一个项集或规则在数据中出现的频率。项集可以是多个项{A,B},也可是单个{A}。

- 置信度:规则的预测能力或准确度度量,即表交易中项集X的出现导致项集Y出现的比例,和贝叶斯概率P(A|B)类似。

用Apriori性质建立规则
- 如果{A,B}是频繁的,那么{A}和{B}必须是频繁的。通过Apriori算法可提前排除潜在的关联规则。
- 过程:一是通过多次迭代-停止的过程来识别所有满足最小支持度阈值的项集;二是根据满足最小置信度阈值的这些项集来创建规则。
2.关联规则应用示例
用关联规则确定经常一起购买的食品杂货
1)收集数据
来自某超市经营一个月的购物数据,包含9835次交易,大约每天327次交易。不考虑品牌,将食品杂货数量归为169个类型,探究哪种类型的商品有可能一起购买。
数据下载:
链接: https://pan.baidu.com/s/11xTz8xkJxXTuj0hc5THTZA 提取码: s5pr
2)探索和准备数据
不同于矩阵,事务型数据形式更自由,每一行为案例(一次交易),每条记录包括用逗号隔开的任意数量的产品清单,一至多个。也就是说案例之间的特征可能是不同的。
①为交易数据创建一个稀疏矩阵
传统的数据框一旦增加额外的交易和商品,会变得过大而导致内存不足,因此用稀疏矩阵(购买了该单元格为1,否则为0,169列商品大部分单元为0)在内存中没有存储完整的矩阵,只是存储了由一个商品所占用的单元。
使用arules包中的read.transactions函数创建事务型数据的稀疏矩阵。
## Example: Identifying Frequently-Purchased Groceries ----
## Step 2: Exploring and preparing the data ----
# load the grocery data into a sparse matrix
library(arules)
groceries <- read.transactions("groceries.csv", sep = ",")
summary(groceries)
# look at the first five transactions
inspect(groceries[1:5])
# examine the frequency of items
itemFrequency(groceries[, 1:3])
②可视化商品的支持度(商品频率)
# plot the frequency of items
itemFrequencyPlot(groceries, support = 0.1) #支持度至少10%
itemFrequencyPlot(groceries, topN = 20) #支持度前20的商品


③可视化稀疏矩阵(商品交易)
矩阵中有黑色填充的,说明被购买了。大多数情况下,图形是比较随机的。
对于超大型交易数据集不适合全部展示,这时可以对交易进行随机抽样并可视化。
# a visualization of the sparse matrix for the first five transactions
image(groceries[1:5])
# visualization of a random sample of 100 transactions
image(sample(groceries, 100))

3)训练模型
apriori函数很简单,但要找到支持度和置信度参数来产生合理数量的关联规则,需要大量的试验和误差评估。参数阈值设置太高,可能没有规则或规则太普通,太低则可能导致规则数量庞大,耗时耗内存。
训练模型函数说明:
#找出关联规则
myrules=arules::apriori(data,
parameter = list(
support = 0.1, #最低支持度
confidence = 0.8, #最低置信度
minlen = 1)) #最低项数
# 检验关联规则
inspect(myrules)
- 支持度的阈值设置:考虑规则之前,事先想好需要最小的交易数量,如某商品一天购买2次(一月约60次)时可考虑建立规则,则支持度设为60/9835=0.006。
- 置信度的阈值设置:涉及一个巧妙的平衡。绝大部分取决于分析目标,如从保守值开始,若无可行性规则,再降低要求拓宽范围。
- minlen设定为2有助于消除包含少于两类商品的规则,防止仅仅是由于某商品被频繁购买而创建的无趣规则。
## Step 3: Training a model on the data ----
library(arules)
# default settings result in zero rules learned
apriori(groceries)
# set better support and confidence levels to learn more rules
groceryrules <- apriori(groceries, parameter = list(support =
0.006, confidence = 0.25, minlen = 2))
groceryrules

4)评估性能
- 规则的大小:前项(条件项/左项,lhs)和后项(结果项/右项,rhs)之和,如{peanut butter, jully}=>{bread}的大小为2+1=3.
- 度量规则质量的统计量:支持度(support),置信度(confidence)和提升度(lift)。提升率是指一类商品相对于它的一般购买率,被购买的可能性有多大。若lift大于1,则说明商品关联一起比单类商品购买更常见。

- 需要注意一些平凡的规则和令人费解的规则(可能只是随机模式)
## Step 4: Evaluating model performance ----
# summary of grocery association rules
summary(groceryrules)
# look at the first three rules
inspect(groceryrules[1:3])


5)提高模型性能
①对关联规则集合排序
最有用的规则或许是那些具有最高支持度、置信度和提升度的规则,所以对其进行排序来寻找感兴趣的规则。
# sorting grocery rules by lift
inspect(sort(groceryrules, by = "lift")[1:5])

②提取关联规则的子集
假如只对某种商品和其他商品关联感兴趣,,如浆果berries,则可以提取包含berries的所有规则。
# finding subsets of rules containing any berry items
berryrules <- subset(groceryrules, items %in% "berries")
inspect(berryrules)

③将关联规则保存到文件或数据框中
转化数据框使用as函数。
# writing the rules to a CSV file
write(groceryrules, file = "groceryrules.csv",
sep = ",", quote = TRUE, row.names = FALSE)
# converting the rule set to a data frame
groceryrules_df <- as(groceryrules, "data.frame")
str(groceryrules_df)

机器学习与R语言系列推文汇总:
【机器学习与R语言】1-机器学习简介
【机器学习与R语言】2-K近邻(kNN)
【机器学习与R语言】3-朴素贝叶斯(NB)
【机器学习与R语言】4-决策树
【机器学习与R语言】5-规则学习
【机器学习与R语言】6-线性回归
【机器学习与R语言】7-回归树和模型树
【机器学习与R语言】8-神经网络
【机器学习与R语言】9-支持向量机
【机器学习与R语言】10-关联规则
【机器学习与R语言】11-Kmeans聚类
【机器学习与R语言】12-如何评估模型的性能?
【机器学习与R语言】13-如何提高模型的性能?
【机器学习与R语言】10- 关联规则的更多相关文章
- 【机器学习与R语言】13- 如何提高模型的性能?
目录 1.调整模型参数来提高性能 1.1 创建简单的调整模型 2.2 定制调整参数 2.使用元学习来提高性能 2.1 集成学习(元学习)概述 2.2 bagging 2.3 boosting 2.4 ...
- 【机器学习与R语言】12- 如何评估模型的性能?
目录 1.评估分类方法的性能 1.1 混淆矩阵 1.2 其他评价指标 1)Kappa统计量 2)灵敏度与特异性 3)精确度与回溯精确度 4)F度量 1.3 性能权衡可视化(ROC曲线) 2.评估未来的 ...
- 【机器学习与R语言】6-线性回归
目录 1.理解回归 1)简单线性回归 2)普通最小二乘估计 3)相关系数 4)多元线性回归 2.线性回归应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高模型性能 1.理 ...
- 【机器学习与R语言】4-决策树
目录 1.决策树原理 2.决策树应用示例 2.1)收集数据 2.2)探索和准备数据 2.3)训练模型 2.4)评估模型性能 2.5)提高模型性能 通过自适应增强算法(boosting) 将惩罚因子分配 ...
- 【机器学习与R语言】1-机器学习简介
目录 1.基本概念 2.选择机器学习算法 3.使用R进行机器学习 1.基本概念 机器学习:发明算法将数据转化为智能行为 数据挖掘 VS 机器学习:前者侧重寻找有价值的信息,后者侧重执行已知的任务.后者 ...
- R语言实现关联规则与推荐算法(学习笔记)
R语言实现关联规则 笔者前言:以前在网上遇到很多很好的关联规则的案例,最近看到一个更好的,于是便学习一下,写个学习笔记. 1 1 0 0 2 1 1 0 0 3 1 1 0 1 4 0 0 0 0 5 ...
- 【机器学习与R语言】11- Kmeans聚类
目录 1.理解Kmeans聚类 1)基本概念 2)kmeans运作的基本原理 2.Kmeans聚类应用示例 1)收集数据 2)探索和准备数据 3)训练模型 4)评估性能 5)提高模型性能 1.理解Km ...
- 【机器学习与R语言】9- 支持向量机
目录 1.理解支持向量机(SVM) 1)SVM特点 2)用超平面分类 3)对非线性空间使用核函数 2. 支持向量机应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高性能 ...
- 【机器学习与R语言】8- 神经网络
目录 1.理解神经网络 1)基本概念 2)激活函数 3)网络拓扑 4)训练算法 2.神经网络应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高性能 1.理解神经网络 1) ...
随机推荐
- python打印爱心
print('\n'.join([''.join([('AndyLove'[(x-y)%8]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 ...
- Java:并发笔记-07
Java:并发笔记-07 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 6. 共享模型之不可变 本章内容 不可变类的使用 不可变类设计 无状态类设计 6.1 ...
- 技术博客——微信小程序的架构与原理
技术博客--微信小程序的架构与原理 在两个月的微信小程序开发过程中,我曾走了不少弯路,也曾被很多现在看来十分可笑的问题所困扰.这些弯路与困扰,基本上都是由于当时对小程序的架构理解不够充分,对小程序的原 ...
- 便宜的回文串(区间DP)
题目链接:便宜的回文串 这道题刚开始其实还是没有思路的.没办法,只能看题解了... 其实我们在思考问题时,考虑到一段串增或减时会改变它的长度,所以转移时会麻烦... 但其实不用考虑那么多的问题,我们只 ...
- Java之父 James Gosling 发表博文 《Too Soon》纪念乔布斯。
几个礼拜前,我们还在讨论乔布斯的辞职.虽然我们都知道这意味着什么,但是我没有想到一切来的如此之快.已经有很多关于这件事情的文章了,特别是"经济学人"的这篇文章. 乔布斯是一个很独特 ...
- Linux&C———进程间通信
管道和有名管道 消息队列 共享内存 信号 套接字 由于进程之间的并不会像线程那样共享地址空间和数据空间,所以进程之间就必须有自己特有的通信方式,这篇博客主要介绍自己了解到的几种进程之间的通信方式,内容 ...
- JMeter学习笔记--JDBC测试计划-连接Mysql
1.首先要下载jar包,mysql-connector-java-5.1.7-bin.jar 放到Jmeter的lib文件下ext下 2.添加JDBC Connection Configuration ...
- Python Nose 自动化测试框架介绍
文章目录 1. unittest 简介 1.1 python 单元测试 1.2 unittest 测试框架 1.3 默认模式 1.4 手工模式 2. nose 扩展框架 2.1 `nose` 的安装和 ...
- 2021CISCN 华南赛区WEB wp
CISCN 华南区域赛 太菜了 我躺平了 easy_seri <?php error_reporting(0); highlight_file(__FILE__); class Test{ pu ...
- M1配置php环境完整版(用于M1芯片的Mac中,php开发环境,比如wordpress、"或wp"、emlog pro、typecho等本地开发环境的配置)
因为macbook发布的M1是基于arm架构的,导致很多软件在短时间没无法兼容,其中包括php的很多集成开发环境软件.于是需要手动配置.网上的信息也是零七八碎,故制作了这个完整的教程. 本教程基于的m ...