R语言 | 关联规则

article/2025/9/17 9:09:41

1.概念

1.1 引论

关联规则(AssociationRules)是无监督的机器学习方法,用于知识发现,而非预测。

关联规则的学习器(learner)无需事先对训练数据进行打标签,因为无监督学习没有训练这个步骤。缺点是很难对关联规则学习器进行模型评估,一般都可以通过肉眼观测结果是否合理。

 

关联规则主要用来发现Pattern,最经典的应用是购物篮分析,当然其他类似于购物篮交易数据的案例也可以应用关联规则进行模式发现,如电影推荐、约会网站或者药物间的相互副作用。

 

1.2 例子 - 源数据

点击流数据。

不同的Session访问的新闻版块,如下所示:

Session ID

List of media categories accessed

1

{News, Finance}

2

{News, Finance}

3

{Sports, Finance, News}

4

{Arts}

5

{Sports, News, Finance}

6

{News, Arts, Entertainment}

 

1.3数据格式

关联规则需要把源数据的格式转换为稀疏矩阵。

把上表转化为稀疏矩阵,1表示访问,0表示未访问。

Session IDNewsFinanceEntertainmentSports
11100
21100
31101
40000
51101
61010


1.4术语和度量

1.4.1项集 ItemSet

这是一条关联规则:

 

括号内的Item集合称为项集。如上例,{News, Finance}是一个项集,{Sports}也是一个项集。

这个例子就是一条关联规则:基于历史记录,同时看过News和Finance版块的人很有可能会看Sports版块。

 

{News,Finance} 是这条规则的Left-hand-side (LHS or Antecedent)

{Sports}是这条规则的Right-hand-side (RHS or Consequent)

 

LHS(Left Hand Side)的项集和RHS(Right Hand Side)的项集不能有交集。

 

下面介绍衡量关联规则强度的度量。

1.4.2支持度 Support

项集的支持度就是该项集出现的次数除以总的记录数(交易数)。

Support({News}) = 5/6 = 0.83

Support({News, Finance}) = 4/6 =0.67

Support({Sports}) = 2/6 = 0.33

支持度的意义在于度量项集在整个事务集中出现的频次。我们在发现规则的时候,希望关注频次高的项集。

1.4.3置信度 Confidence

关联规则 X -> Y 的置信度 计算公式 

规则的置信度的意义在于项集{X,Y}同时出现的次数占项集{X}出现次数的比例。发生X的条件下,又发生Y的概率。



表示50%的人  访问过{News, Finance},同时也会访问{Sports}

1.4.4提升度 Lift

当右手边的项集(consequent)的支持度已经很显著时,即时规则的Confidence较高,这条规则也是无效的。

举个例子:

在所分析的10000个事务中,6000个事务包含计算机游戏,7500个包含游戏机游戏,4000个事务同时包含两者。

关联规则(计算机游戏,游戏机游戏) 支持度为0.4,看似很高,但其实这个关联规则是一个误导。

在用户购买了计算机游戏后有 (4000÷6000)0.667 的概率的去购买游戏机游戏,而在没有任何前提条件时,用户反而有(7500÷10000)0.75的概率去购买游戏机游戏,也就是说设置了购买计算机游戏这样的条件反而会降低用户去购买游戏机游戏的概率,所以计算机游戏和游戏机游戏是相斥的。

 

 

所以要引进Lift这个概念,Lift(X->Y)=Confidence(X->Y)/Support(Y)

规则的提升度的意义在于度量项集{X}和项集{Y}的独立性。即,Lift(X->Y)= 1 表面 {X},{Y}相互独立。[注:P(XY)=P(X)*P(Y),if X is independent of Y]

 

如果该值=1,说明两个条件没有任何关联,如果<1,说明A条件(或者说A事件的发生)与B事件是相斥的,一般在数据挖掘中当提升度大于3时,我们才承认挖掘出的关联规则是有价值的。


