Arules 中规则的并集和交集在算术上是有意义的
Posted
技术标签:
【中文标题】Arules 中规则的并集和交集在算术上是有意义的【英文标题】:The union and intersection of rules in Arules does arithmetically make sense 【发布时间】:2021-03-19 10:28:08 【问题描述】: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
导出的规则
setA
setB
R 模型
setA.Rdata
setB.Rdata
【问题讨论】:
您能否提供一个最小的setA
和setB
数据来重现您的问题?这将方便我们验证问题。
添加了指向数据集的链接。这些是整个记录集。
class(setA
和class(setB)
的结果是什么?通常,union
、setdiff
和 intersect
是为单向量设计的,这里你的 setA
和 setB
包括多向量。
我在 arules 中使用过集合操作; rdrr.io/cran/arules/man/sets.html。它允许对关联集(例如规则、项集)和 itemMatrix 进行集合操作。
回答您对类的查询 > class(setA) [1] "rules" attr(,"package") [1] "arules" > class(setB) [1] "rules" attr (,"包") [1] "arules" >
【参考方案1】:
这是一个棘手的问题。
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), itemLabels = itemLabels),
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
【讨论】:
非常感谢...感谢您花时间解释和解决。以上是关于Arules 中规则的并集和交集在算术上是有意义的的主要内容,如果未能解决你的问题,请参考以下文章