arules:关联规则及可视化

在个性化推荐中,除了应用比较广的协同过滤,还有关联规则。作为数据挖掘中一个独立的课题,关联规则用于从大量数据中挖掘出有价值的数据项之间的相关关系,比如购买啤酒的顾客有多大的概率购买尿布?这就购物篮中比较著名的”啤酒与尿布“的故事;介绍两个关联规则中常用的算法:Apriori和Eclat,这两个算法在arules中均有涉及; 关联规则维基百科:Apriori算法是应用比较广泛的频繁项集的算法,特别是挖掘布尔关联规则(0-1);算法主要分为两步:

  • 第一步通过迭代,检索出事务交易数据中的所有频繁项集,即支持度不低于用户设定的阈值的项集;

  • 第二步利用频繁项集构造出满足用户最小信任度的规则。其中,挖掘或识别出所有频繁项集是该算法的核心,占整个计算量的大部分。

Eclat主要思想是倒排,常规的交易数据是事务ID-事务数据,Eclat用事务中的每一项作为ID,事务ID作为值,对交易数据进行了变换; 详细的数据变换和算法请参考: arules package 

       从上图可见:关联规则的核心是生成itemMatrix,然后由apriori算法生成规则或者由eclat算法生成频繁项集; 介绍一下arules中常用的函数:

1、as(object,class):算法处理的矩阵与常规数据对象间的转换,规则的转换;
2、apriori(data, parameter = NULL, appearance = NULL, control = NULL) eclat(data, parameter = NULL, control = NULL) 两个主要算法函数,data为交易数据格式,可以通过as转换;parameter为参数列表,比如定义 最小支持度和置信度,control主要用于算法控制; 
3、inspect(rules[1000]);inspect(SORT(fsets, by = "support")[1:10]) 查看或者按条件(支持度或置信度)查看求得的规则 
4、subset(rules, subset = rhs %in% "Milk" &lift > 1.2):规则的筛选 5、itemFrequencyPlot(AdultSample, population = Adult, support = supp) 对满足条件的频繁项画图
一个arules的例子:
library(arules) #以Groceries数据为例,超市购物的例子,每一行为一个顾客的购买记录,格式为transactions #也就是以稀疏矩阵储存的物品矩阵数据 
data(Groceries) df.Gro=as(Groceries,"data.frame") head(df.Gro) #items 
 #1 {citrus fruit,semi-finished bread,margarine,ready soups}
 #2 {tropical fruit,yogurt,coffee}
 #3 {whole milk}
 #4 {pip fruit,yogurt,cream cheese ,meat spreads}
 #5 {other vegetables,whole milk,condensed milk,long life bakery product}
 #6 {whole milk,butter,yogurt,rice,abrasive cleaner}
 #参考上面的转换我们还可以用as把data.frame转为transcation test.Groceries=as(df.Gro,"transcations") rules = apriori(Groceries,parameter = list(support = 0.01,confidence = 0.2)) inspect(sort(rules,by="support")[1:6])
 #按支持度查看前6条规则 inspect(sort(rules,by="confidence")[1:6])
 #按置信度查看前6条规则 #也可以用subset做规则的筛选,取"右手边"含有whole milk且lift大于1.2的规则 sub.rules=subset(rules, subset = rhs %in% "whole milk" &lift > 1.2)
 #用eclat算法求频繁项
 sets=eclat(Groceries, parameter = list(support =0.05,maxlen=10))
 #也可以用上面的inspect和subset查看或筛选规则
 #针对transcation数据画频繁项的图 itemFrequencyPlot(Groceries,support = 0.05,cex.names =0.8) 
 #保存规则 两种方法 #转换成data.frame保存 df.rules=as(rules,"data.frame") write.csv(df.rules,"GeroRules.csv")
 #直接保存 write(rulesIncomeSmall, file = "GeroRules.csv", sep = ",", col.names = NA) 

itemFrequencyPlot: 

简单介绍一下关联规则的可视化包:

 #每个画图包背后都有一堆包,像ggplot2 library(arulesViz)
 #载入需要的程辑包:scatterplot3d #载入需要的程辑包:vcd
 #载入需要的程辑包:MASS
 #载入需要的程辑包:grid
 #载入需要的程辑包:colorspace
 #载入需要的程辑包:seriation
 #载入需要的程辑包:cluster
 #载入需要的程辑包:TSP
 #载入需要的程辑包:gclus
 #arulesViz中有很多图形,介绍几个好看的,画图的对象都是rules plot(rules, shading="order", control=list(main = "Two-key plot"))
 #见chart.1 plot(rules, method="grouped")
 #见chart.2 plot(rules, method="graph")#见chart.3
chart.1:Two-key plot
chart.2:Grouped matrix for 232 rules
chart.3:Graph plot

参考资料:   [1] Introduction to arules
                     [2] Visualizing Association Rules: Introduction to arulesViz
                     [3] 维基百科:关联规则


文章转载自:http://www.itongji.cn/article/0QR5962013.html

你可能感兴趣的:(学习笔记,r语言,关联规则)