关联规则用于发现交易数据中,不同商品之间的关系,这些规则反映了顾客的购买行为模式。如顾客经常在购买A商品的时候也会购买B商品,著名的“啤酒与尿布”的案例就是关联规则的成功应用案例
导语
本篇介绍R语言中的关联规则包“arules”。 在R的cran中,arule包被分在machineLearning的task view下。在该task下,处理关联规则(Association Rules)的包只有arules,提供了Apriori和ECLAT两种进行频繁项集挖掘的算法。很多其他关于频繁项集的挖掘算法还有待R语言的开发实现。
数据结构及使用流程
在进行频繁项集挖掘的过程中,arules包中给出的数据操作流程如下:
- 获取交易数据源,常见的交易数据源包括数据库、文本文件、R中的list,matrix,data.frame等对象类型。但无论哪种数据源,都需要转换成arules支持的数据格式
- arules支持的数据输入格式有两种,transactions类和tidLists类,这两个类型在存储数据时,都是采用的系数矩阵来存储的,稀疏矩阵的存储方式在稀疏矩阵存储列式和行式有介绍。
-
transactions类型
-
tidLists类型
-
- arules提供apriori和eclat算法进行频繁数据集的挖掘
- 对于挖掘的结果,我们得到规则类rule。
- 对于挖掘结果rule实例的进一步探查。
使用案例
使用list类型创建transactions:
## example 1: creating transactions form a list
a_list <- list(
c("a","b","c"),
c("a","b"),
c("a","b","d"),
c("c","e"),
c("a","b","d","e")
)
## set transaction names
names(a_list) <- paste("Tr",c(1:5), sep = "")
a_list
## coerce into transactions
trans1 <- as(a_list, "transactions")
使用matrix类型创建transactions:
## example 2: creating transactions from a matrix
a_matrix <- matrix(c(
1,1,1,0,0,
1,1,0,0,0,
1,1,0,1,0,
0,0,1,0,1,
1,1,0,1,1
), ncol = 5)
## set dim names
dimnames(a_matrix) <- list(c("a","b","c","d","e"),
paste("Tr",c(1:5), sep = ""))
a_matrix
## coerce
trans2 <- as(a_matrix, "transactions")
tidLists类和transactions类在表示的内容上是等价的,所以可以把transactions类型转换为tidLists类型:
tids <- as(trans2, "tidLists")
调用apriori或者eclat算法:
rules <- apriori(trans2,
parameter = list(supp = 0.5, conf = 0.9,
target = "rules"))
itemsets <- eclat(trans2,
parameter = list(supp = 0.1, maxlen = 15))
对结果进行分析:
inspect(rules[1000])