数据挖掘系列004 关联规则R语言--arules

关联规则用于发现交易数据中,不同商品之间的关系,这些规则反映了顾客的购买行为模式。如顾客经常在购买A商品的时候也会购买B商品,著名的“啤酒与尿布”的案例就是关联规则的成功应用案例

导语

本篇介绍R语言中的关联规则包“arules”。 在R的cran中,arule包被分在machineLearning的task view下。在该task下,处理关联规则(Association Rules)的包只有arules,提供了Apriori和ECLAT两种进行频繁项集挖掘的算法。很多其他关于频繁项集的挖掘算法还有待R语言的开发实现。

数据结构及使用流程

在进行频繁项集挖掘的过程中,arules包中给出的数据操作流程如下:

image

  1. 获取交易数据源,常见的交易数据源包括数据库、文本文件、R中的list,matrix,data.frame等对象类型。但无论哪种数据源,都需要转换成arules支持的数据格式
  2. arules支持的数据输入格式有两种,transactions类和tidLists类,这两个类型在存储数据时,都是采用的系数矩阵来存储的,稀疏矩阵的存储方式在稀疏矩阵存储列式和行式有介绍。
    • transactions类型

      image

    • tidLists类型

    image

  3. arules提供apriori和eclat算法进行频繁数据集的挖掘
  4. 对于挖掘的结果,我们得到规则类rule。
  5. 对于挖掘结果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])
Jeff Lee /
Published under (CC) BY-NC-SA in categories data mining  tagged with 关联规则  R