星期四, 八月 25, 2011

利用apriori算法进行关联分析

关联分析(association analysis)又常称为购物篮分析,是指如果两个或多个事物之间存在一定的关联,那么其中一个事物就能通过其他事物进行预测.它的目的是为了挖掘隐藏在数据间的相互关系。

关联分析最常用在市场销售数据中,顾客的购物篮中如果包含啤酒的同时,还包含了尿布,这就揭示了这两种物品之间的关联。关联分析的挖掘任务可分解为两个步骤:一是发现频繁项集,二是从频繁项集中产生规则。

下面用R语言中的arules扩展包来实现apriori算法,来进行关联分析


library(arules)
#从rattle包中读入数据
dvdtrans <- read.csv(system.file("csv", "dvdtrans.csv",package="rattle"))

数据结构如下,ID表示购物篮编号,Item表示物品。
  ID          Item
1  1   Sixth Sense
2  1         LOTR1
3  1 Harry Potter1
4  1    Green Mile
5  1         LOTR2
6  2     Gladiator

#将数据转化为合适的格式
data <- as(split(dvdtrans$Item, dvdtrans$ID),"transactions")

#用 apriori命令生成频繁项集,设其支持度为0.5,置信度为0.8
rules <- apriori(data, parameter=list(support=0.5,confidence=0.8))

#用inspect命令提取规则
inspect(rules)

  lhs              rhs         support confidence     lift
1 {Patriot}     => {Gladiator}     0.6  1.0000000 1.428571
2 {Gladiator}   => {Patriot}       0.6  0.8571429 1.428571
3 {Sixth Sense} => {Gladiator}     0.5  0.8333333 1.190476

这说明购买爱国者电影的顾客同时也会购买角斗士 :-)

7 条评论:

  1. 我也在用这个包来分析电影方面的东西,得到规则之后,我想用图把这些关系表现出来,比如Gladiator,Sixth Sense,Patriot这三个点,然后点的大小代表被借阅的总次数,点的颜色代表电影语言,他们之间的线表示被同时销售的次数,对于他们之间线怎么画一直没想出好的办法,不知你是如何考虑的?

    回复删除
    回复
    1. 我也没画过,估计可以用igraph包来画

      删除
  2. 我参照你的igraph探索航线画了一下,是可以的,多谢!

    回复删除
    回复
    1. 细节代码啥的能透露一下么?~先谢过~

      删除
  3. 画图时候出现错误
    错误于matrix(mean(range), ncol = ncol(x), nrow = nrow(x), dimnames = dimnames(x)) :
    非数值的矩阵范围
    这是啥意思……

    回复删除
  4. 此评论已被作者删除。

    回复删除
  5. 此评论已被作者删除。

    回复删除