R语言--关联分析

经典段子——“啤酒与尿布”,即很多年轻父亲在购买孩子尿布的时候,顺便为自己购买啤酒。关联分析中,最经典的算法Apriori算法在关联规则分析领域具有很大的影响力。

项集

这是一个集合的概念,每个事件即一个项,如啤酒是一个项,尿布是一个项,若干项的集合称为项集,如{尿布,啤酒}是一个二元项集。

关联规则

关联规则一般记为 \(X\rightarrow Y\) 的形式,X称为先决条件,右侧为相应的关联结果,用于表示出数据内隐含的关联性。如:关联规则 尿布 \(\rightarrow\) 啤酒成立,则表示购买尿布的消费者往往会购买啤酒,即两个商品的购买之间具有一定的关联性。
关联性的强度,由关联分析中的三个核心概念——支持度、置信度和提升度来控制和评价。
以例子说明:假设有10000个消费者,购买尿布的有1000人,购买啤酒的有2000人,购买面包的有500人,其中同时购买了尿布和啤酒的有800人,同时购买了尿布和面包的有100人。

支持度

支持度(Support)指在所有项集中{X,Y}出现的可能性,即项集中同时包含X和Y的概率,。
我们通过设定一个最小阈值来判断关联是否有意义,当概率大于或等于该最小阈值时有意义(有关联)。
在上面例子中P{尿布,啤酒} = 800/10000=8%,P{尿布,面包} = 100/10000=1%。我们设定最小阈值5%,即大于5%说明有关联。则尿布和啤酒有关联,而尿布和面包无关联。

置信度

置信度(Confidence)表示,在关联规则的先决条件X发生的条件下,关联结果Y发生的概率 \(P(Y|X)=\frac{P(XY)}{P(X)}\) 。
相似的我们也需要设定一个最小阈值,来判断概率关联是否有意义
上述例子中,即在购买尿布后,购买啤酒的概率。P(啤酒|尿布) = (800/10000)/(1000/10000) = 800/1000=80%。而在购买啤酒后再去购买尿布的概率为P(尿布|啤酒)=(800/10000)/(2000/10000)=800/2000=40%。假设我们以70%作为最小阈值,即强相关规则:尿布 \(\rightarrow\) 啤酒

提升度

提升度(lift),表示在含有X的条件下同时含有Y的可能性与没有X的条件下项集中含有Y的可能性之比 \(\frac{P(Y|X)}{P(Y)}\) 。提升度可以看作是置信度的一种互补指标。
如1000个消费者,购买茶叶的500人,这500人中有450人同时购买了咖啡,则 P(咖啡|茶叶) = (450/1000)/(500/1000)=450/500=90%,很高的置信度。而另外500个没有购买茶叶的人中,也有450人购买了咖啡,即1000人中有900人购买了咖啡。则P(咖啡|未购买茶叶)=(450/1000)/(500/1000)=450/500=90%。同样也是90%的置信度,所以购买咖啡和与购买茶叶之间,无关联相互独立。其提升度 \(\frac{P(咖啡|茶叶)}{P(咖啡)} = \frac{90\%}{900/1000} = 1\) 。同样的,上面例子中,\(\frac{P(啤酒|尿布)}{P(啤酒)} = \frac{80\%}{2000/10000} = 4\) 。
当提升度的值为1时表示X和Y相互独立,X对Y的发生没有提升作用。提升度的值>1时,且提升度值越大,表示X对Y的发生的提升作用越大,即关联性越大。

关联分析的基本算法步骤

  • 筛选出满足支持度最小阈值的项集——频繁项集。
  • 从频繁项集中筛选出满足最小置信度的所有规则。

R的实现

R中有两个专用于关联分析的包—— arulesarulesViz

  • arules:用于关联规则的数字化生成,提供了Apriori和Eclat这两种挖掘关联规则和频繁项集算法的实现函数
  • arulesViz:arules包的扩展包,提供了关联规则和频繁项集可视化技术,使得关联分析从算法运行到结果呈现一体化

Apriori算法之apriori函数

apriori(data, parameter = NULL, appearance = NULL, control = NULL)

参数:

  • data:事务型数据或可以强制转化为事务型数据(如,二进制矩阵或数据框)的对象
  • parameter:APparameter类(该类包含使用挖掘算法的挖掘参数,如最小支持度)或命名列表对象。
  • appearance:对先决条件X(lhs)和关联结果Y(rhs)中具体包含哪些项进行限制。如,设置lhs=beer,将仅输出lhs中含有啤酒这一项的关联规则。无设置则默认所有项无限制出现
  • control:控制函数性能,如可以设定对项集进行排序,是否向使用者报告进程等

实例

arules包中的inspect函数以可读形式显示关联规则和事务型数据,这里我们查看该事务数据中的前10条数据

