Предположим, у нас есть 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, поэтому будут рассматриваться как избыточные)
Любая помощь будет оценена!