R语言机器学习与临床预测模型86--关联分析

R小盐准备介绍R语言机器学习与预测模型的学习笔记

你想要的R语言学习资料都在这里, 快来收藏关注【科研私家菜】


01 什么是关联分析

我们把某种事物发生时其他事物也会发生的联系叫作关联。所谓关联分析,就是指在交易数据、关系数据或其他信息载体中,挖掘对象集合间的规律或模式的过程。关联分析的典型案例就是购物篮分析。该过程通过挖掘购物篮中各商品之间的联系,分析顾客的购买习惯,以针对性地制订营销策略,如此等等。
关联分析,又叫关联挖掘,通常按挖掘目标的不同,可以分为关联规则挖掘和序列模式挖掘。关联规则挖掘比较关注单项间在同一事务内的关系,而序列模式挖掘比较关注单项间在同一事务内以及事务间的关系。下面将分别详述。
关联规则是指形如X=>Y的蕴涵式,其中,X和Y分别称为关联规则的前项(LHS)和后项(RHS)。
关联规则挖掘所发现的模式通常用关联规则或频繁项集的形式来表示。用于关联规则挖掘的数据是事务数据集,它包括事务ID和项的子集两个属性。
常用关联规则挖掘算法包括Apriori算法和Eclat算法,其中Apriori算法是-种最有影响的挖掘布尔关联规则频繁项集的算法,其核心是基于两阶段频繁项集思想的递推算法,Apriori 算法可挖掘出规则;而Eclat算法是首个采用垂直数据表示的经典关联挖掘算法,以深度优先搜索为策略,以概念格理论为基础,利用前缀等价关系划分搜索空间,Eclat 算法不能直接得出规则,只能得出频繁项集。



02 Apriori算法

该算法将发现关联规则的过程分为两个步骤。首先,通过迭代搜索出事务数据集中所有频繁项集,即支持度不低于设定阈值的项集;其次,利用频繁项集构造出满足用户最小置信度的关联规则。
在发现频繁项集的过程中,该算法首先从事务数据集中找出所有的候选1项集, 记作Cq,通过剪枝频繁1项集,记作L,然后从L通过自连接生成候选2项集C2,再进行剪枝得到频繁2项集L2,这样依次循环下去,直到不能再找到任何频繁k项集为止。所谓自连接,就是由L与L按照一定的要
求进行两两组合,生成Ck+1的过程。参与组合的两个集合,必须有一个项目不-样,其他的完全相同。而剪枝的时候,通过判断Ck+1中的每- -个组合, 其k项子集是否都在Lp中,若有不存在的,则该组合不频繁,需要剪掉,同时不满足最小支持度的组合也要剪掉。挖掘或识别出所有频繁项集是该算法的核心所在,因此,在处理过程中Apriori算法主要是为了提高数据访问效率,提升发现频繁项集的速度。
R语言中,程序包arules 主要用于挖掘关联规则和频繁项集,并提供了用于表示、操作和分析事务数据和模式的基础框架。该包中的函数apriori使用Apriori算法挖掘频繁项集、关联规则或关联超边,并采用逐层搜索的方式来发现频繁项集,该算法的实现包含了一些改进(比如使用了前缀树、项分类)。

L<-NROW(AirPassengers)
ap.chain<-AirPassengers[2:L]/AirPassengers[1:(L-1)]
plot(ap.chain,pch=20)
lines(ap.chain)
abline(h=1.0,lty=2,col='red')

ap.chain.dez<-cut(ap.chain,breaks=4,include.lowest=T)
ap.chain.lab<-cut(ap.chain,breaks=4,include.lowest=T,labels=c("A","B","C","D"))
out<-data.frame(dez=ap.chain.dez,lab=ap.chain.lab,chain=ap.chain)
head(out)

#构建数据集
winSize=10
conMatrix=t(mapply(function(i)ap.chain.lab[i:(i+winSize-1)],
                                 1:(NROW(ap.chain)-winSize+1)))
#由于数据都是按时间先后顺序整理的,因此可用前80%提取规则,用后20%验证规则
partVal<-round(dim(conMatrix)[1]*0.8,0)
trainData<-data.frame(conMatrix[1:partVal,])
validData<-conMatrix[(partVal+1):dim(conMatrix)[1],]
#使用Apriori算法,提取关联规则
library(arules)
apriori.obj<-apriori(trainData,parameter=list(supp=0.1,conf=0.5,target="rules"),appearance=list(rhs=c("X10=A","X10=B","X10=C","X10=D"),default="lhs"))
inspect(apriori.obj)

inspect(apriori.obj[which.max(quality(apriori.obj)$lift)])
##   lhs            rhs     support   confidence lift    
## 6 {X4=B,X9=A} => {X10=A} 0.1028037 0.9166667  4.264493
rulesData=as(apriori.obj,"data.frame")
rulesData[which.max(rulesData$lift),]

效果如下:

03 Eclat算法

与Apriori算法不同, Eclat 算法把数据集中的事务划归到每个项下,采用垂直数据表示,并以此为基础挖掘事务集的频繁项集。这种数据结构又叫作Tidset垂直数据集。
Eclat算法的算法流程及实现步骤与Apriori 算法类似,这里就不多说了。在R语言中arules 包
中的eclat函数实现了Eclat 算法,它的函数定义及参数说明如表3-6-8所示。
Eclat算法的算法流程及实现步骤与Apriori 算法类似,这里就不多说了。在R语言中arules 包中的eclat函数实现了Eclat 算法。

alist=list(c('A','D'),
           c('A','E','F'),
           c('A','B','C','E','F'),
           c('B','C','D'),
           c('A','C','D','E','F'),
           c('A','B','D','F')
)
#将alist强制转换成transactions对象
trans1 <- as(alist, "transactions")
#加载arules包,使用eclat函数提取频繁项集,最小支持度设置为0.5
library(arules)
items=eclat(trans1,parameter=list(support = 0.5),control=list(verbose=FALSE))  
#查看提取的频繁项集
inspect(items)
##    items   support  
## 1  {A,E,F} 0.5000000
## 2  {A,E}   0.5000000
## 3  {E,F}   0.5000000
## 4  {A,D}   0.5000000
## 5  {A,F}   0.6666667
## 6  {A}     0.8333333
## 7  {F}     0.6666667
## 8  {D}     0.6666667
## 9  {E}     0.5000000
## 10 {C}     0.5000000
## 11 {B}     0.5000000
items.data<-as(items,'data.frame')
items.data<-items.data[order(items.data$support,decreasing=T),]
a=items.data$support
names(a)=items.data$items
library("RColorBrewer")
barplot(a,ylim=c(0,1),col=brewer.pal(11,"RdYlBu"))


library(arulesSequences)
data(zaki)
s0<-cspade(zaki,parameter=list(support=0.5),control=list(verbose=TRUE))

#将序列模式转换成数据框
as(s0,'data.frame')

效果如下:


关注R小盐,关注科研私家菜,有问题请联系R小盐。让我们一起来学习 R语言机器学习与临床预测模型

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容