library(arules)    # 导入arules包
data("Groceries")    # 导入arules包中的Groceries数据集
inspect(Groceries[1:10])
# 结果,可以看到每次交易的相信情况
     items
[1]  {citrus fruit,semi-finished bread,margarine,ready soups}
[2]  {tropical fruit,yogurt,coffee}
[3]  {whole milk}
[4]  {pip fruit,yogurt,cream cheese ,meat spreads}
[5]  {other vegetables,whole milk,condensed milk,long life bakery product}
[6]  {whole milk,butter,yogurt,rice,abrasive cleaner}
[7]  {rolls/buns}
[8]  {other vegetables,UHT-milk,rolls/buns,bottled beer,liquor (appetizer)}
[9]  {pot plants}
[10] {whole milk,cereals}
summary(Groceries)    #    查看Groceries数据集基本信息

结果:

transactions as itemMatrix in sparse format with
 9835 rows (elements/itemsets/transactions) and
 169 columns (items) and a density of 0.02609146 

most frequent items:
      whole milk other vegetables       rolls/buns             soda           yogurt          (Other)
            2513             1903             1809             1715             1372            34055 

element (itemset/transaction) length distribution:
sizes
   1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   26   27
2159 1643 1299 1005  855  645  545  438  350  246  182  117   78   77   55   46   29   14   14    9   11    4    6    1    1    1
  28   29   32
   1    3    1 

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
  1.000   2.000   3.000   4.409   6.000  32.000 

includes extended item information - examples:
       labels  level2           level1
1 frankfurter sausage meat and sausage
2     sausage sausage meat and sausage
3  liver loaf sausage meat and sausage

结果解读:

  • 该数据集是一个超市一个月的真实交易记录,该数据表明一个月内:9835条交易记录,169种商品,则该矩阵是 \(9835*169\) 个单元格,如下图。密度:0.02609146 ,即非空的单元格(商品)为 \(9835*169*0.02609146=43367.01\) ,也就是说一个月平均卖出43367.01件商品
  • 最热销的商品:全脂奶:2513件,蔬菜:1903件,面包卷:1809个,苏打:1715,酸奶:1372,其他:34055。合计43367,和前面密度吻合。
  • 商品数量较次次数:交易中:1件商品2159次(即顾客一次购物中只购买1件商品的有2159次),2件的1643次。。。32件的1次。合计: \(2159+1643+。。。+3+1=9835,2159*1+1643*2+。。。+32*1=43367\)
  • 单次购买商品数量,最少为1件,最多为32件,平均4.409件。。

arules包中的image函数可以可视化itemmatrix,即商品(169列),交易9835行构成的矩阵。该矩阵为稀疏矩阵,即元素为0(单次交易中未被购买的商品)远远多于1,且1分布不规律。选取Groceries数据集中的前10条作图

image(Groceries[1:10])


arules包中的itemFrequencyPlot函数可以画出item的频率图,以卖出频率最高的前20种商品作图

itemFrequencyPlot(Groceries,topN = 20)

arules包中的apriori函数,可以实现Apriori算法,生成符合条件的关联规则

rules1 <- apriori(Groceries)    # 使用默认参数,即最小支持度0.1,最小置信度0.8...
summary(rules1)    # 结果:set of 0 rules,即没有符合该条件的关联规则

调整参数,生成符合为最小支持度(minsup):0.001,最小置信度(mincon):0.5的关联规则。函数在生成关联规则时,还将输出函数生成关联规则时的各个细节。

  • Apriori:Apriori算法
  • Parameter specification:明支持度、置信度最小阈值等参数部分
  • Algorithmic control:算法执行过程中相关参数的算法控制部分
  • Apriori算法的基本信息和执行细节,如各步骤程序运行时间

查看生成的规则的基本情况

summary(rules1)
# 结果:
set of 5668 rules    # 总共生成了5668条关联规则

rule length distribution (lhs + rhs):sizes    # 关联规则item频数分布,lhs个数+rhs个数为3的规则有11条。这个用inspect函数查看生成的规则就特别明了
   2    3    4    5    6
  11 1461 3211  939   46 

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.     # lhs个数+rhs个数的和最小为2,最大为6
   2.00    3.00    4.00    3.92    4.00    6.00 

summary of quality measures:     # 生成的关联规则中支持度、置信度、提升度等信息
    support           confidence          lift            count
 Min.   :0.001017   Min.   :0.5000   Min.   : 1.957   Min.   : 10.0
 1st Qu.:0.001118   1st Qu.:0.5455   1st Qu.: 2.464   1st Qu.: 11.0
 Median :0.001322   Median :0.6000   Median : 2.899   Median : 13.0
 Mean   :0.001668   Mean   :0.6250   Mean   : 3.262   Mean   : 16.4
 3rd Qu.:0.001729   3rd Qu.:0.6842   3rd Qu.: 3.691   3rd Qu.: 17.0
 Max.   :0.022267   Max.   :1.0000   Max.   :18.996   Max.   :219.0  

