我对在R中使用apriori获得的规则有疑问。
在数据输入,转换等之后,我输入了命令
规则< - apriori(orders,parameter = list(supp = 0.01,conf = 0.5, 的maxlen = 2))
我得到了我的规则。例如:
lhs rhs support confidence lift
1 {16058} => {16059} 0.01218522 0.9375000 67.886029
2 {16059} => {16058} 0.01218522 0.8823529 67.886029
3 {10049} => {10021} 0.01462226 0.7826087 34.406832
4 {10021} => {10049} 0.01462226 0.6428571 34.406832
我的回答是:有没有办法修剪对我来说不感兴趣的规则? 在这种情况下,我只想看到第一个和第三个规则,以避免使用两个规则连接两个项目的“循环”规则。
谢谢!
答案 0 :(得分:0)
感谢rdatamining - rdatamining Titanic example 我发现这个解决方案tu prune冗余规则:
rules.sorted <- sort(rules, by="lift")
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)
rules.pruned <- rules.sorted[!redundant]
inspect(rules.pruned)
plot(rules.pruned, method="graph", control=list(type="items"))
答案 1 :(得分:0)
我知道这是一个老帖子,但是当我开始研究同样的问题时,我发现了它。只是为了让人们看到比链接更完整的资源,CRAN Intro to arules解释了如何使用R中的常规子集化功能来修剪不需要的规则(第26页中间):&#34;作为关联规则挖掘的典型,发现的规则数量巨大。分析这些 规则,例如,subset()可用于为每个项目生成单独的规则子集。然后继续解释并举例说明。
答案 2 :(得分:0)
我将为rdatamining Titanic example提供替代解决方案,因为我发现这对于较大的规则库而言效率非常低。 CRAN Intro to arules p中确实提到了此问题。 14。
您可以使用规则中的is.redundant
函数,而不是使用整个项目集矩阵(可能非常大)。基本上,这将查找所有具有相同或更低的提升/置信度/ [其他指标]的更具体的规则(相同的结果/ RHS,但LHS /前人中的更多项)...
更正式地说,您寻找X的子集X',其提升度或置信度有改善(或至少没有减少)。
然后使用提升作为改进措施,代码如下所示:
rules <- apriori(df, parameter = list(supp = 0.01, conf = 0.5, target = "rules"))
rules_lift <- sort(rules, by = 'lift')
rules_pruned <- rules_lift[!is.redundant(rules_lift, measure="lift")]
inspect(head(rules_pruned, 20))
由于您提到了《泰坦尼克号》示例来解决您的问题,因此我提供了此解决方案。但是,这种方法无法解决您在问题描述中提到的循环规则,因为对于这些规则,结果Y并不相同。