【发布时间】:2016-08-05 19:08:41
【问题描述】:
假设我们有 3 条规则:
[1] {A,B,D} -> {C}
[2] {A,B} -> {C}
[3] Whatever it is
规则[2] 是规则[1] 的子集(因为规则[1] 包含规则[2] 中的所有项目),因此规则[1] 应该被删除(因为规则[1] 过于具体并且它的信息包含在规则[2])
我在网上搜索,每个人都在使用这些代码来删除多余的规则:
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]
我不明白代码是如何工作的。
在代码的第 2 行之后,subset.matrix 将变为:
[,1] [,2] [,3]
[1,] NA 1 0
[2,] NA NA 0
[3,] NA NA NA
下方三角形中的单元格设置为 NA,由于规则 [2] 是规则 [1] 的子集,相应的单元格设置为 1。所以我有 2 个问题:
为什么我们必须将下三角形设置为 NA?如果我们这样做,那么我们如何检查规则
[2]是否是规则[3]的子集? (单元格已设置为NA)在我们的例子中,规则
[1]应该是要被消除的规则,但是这些代码消除了规则[2]而不是规则[1]。 (因为第2列的第一个单元格是1,根据代码第3行,第2列的列和>=1,因此将被视为冗余)
任何帮助将不胜感激!
【问题讨论】: