2016-05-29 2 views
1

При использовании следующего примера:Как извлечь длинное правило априорного (правило ассоциации)

library("arules") 
data("Adult") 
## Mine association rules. 
rules <- apriori(Adult,parameter = list(supp = 0.5, conf = 0.9, target = "rules")) 
> labels(rules) 

Вы увидите, что следующие правила:

[5] "{sex=Male} => {capital-gain=None}" 
[20] "{race=White,sex=Male} => {capital-gain=None}" 
[22] "{sex=Male,native-country=United-States} => {capital-gain=None}" 

имеют одинаковый RHS но отличаются по их LHS. Я бы хотел получить самые длинные правила LHS и опустить короткие. В приведенном выше примере я хотел бы опустить правило [5], поскольку оно включено в [20] и [22]. ({sex = Male} включен в [20] и [22]). Я хотел бы остаться с самыми длинными правилами (в других примерах самый длинный может иметь 3 или более компонентов).

ответ

1

Использование 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}.

+0

Спасибо @Jota, но в вашем решении я не могу найти правило {sex = Male, native-country = United-States} => {capital-gain = None}? Это правило не включено в любые другие правила? – Avi

+0

Я получаю следующую ошибку:> подмножества <- is.subset (rules, proper = TRUE) Ошибка в is.subset (rules, proper = TRUE): unused a rgument (proper = TRUE) – Avi

+0

@Avi причина, по которой он пропустил указанное вами правило: '{sex = Male, native-country = United-States} => {capital-gain = None}' объясняется в редакции. Технически это подмножество '{sex = Male, capital-gain = None, native-country = United-States} => {capital-loss = None}'. – Jota

Смежные вопросы