mining info:
      data ntransactions support confidence
 Groceries          9835   0.001        0.5

查看生成的规则中的前20条规则

inspect(rules1[1:20])
# 结果
     lhs                               rhs                support     confidence lift      count
[1]  {honey}                        => {whole milk}       0.001118454 0.7333333   2.870009 11
[2]  {tidbits}                      => {rolls/buns}       0.001220132 0.5217391   2.836542 12
[3]  {cocoa drinks}                 => {whole milk}       0.001321810 0.5909091   2.312611 13
[4]  {pudding powder}               => {whole milk}       0.001321810 0.5652174   2.212062 13
[5]  {cooking chocolate}            => {whole milk}       0.001321810 0.5200000   2.035097 13
[6]  {cereals}                      => {whole milk}       0.003660397 0.6428571   2.515917 36
[7]  {jam}                          => {whole milk}       0.002948653 0.5471698   2.141431 29
[8]  {specialty cheese}             => {other vegetables} 0.004270463 0.5000000   2.584078 42
[9]  {rice}                         => {other vegetables} 0.003965430 0.5200000   2.687441 39
[10] {rice}                         => {whole milk}       0.004677173 0.6133333   2.400371 46
[11] {baking powder}                => {whole milk}       0.009252669 0.5229885   2.046793 91
[12] {liver loaf,yogurt}            => {whole milk}       0.001016777 0.6666667   2.609099 10
[13] {tropical fruit,curd cheese}   => {other vegetables} 0.001016777 0.6666667   3.445437 10
[14] {curd cheese,rolls/buns}       => {whole milk}       0.001016777 0.6250000   2.446031 10
[15] {other vegetables,curd cheese} => {whole milk}       0.001220132 0.5714286   2.236371 12
[16] {whole milk,curd cheese}       => {other vegetables} 0.001220132 0.5217391   2.696429 12
[17] {other vegetables,cleaner}     => {whole milk}       0.001016777 0.6250000   2.446031 10
[18] {liquor,red/blush wine}        => {bottled beer}     0.001931876 0.9047619  11.235269 19
[19] {soda,liquor}                  => {bottled beer}     0.001220132 0.5714286   7.095960 12
[20] {curd,cereals}                 => {whole milk}       0.001016777 0.9090909   3.557863 10 

因为生成的关联规则太多了,所以可以通过调整参数,如提高支持度(减少频繁项集的数量)/置信度(规则本身的可靠度)。这些参数调整过程:阈值调整太低,生成的关联规则数量会特别大。阈值调整太高,将会丢失一些有意义的关联规则。

rules1 <- apriori(Groceries,parameter = list(support = 0.005,confidence = 0.64)) # 提高minsup和mincon,只剩下4条满足条件的关联规则
inspect(rules1)
# 结果:
    lhs                                             rhs          support     confidence lift     count
[1] {butter,whipped/sour cream}                  => {whole milk} 0.006710727 0.6600000  2.583008 66
[2] {pip fruit,whipped/sour cream}               => {whole milk} 0.005998983 0.6483516  2.537421 59
[3] {pip fruit,root vegetables,other vegetables} => {whole milk} 0.005490595 0.6750000  2.641713 54
[4] {tropical fruit,root vegetables,yogurt}      => {whole milk} 0.005693950 0.7000000  2.739554 56   

原文地址:https://www.cnblogs.com/sakura-d/p/11150656.html

时间: 2024-08-01 20:27:47

R语言--关联分析的相关文章

R语言关联分析之啤酒和尿布

关联分析 概述 啤酒和尿布的故事,我估计大家都听过,这是数据挖掘里面最经典的案例之一.它分析的方法就关联分析. 关联分析,顾名思义,就是研究不同商品之前的关系.这里就发现了啤酒和尿布这两个看起来毫不相关的东西直接存在的微妙关系. 最经典的关联分析算法之一就是Apriori算法,也是数据挖掘十大算法之一.在R中就有一个包可以做关联分析--arules和arulesViz,前者用于关联规则的数字化生成而后者是前者的扩展包,它提供了几种对关联分析结果可视化技术,从分析到可视化一站式完成. 在了解学习关

R语言︱情感分析—词典型代码实践(最基础)(一)

