2016-12-23 8 views
1

Я загрузил файл как операции в R:R Arules: как удалить определенные наборы элементов из LHS/RHS

path = "my_file.csv" 
t = read.transactions(path,format="single", sep=';',cols=c("ID","Products")) 

#get the rules: 
rules = apriori(t,parameter = list(supp=0.01, conf=0.33, minlen=2, maxlen=4)) 
#sort by confidence: 
rules = sort(rules, by="confidence", decreasing=TRUE) 
#inspect the first 10 rules: 
inspect(rules[1:10]) 

выход которого:

 lhs  rhs support confidence  lift 
[1] {e,b} => {a}  0.01  0.97 some_value  
[2] {a} => {f}  0.04  0.92 some_value 
[3] {t,f} => {a}  0.12  0.91 some_value 
[4] {b,j} => {a}  0.09  0.82 some_value 
[5] {e} => {a}  0.25  0.77 some_value 
[6] {g,h} => {a}  0.05  0.56 some_value 
[7] {p} => {a}  0.31  0.54 some_value 
[8] {q,n} => {h}  0.18  0.49 some_value 
[9] {s} => {a}  0.07  0.46 some_value 
[10] {s,d} => {a}  0.20  0.42 some_value 

Теперь моя проблема в том, что НИКАКИХ гарантий {a} слишком частая, и я хотел бы установить генератор правил apriori таким образом, чтобы элемент {a} или любой другой элемент, который я не хочу рассматривать, не отображается в сгенерированных правилах. Я знаю, что простой способ - удалить элемент {a} из загруженного файла транзакции; в любом случае, даже если это легко, он не умный и элегантный, а также очень длинный, потому что я работаю с сотнями различных файлов транзакций.

Поиск в Интернете я нашел этот режим настройки для определения левой и правой частях:

rules = apriori(t,parameter = list(supp=0.01, conf=0.33, minlen=2, maxlen=4), appearance=list(default="lhs", rhs="b")) 

Выход из инспектировать теперь:

 lhs  rhs   support confidence   lift 
[1] {a,b} => {b}  other_value other_value other_value  
[2] {a} => {b}  other_value other_value other_value  
[3] {a,f} => {b}  other_value other_value other_value  
[4] {b,j} => {b}  other_value other_value other_value  
[5] {a} => {b}  other_value other_value other_value  
[6] {a,h} => {b}  other_value other_value other_value  
[7] {a} => {b}  other_value other_value other_value  
[8] {q,a} => {b}  other_value other_value other_value  
[9] {a} => {b}  other_value other_value other_value  
[10] {a,d} => {b}  other_value other_value other_value  

Так что можно сказать Apriori, какой пункт мы хотеть в rhs (или lhs); Но нельзя сказать Априори, какой предмет мы НЕ хотим. Или это не возможно, чтобы сказать, таким образом, я попытался (я не хочу {а}):

rules = apriori(t,parameter = list(supp=0.01, conf=0.33, minlen=2, maxlen=4), appearance=list(default="lhs", rhs!="a")) 

Это дает ошибку.

Любые предложения? Благодаря

+2

Я могу помочь вам с этим, но вы могли бы пересмотреть пример либо включать данные выборки с выхода' dput() 'или использовать встроенные данные примера, чтобы я мог воспроизвести вашу проблему и показать вам, как ее исправить? –

+0

Вы имеете в виду данные правил (вывод) или файл транзакции?! –

+2

Файл транзакции, поэтому вопрос воспроизводимый ([Как сделать отличный R воспроизводимый пример?] (Http://stackoverflow.com/questions/5963269)). Как правило, воспроизводимые вопросы гораздо более ценны для всех здесь. – Axeman

ответ

2

Посмотрите ? APappearance

Первый пример показывает, как исключить отдельные элементы из наборов. Вы также можете сделать это для правил добычи (? См `dput`)

data("Adult") 

## find only frequent itemsets which do not contain small or large income 
is <- apriori(Adult, parameter = list(support= 0.1, target="frequent"), 
    appearance = list(none = c("income=small", "income=large"), 
    default="both")) 
+0

Спасибо, это именно то, что я искал! –