如何解决Arules 中规则的并集和交集在算术上确实有意义
union(setA,setB)= setA + setB - intersect(setA,setB) 的简单数学是无效的
我在这里遗漏了什么?
这是我的两个规则集的总结。
> setA
set of 625 rules
> setB
set of 622 rules
> union(setA,setB)
set of 626 rules
> intersect(setA,setB)
set of 174 rules
> setdiff(setA,setB)
set of 451 rules
> setdiff(setB,setA)
set of 448 rules
导出的规则
R模型
解决方法
这是一个棘手的问题。
load("setA.Rdata")
load("setB.Rdata")
all.equal(itemLabels(setA),itemLabels(setB))
[1] "Lengths (261,263) differ (string compare on first 261)"
[2] "167 string mismatches"
您有两个规则集使用不同的商品编码(即商品的不同顺序)。如果您从不同的数据集中挖掘它们并且不注意项目编码是否相同,就会发生这种情况。
arules 期望集合以相同的方式编码而无需检查。我认为需要添加支票。
您可以通过重新编码规则集以使用相同的 itemLabels 来修复规则集:
itemLabels <- union(itemLabels(setA),itemLabels(setB))
setA_fixed <- new("rules",lhs = recode(lhs(setA),itemLabels = itemLabels),rhs = recode(rhs(setA),itemLabels = itemLabels)
)
setB_fixed <- new("rules",lhs = recode(lhs(setB),rhs = recode(rhs(setB),itemLabels = itemLabels)
)
现在你得到了预期的结果:
length(union(setA_fixed,setB_fixed))
[1] 626
length(c(setA_fixed,setB_fixed)) - length(intersect(setA_fixed,setB_fixed))
[1] 626
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。