最后,lift(X->Y) = lift(Y->X)


1.4.5出错率 Conviction

Conviction的意义在于度量规则预测错误的概率。

表示X出现而Y不出现的概率。


例子:


表面这条规则的出错率是32%。

 

1.5生成规则

一般两步:

  • 第一步,找出频繁项集。n个item,可以产生2^n- 1 个项集(itemset)。所以,需要指定最小支持度,用于过滤掉非频繁项集。
  • 第二部,找出第一步的频繁项集中的规则。n个item,总共可以产生3^n - 2^(n+1) + 1条规则。所以,需要指定最小置信度,用于过滤掉弱规则。

第一步的计算量比第二部的计算量大。

2.Apriori算法

 Apriori Principle

如果项集A是频繁的,那么它的子集都是频繁的。如果项集A是不频繁的,那么所有包括它的父集都是不频繁的。

例子:{X, Y}是频繁的,那么{X},{Y}也是频繁的。如果{Z}是不频繁的,那么{X,Z}, {Y, Z}, {X, Y, Z}都是不频繁的。


生成频繁项集

给定最小支持度Sup,计算出所有大于等于Sup的项集。

第一步,计算出单个item的项集,过滤掉那些不满足最小支持度的项集。

第二步,基于第一步,生成两个item的项集,过滤掉那些不满足最小支持度的项集。

第三步,基于第二步,生成三个item的项集,过滤掉那些不满足最小支持度的项集。


 如下例子:

One-Item SetsSupport CountSupport
{News}50.83
{Finance}40.67
{Entertainment}10.17
{Sports}20.33
Two-Item SetsSupport CountSupport
{News, Finance}40.67
{News, Sports}20.33
{Finance, Sports}20.33
Three-Item SetsSupport CountSupport
{News, Finance, Sports}20.33

规则生成

给定Confidence、Lift 或者 Conviction,基于上述生成的频繁项集,生成规则,过滤掉那些不满足目标度量的规则。因为规则相关的度量都是通过支持度计算得来,所以这部分过滤的过程很容易完成。


Apriori案例分析(R语言)

1. 关联规则的包

arules是用来进行关联规则分析的R语言包。

library(arules) 

2. 加载数据集

源数据:groceries 数据集,每一行代表一笔交易所购买的产品(item)

数据转换:创建稀疏矩阵,每个Item一列,每一行代表一个transaction。1表示该transaction购买了该item,0表示没有购买。当然,data frame是比较直观的一种数据结构,但是一旦item比较多的时候,这个data frame的大多数单元格的值为0,大量浪费内存。所以,R引入了特殊设计的稀疏矩阵,仅存1,节省内存。arules包的函数read.transactions可以读入源数据并创建稀疏矩阵。

groceries <- read.transactions("groceries.csv", format="basket", sep=",")
参数说明:

format=c("basket", "single")用于注明源数据的格式。如果源数据每行内容就是一条交易购买的商品列表(类似于一行就是一个购物篮)那么使用basket;如果每行内容是交易号+单个商品,那么使用single。

cols=c("transId", "ItemId") 对于single格式,需要指定cols,二元向量(数字或字符串)。如果是字符串,那么文件的第一行是表头(即列名)。第一个元素是交易号的字段名,第二个元素是商品编号的字段名。如果是数字,那么无需表头。对于basket,一般设置为NULL,缺省也是NULL,所以不用指定。

signle format的数据格式如下所示,与此同时,需要设定cols=c(1, 2)


http://chatgpt.dhexx.cn/article/fel9lJ3n.shtml

相关文章

R语言ggraph包绘制环状网络图

ggraph 是 ggplot2 的扩展&#xff0c;用于绘制关系型数据结构&#xff0c;如网络、图和树等。 ggraph 包含 3 个核心概念&#xff1a; layout&#xff1a;定义图的布局&#xff0c;如蜂巢图、圆堆积图等 nodes&#xff1a;定义节点图形属性&#xff0c;使用 geom_node_*() 函数…

