我在数据集中挖掘模式,该数据集包含1000个14种商品的交易。根据产品是否购买,每个交易在产品列中都有0或1。大多数变量的值为0。
当我在此数据集上使用apriori算法时,最重要的规则是针对未购买的产品,例如: {var1 = 0,var2 = 0,var3 = 0} => {VAR4 = 0} 但是我更想知道哪些产品是一起购买的。
数据集: Trans var1 var2 var3 var4 1 1 0 1 1 2 0 0 0 1 3 0 0 1 0 4 0 0 0 1 5 1 0 1 0 6 1 0 0 0
rules <- apriori(dataset,
parameter = list(minlen=3, supp=0.002, conf=0.2),
appearance = list(rhs=c("var1=1","var2=1","var3=1"),
lhs=c("var1=1","var2=1","var3=1"),
default="none"),
control = list(verbose=F))
首先,当我尝试运行时,R studio正在崩溃。 第二点,我有兴趣将这段代码运行为:
rules <- apriori(dataset,
parameter = list(minlen=3, supp=0.002, conf=0.2),
appearance = list(rhs!=c("var1=0","var2=0","var3=0"),
lhs!=c("var1=0","var2=0","var3=0"),
default="none"),
control = list(verbose=F))
这是错误的!!
差异:!=和0而不是1 因此,我只获得购买商品的图案,而不是购买的商品。
提前致谢!!
答案 0 :(得分:1)
我能够找到解决此问题的解决方法:
我将数据框更改为矩阵,我不再获取未被删除的项目的模式。也许这就是算法的工作方式,或者(希望)我的方法中存在一些错误。
m <- as.matrix(dataset[,-1]) # removing the transaction id column
names(m) <- paste("Transaction " ,rownames(dataset))
rules.all <- apriori(as(m,"transactions"),parameter =
list(support = 0.1, confidence = 0.8))
inspect(rules.all)
rules.sorted <- sort(rules.all, by="lift")
inspect(rules.sorted)
subset.matrix <- is.subset(rules.sorted, rules.sorted)
subset.matrix[lower.tri(subset.matrix, diag=T)] <- NA
redundant <- colSums(subset.matrix, na.rm=T) >= 1
which(redundant)
plot(rules.all)
谢谢!