Использование is.subset
получить логическую матрицу, и использовать эту матрицу, чтобы найти не-подмножества:
subsets <- is.subset(rules, proper = TRUE)
subsets[lower.tri(subsets, diag=TRUE)] <- 0 # set lower triangle to 0
notsubsets <- rowSums(subsets) == 0L
labels(rules[notsubsets])
# [1] "{capital-gain=None,hours-per-week=Full-time} => {capital-loss=None}"
# [2] "{capital-loss=None,hours-per-week=Full-time} => {capital-gain=None}"
# [3] "{race=White,sex=Male} => {capital-gain=None}"
# [4] "{race=White,sex=Male,native-country=United-States} => {capital-loss=None}"
# [5] "{race=White,sex=Male,capital-loss=None} => {native-country=United-States}"
# [6] "{sex=Male,capital-loss=None,native-country=United-States} => {race=White}"
# [7] "{sex=Male,capital-gain=None,native-country=United-States} => {capital-loss=None}"
# [8] "{workclass=Private,race=White,native-country=United-States} => {capital-loss=None}"
# [9] "{workclass=Private,race=White,capital-loss=None} => {native-country=United-States}"
#[10] "{workclass=Private,race=White,capital-gain=None} => {capital-loss=None}"
#[11] "{workclass=Private,race=White,capital-loss=None} => {capital-gain=None}"
#[12] "{workclass=Private,capital-gain=None,native-country=United-States} => {capital-loss=None}"
#[13] "{workclass=Private,capital-loss=None,native-country=United-States} => {capital-gain=None}"
#[14] "{race=White,capital-gain=None,native-country=United-States} => {capital-loss=None}"
#[15] "{race=White,capital-loss=None,native-country=United-States} => {capital-gain=None}"
#[16] "{race=White,capital-gain=None,capital-loss=None} => {native-country=United-States}"
is.subset
подсчитывает правую при оценке, является ли это дубликат, и это проблема с этим подход. Как уже отмечалось в комментарии, вышеупомянутый подход пропустил правило {sex=Male,native-country=United-States} => {capital-gain=None}
:
labels(rules[c(22, 43)])
#[1] "{sex=Male,native-country=United-States} => {capital-gain=None}"
#[2] "{sex=Male,capital-gain=None,native-country=United-States} => {capital-loss=None}"
is.subset(rules[22], rules[43])
Чтобы получить эти случаи, вы можете использовать <= 1L
вместо == 0L
, но тогда вы получите ложный положительный результат, тоже ("{sex=Male,capital-gain=None} => {capital-loss=None}"
является подмножеством {sex=Male,capital-gain=None,native-country=United-States} => {capital-loss=None}
.
Спасибо @Jota, но в вашем решении я не могу найти правило {sex = Male, native-country = United-States} => {capital-gain = None}? Это правило не включено в любые другие правила? – Avi
Я получаю следующую ошибку:> подмножества <- is.subset (rules, proper = TRUE) Ошибка в is.subset (rules, proper = TRUE): unused a rgument (proper = TRUE) – Avi
@Avi причина, по которой он пропустил указанное вами правило: '{sex = Male, native-country = United-States} => {capital-gain = None}' объясняется в редакции. Технически это подмножество '{sex = Male, capital-gain = None, native-country = United-States} => {capital-loss = None}'. – Jota