1

我对在 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

我的回答是:有没有办法修剪我不感兴趣的规则?在这种情况下,我只想查看第一条和第三条规则,以避免使用两条规则连接两个项目的“循环”规则。

谢谢!

4

3 回答 3

2

我将为rdatamining Titanic 示例提供一个替代解决方案,因为我发现这对于更大的规则库非常低效。CRAN Intro to arules p中确实提到了这个问题。14.

is.redundant您可以使用arules中的函数,而不是使用整个项目集矩阵(可能非常大) 。这基本上会查找所有更具体的规则(相同的结果/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 是不一样的。

于 2020-07-06T13:12:42.540 回答
0

感谢 rdatamining - rdatamining Titanic 示例 我找到了这个解决方案 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"))
于 2015-03-20T13:39:19.050 回答
0

我知道这是一篇旧帖子,但是当我开始研究同一个问题时,我发现了它。只是为了将人们指向比您的链接更完整的资源,CRAN Intro to arules解释了如何使用 R 中的正常子集功能来修剪不需要的规则(第 26 页中间):“作为关联规则挖掘的典型,找到的规则是巨大的。要分析这些规则,例如,subset() 可用于为每个项目生成单独的规则子集”,然后继续解释并举例说明。

于 2016-09-13T18:12:42.483 回答