笔者寄语:词典型情感分析对词典要求极高,词典中的词语需要人工去选择,但是这样的选择会很有目标以及针对性.本文代码大多来源于<数据挖掘之道>的情感分析章节.本书中还提到了监督算法式的情感分析,可见博客: R语言︱情感分析-基于监督算法R语言实现笔记. 可以与博客 R语言︱词典型情感分析文本操作技巧汇总(打标签.词典与数据匹配等)对着看. 词典型情感分析大致有以下几个步骤: 训练数据集.neg/pos情感词典.分词+数据清洗清洗(一.二.三级清洗步骤).计算情感得分.模型评价 ----------

R语言文本分析(2)

R语言文本分析(2) 在获得了数据之后,通常需要对文本中的每个词出现的频次进行统计,以便获得出现频次较高的词汇.当然,在英文中,冠词以及be动词可能是出现次数最多的一部分词汇了,后续的学习和处理中通常需要将这部分的词汇移除之后再进行处理. 初学者,先统计之,后续处理以待明天. 下面代码,简单统计频次,进行排序,找出指定词汇出现的频次,绘制在文本中出现的时间,并根据章节对novel进行分节处理. 代码来自上篇提到的书. # 使用table统计每个单词出现的频数 moby.freqs <- tabl

R语言︱情感分析文本操作技巧汇总(打标签、词典与数据匹配等)

笔者寄语:情感分析中对文本处理的数据的小技巧要求比较高,笔者在学习时候会为一些小技巧感到头疼不已. 主要包括以下内容: 1.批量读取txt字符文件(导入.文本内容逐行读取.加入文档名字). 2.文本清洗(一级清洗,去标点:二级清洗去内容:三级清洗,去停用词) 3.词典之间匹配(有主键join.词库匹配%in%) 4.分词之后档案id+label的加入 5.情感打分(关联情感词join.情感分数aggerate.情感偏向) -------------------------------------

R语言空间分析功能简介

大家知道,R语言的软件包都是各领域专家贡献而来,通过一个统一的开放的语言环境神奇地组装到了一起,然后开始产生化学反应,为大数据分析立下汗马功劳. R中已经有一个Spatial软件包.通过library(sp)即可加载,如果提示没有安装,使用install.packages("sp")进行安装即可,安装过程中需要选择一个软件分发站的镜像. 然后使用getClass("Spatial")即可查看类的信息.返回信息如下: > getClass("Spati

R语言生存分析可视化分析

完整原文链接:http://tecdat.cn/?p=5438 生存分析对应于一组统计方法,用于调查感兴趣事件发生所花费的时间. 生存分析被用于各种领域,例如: 癌症研究为患者生存时间分析, “事件历史分析”的社会学 在工程的“故障时间分析”. 在癌症研究中,典型的研究问题如下: 某些临床特征对患者的生存有何影响? 个人三年存活的概率是多少? 各组患者的生存率有差异吗? 基本概念 在这里,我们从定义生存分析的基本术语开始,包括: 生存时间和事件 生存功能和危险功能 癌症研究中的生存时间和事件类型

R语言重要数据集分析研究——需要整理分析阐明理念

1.R语言重要数据集分析研究需要整理分析阐明理念? 上一节讲了R语言作图,本节来讲讲当你拿到一个数据集的时候如何下手分析,数据分析的第一步,探索性数据分析. 统计量,即统计学里面关注的数据集的几个指标,常用的如下:最小值,最大值,四分位数,均值,中位数,众数,方差,标准差,极差,偏度,峰度 先来解释一下各个量得含义,浅显就不说了,这里主要说一下不常见的 众数:出现次数最多的 方差:每个样本值与均值的差得平方和的平均数 标准差:又称均方差,是方差的二次方根,用来衡量一个数据集的集中性 极差:最大值

用R语言分析詹姆斯的客场得分

篮球小皇帝--勒布朗·詹姆斯(LeBron James), 1984年12月30日出生在美国·俄亥俄州·阿克伦,美国男子职业篮球运动员,司职小前锋,现效力于克利夫兰骑士队. 勒布朗·詹姆斯在2003年的NBA选秀大会中,首轮第一顺位被克利夫兰骑士队选中.2003-2010年,詹姆斯在骑士队效力7年,期间获得两届NBA最有价值球员(MVP).2010年转会至迈阿密热火队,与德怀恩·韦德.克里斯·波什组成"三巨头"阵容. 现在,用R语言来分析詹姆斯(LBJ)与哪个球队相遇时,表现得最好.先

在 SPSS Statistics 和 Modeler 中调用 R 语言的实现和应用

http://www.ibm.com/developerworks/cn/data/library/ba/ba-1401spss-r/index.html 登录 | 注册   IBM 技术主题 软件下载 社区 技术讲座 搜索 developerWorks 打印本页面 用电子邮件发送本页面 新浪微博 人人网 腾讯微博 搜狐微博 网易微博 Digg Facebook Twitter Delicious Linked In developerWorks 中国 技术主题 Information Mana