A. 项集
项(Item):在一篮子商品中的一件消费品即为一项;
项集:若干项的集合为项集,如{啤酒,尿布}是一个二元项集。
B. 关联规则 X=>Y
X为先决条件,Y为关联结果,表示数据内隐含的关联性。
关联性强度如何,由三个概念——支持度、置信度、提升度来控制和评价。
1)支持度(Support):项集中X和Y同时出现的概率。
2)置信度(Confidence):先决条件X发生的条件下,关联结果Y发生的概率。
3)提升度(lift):含有X的条件下同时含有Y的可能性与没有X的条件下同时含有Y的可能性之比。
groceries <- read.transactions("groceries.csv", sep = ",")
summary(groceries)
如果是文本文档
click_detail=read.transactions("click_detail.txt",format="basket",sep=",",cols=c(1)) #读取txt文档(文档编码为ANSI)
read.transactions(file, format =c("basket", "single"), sep = NULL, cols = NULL, rm.duplicates =FALSE, encoding = "unknown")
format:如果是basket,就是一个顾客买的东西都放到同一个篮子,所有顾客的transactions就是一个个篮子的组合结果。如果是single,交易记录为:顾客1:产品1, 顾客1:产品2,顾客2:产品1……
sep:文件中数据是怎么被分隔的,默认为空格,click_detail里面用逗号分隔
cols:对basket, col=1,表示第一列是数据的transaction ids(交易号),如果col=NULL,则表示数据里面没有交易号这一列;对single,col=c(1,2)表示第一列是transaction ids,第二列是item ids
rm.duplicates:是否移除重复项,默认为FALSE
encoding:编码方式,如果不是”ANSI”,试试“UTF-8”
library(arules) #加载arules包
itemFrequency(groceries[, 1:3])
画图展示
itemFrequencyPlot(groceries, topN = 20, support = 0.1)
展示前五行
image(groceries[1:5])
展示随机抽取的100行数据
image(sample(groceries, 100))
Apriori算法步骤:
1)选出满足支持度最小阈值的所有项集,即频繁项集;
2)从频繁项集中找出满足最小置信度的所有规则。
groceryrules <- apriori(groceries, parameter =list(support = 0.006, confidence = 0.25, minlen = 2))
parameter:设置参数,默认值如下parameter=list(supp=0.1,conf=0.8,maxlen=10,minlen=1,target=”rules”)
supp: 支持度(support)
conf: 置信度(confidence)
maxlen,minlen: 每个项集所含项数的最大最小值
target: “rules”或“frequent itemsets”(输出关联规则/频繁项集)
apperence: 对先决条件X(lhs),关联结果Y(rhs)中具体包含哪些项进行限制,如:设置lhs=beer,将仅输出lhs含有beer这一项的关联规则。默认情况下,所有项都将无限制出现。
control: 控制函数性能,如可以设定对项集进行升序sort=1或降序sort=-1排序,是否向使用者报告进程(verbose=F/T)
summary(groceryrules)
查看频繁项集的前三个rules
inspect(groceryrules[1:3])
按lift排序,查看频繁项集的前五个rules
inspect(sort(groceryrules, by = "lift")[1:5])
显示所有先决条件为berries的关联规则
berryrules <- subset(groceryrules, items %in% c("berries","fruit"))
inspect(berryrules)
%in% 表示至少有一个项属于给定的项集
%pin% 表示部分地符合给定的项,如给定“fruit”,那么“citrus fruit”和“tropical fruit”都会被选中
%ain% 表示必须全部符合给定的项集
保存到file中
write(groceryrules, file = "groceryrules.csv", sep = ",", quote = TRUE, row.names = FALSE)
保存到dataframe中
groceryrules_df <- as(groceryrules, "data.frame")
————————————————
版权声明:本文部分内容参考了CSDN博主「helen1313」的原创文章,原文链接:https://blog.csdn.net/helen1313/article/details/38061777