R语言︱SNA-社会关系网络—igraph包(社群划分、画图)(三)

每每以为攀得众山小&#xff0c;可、每每又切实来到起点&#xff0c;大牛们&#xff0c;缓缓脚步来俺笔记葩分享一下吧&#xff0c;please~ ——————————————————————————— 社群划分跟聚类差不多&#xff0c;参照《R语言与网站分析》第九章&#xff…

R语言 NetCoMi包 Co-occurrence网络图 微生物16S 网络比较 核心物种

#自己一些问题&#xff1a;里面有sparcc&#xff1f; #学习网站 https://github.com/stefpeschel/NetCoMi #Github本地安装 在上面网站找到下载 #devtools::install_local("C:/Users/xxx/Documents/NetCoMi-1.0.2.tar.gz") #加载包 安装在了R-3.6版本 librar…

windows 下载 R 和 R studio,以及R语言基本使用

目录 一. 安装与入门介绍 1. windows 下载 R 和 R studio 2. 常见问题的对应包查询 3. 解决RStudio 打开文件中文乱码 4. 相关包 5. 获取帮助、工作目录、保存 R 文件 二. R常用数据类型和数据结构 1. 数值型、字符型、逻辑型 2. 判断和转换 3. 特殊值及其判断 4. 数…

【R语言实例】igraph — 网络分析与可视化包(1)

作者简介&#xff1a; 本文作者系大学统计学专业教师&#xff0c;多年从事统计学的教学科研工作&#xff0c;在随机过程、统计推断、机器学习领域有深厚的理论积累与应用实践。 igraph是一套用于网络分析与可视化的r包&#xff0c;它以高效、便捷、使用简单的特点在网络分析研究…

社交网络分析的 R 基础:(一)初探 R 语言

写在前面 3 年的硕士生涯一转眼就过去了&#xff0c;和社交网络也打了很长时间交道。最近突然想给自己挖个坑&#xff0c;想给这 3 年写个总结&#xff0c;画上一个句号。回想当时学习 R 语言时也是非常戏剧性的&#xff0c;开始科研生活时到处发邮件要源代码&#xff0c;发完最…

使用R包networkD3绘制炫酷的动态关系网络

引言 在数据可视化领域&#xff0c;关系网络数据的可视化一直是一个受到广泛关注的话题。 我们经常会看到这样的复杂网络关系图。 也会经常看到一些影视作品的人物关系图&#xff0c;例如&#xff1a; 我们可以从图中清晰地了解到不同人物之间的关系&#xff0c;但是这样静态…

复杂网络笔记-R语言

最近学习了下复杂网络相关的东西&#xff0c;总结了部分基础的理论&#xff0c;与使用R语言igraph包&#xff0c;总结如下&#xff0c;还需要继续深入&#xff0c;目前只学了皮毛。 复杂网络的复杂性 1、结构复杂性 网络连接结构看上去错综复杂&#xff0c;网络连接结构可能…

R语言神经网络

R语言中已经有许多用于神经网络的package。例如nnet、AMORE以及neuralnet&#xff0c;nnet提供了最常见的前馈反向传播神经网络算法。 AMORE包则更进一步提供了更为丰富的控制参数&#xff0c;并可以增加多个隐藏层。 neuralnet包的改进在于提供了弹性反向传播算法和更多的激…

如何用 R 绘制交互式社会网络图?

挖掘社会关系网络&#xff0c;助你洞若观火。 需求 最近有个学生问我&#xff0c;如何绘制交互式社会网络图&#xff08;Interactive Social Network Graph&#xff09;&#xff1f; 之所以一定要交互式&#xff0c;是因为他的应用场景&#xff0c;是演示给客户。 他解释说&…

R语言如何绘制相互作用网络图(27)

