实验目的
了解关联分析的基本原理,并掌握R语言中实现关联分析的函数方法
实验原理
关联规则是表示两个项集之间的关联度或相关性的规则,关联规则的形式为下式:
其中A 与 B是两个互斥的项集,分别位于规则的左侧和右侧。
3个常用于选择有趣关联规则的度量是支持度、置信度和提升度。支持度是数据集中既包含项集A又包含项集B的实例所占的百分比,置信度是包含项集A的实例中也包含项集B所占的百分比,提升度是置信度与包含项集B的实例所占百分比的比值。
本节教程使用R语言中的数据集Titanic作为例子,Titanic数据集是包含在datasets包中的一个4维的数据表,其中包含了泰坦尼克上的乘客的综合信息,包括社会地位、性别、年龄以及是否幸存。为了在该数据集上进行关联规则挖掘,首先对原始数据进行重构,使得数据集中的每一行记录代表一个乘客。
实验步骤
载入Titanic数据集,并另命名为df
> data("Titanic")
> df <- as.data.frame(Titanic)
对数据集df进行重构并保存为titanic.raw数据集,使得该数据集中每一行记录代表一个乘客
> titanic.raw <- NULL
> for(i in 1:4){
titanic.raw <- cbind(titanic.raw,rep(as.character(df[,i]),df$Freq))
}
> titanic.raw <- as.data.frame(titanic.raw)
> names(titanic.raw) <- names(df)[1:4]
调用str()和summary()函数查看数据集titanic.raw结构
> dim(titanic.raw)
[1] 2201 4
> summary(titanic.raw)
Class Sex Age Survived
1st :325 Female: 470 Adult:2092 No :1490
2nd :285 Male :1731 Child: 109 Yes: 711
3rd :706
Crew:885
安装并加载arules包,并进行关联规则分析
> install.pachkages("arules")
> library(arules)
> rules<-apriori(titanic.raw,control=list(verbose=F),parameter=list(minlen=2,supp=0.005,conf=0.8),appearance=list(rhs=c("Survived=No","Survived=Yes"),default="lhs"))
> quality(rules) <- round(quality(rules),digits=3)
> rules.sorted <- sort(rules,by="lift")
> inspect(rules.sorted)
lhs rhs support confidence lift
[1] {Class=2nd,Age=Child} => {Survived=Yes} 0.011 1.000 3.096
[2] {Class=2nd,Sex=Female,Age=Child} => {Survived=Yes} 0.006 1.000 3.096
[3] {Class=1st,Sex=Female} => {Survived=Yes} 0.064 0.972 3.010
[4] {Class=1st,Sex=Female,Age=Adult} => {Survived=Yes} 0.064 0.972 3.010
[5] {Class=2nd,Sex=Female} => {Survived=Yes} 0.042 0.877 2.716
[6] {Class=Crew,Sex=Female} => {Survived=Yes} 0.009 0.870 2.692
[7] {Class=Crew,Sex=Female,Age=Adult} => {Survived=Yes} 0.009 0.870 2.692
[8] {Class=2nd,Sex=Female,Age=Adult} => {Survived=Yes} 0.036 0.860 2.663
[9] {Class=2nd,Sex=Male,Age=Adult} => {Survived=No} 0.070 0.917 1.354
[10] {Class=2nd,Sex=Male} => {Survived=No} 0.070 0.860 1.271
[11] {Class=3rd,Sex=Male,Age=Adult} => {Survived=No} 0.176 0.838 1.237
[12] {Class=3rd,Sex=Male} => {Survived=No} 0.192 0.827 1.222
可视化查看关联规则结果
> plot(rules,method="graph")