在个性化推荐中,除了应用比较广的协同过滤,还有关联规则。作为数据挖掘中一个独立的课题,关联规则用于从大量数据中挖掘出有价值的数据项之间的相关关系,比如购买啤酒的顾客有多大的概率购买尿布?这就购物篮中比较著名的”啤酒与尿布“的故事;介绍两个关联规则中常用的算法: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) 对满足条件的频繁项画图
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
参考资料: [1] Introduction to arules
[2] Visualizing Association Rules: Introduction to arulesViz
[3] 维基百科:关联规则
文章转载自:http://www.itongji.cn/article/0QR5962013.html