1.什么是相互作用网络图&#xff1f; 生物网络是复杂网络&#xff0c;也是以系统科学的思想研究生命科学的桥梁。网络中的节点可以是蛋白质&#xff0c;基因&#xff0c;RNA或DNA等&#xff0c;网络的边对应节点之间的物理、生化或功能上的相互作用。生物分子之间的相互作用并…

R语言网络分析2:graph函数和应用

产生网络 自定义 BioC 中用得最多的网络类型可能是 graphNEL 类。使用 graphNEL 类的同名函数可以产生自定义网络&#xff1a; library(graph)str(graphNEL) #> function (nodes character(), edgeL list(), edgemode "undirected") nds <- letters[1:3]…

在R语言中轻松创建关联网络

数据 ## Ozone Solar.R Wind Temp Month Day ## 1 41 190 7.4 67 5 1 ## 2 36 118 8.0 72 5 2 ## 3 12 149 12.6 74 5 3 ## 4 18 313 11.5 62 5 4 ## 5 NA NA 14.3 56 5 5 ## 6 28 …

(转载)攻击方式学习之(3) - 缓冲区溢出(Buffer Overflow)

堆栈溢出 堆栈溢出通常是所有的缓冲区溢出中最容易进行利用的。了解堆栈溢出之前&#xff0c;先了解以下几个概念&#xff1a; 缓冲区 简单说来是一块连续的计算机内存区域&#xff0c;可以保存相同数据类型的多个实例。 堆栈 堆 栈是一个在计算机科学中经常使用的抽象数据类型…

关于内核堆溢出漏洞的分析

一、漏洞背景 CVE-2021-22555是一个存在了15年之久的内核堆溢出漏洞&#xff0c;它位于内核的Netfilter组件中&#xff0c;这个组件可以被用来实现防火墙、NAT等功能。 该漏洞在2006年由commit 9fa492cdc160cd27ce1046cb36f47d3b2b1efa21引入&#xff0c;并在2021年由commit …

Linux kernel ‘qeth_snmp_command’函数缓冲区溢出漏洞

漏洞名称&#xff1a;Linux kernel ‘qeth_snmp_command’函数缓冲区溢出漏洞CNNVD编号&#xff1a;CNNVD-201311-423发布时间&#xff1a;2013-11-29更新时间&#xff1a;2013-11-29危害等级&#xff1a;中危 漏洞类型&#xff1a;缓冲区溢出威胁类型&#xff1a;本地CVE编号…

hackthebox-buff(gym渗透 端口转发 cloudme 缓冲区溢出 )

1、扫描 masscan快速全局扫&#xff0c;nmap具体扫。7680不知道&#xff0c;8080是web进去搜集信息。 C:\root> masscan -p1-65535,U:1-65535 10.10.10.198 --rate1000 -e tun0Starting masscan 1.0.5 (http://bit.ly/14GZzcT) at 2021-01-17 09:36:41 GMT-- forced optio…

20181018栈溢出

所有内容参考书籍《0day安全&#xff1a;软件漏洞分析技术&#xff08;第二版&#xff09;》 缓冲区溢出 简单来说&#xff0c;缓冲区艺术就是在大缓冲区中的数据向小缓冲区复制的过程中&#xff0c;由于没注意小缓冲区的边界&#xff0c;“撑爆”了较小的缓冲区&#xff0c;…

再谈关于缓冲器溢出

废话少说(说一句废话,这是入门级的) C/C的代码: // buffer overflow code by ctorenshenguo.com #include <windows.h>#include <stdio.h>void fnHack() //the host never expect to run this{ printf("Your computer has been hacked!\n"); //ex…

Go内存溢出与内存泄露

https://www.cnblogs.com/sunsky303/p/11077030.html 一、内存泄露与内存溢出的区别 内存溢出(out of memory&#xff0c;简称OOM) 内存溢出是指程序在申请内存时&#xff0c;没有足够的内存空间供其使用&#xff0c;简单点说就是你要求分配的内存超出了系统能给你的&#…