2013-05-21 19 views
5

Sto utilizzando gli archi del pacchetto in R per generare le regole di associazione. Mi piacerebbe che limiti le regole in modo che nella parte sinistra ci sia solo un elemento particolare , chiamiamolo "potatoe".Archi di pacchetto in R: ottenimento di regole con un solo elemento sul lato sinistro

Se faccio questo:

rules <- apriori(dtm.mat, parameter = list(sup = 0.4, conf = 
0.9,target="rules"), appearance = list(lhs = c("potatoe"))) 

ottengo "patata" sul lato sinistro, ma anche tutti gli altri tipi di cose. Come posso forzare che le regole contengano un solo elemento? Il parametro maxlen non fa quello che voglio, perché, per quanto posso vedere, non posso specificare il maxlen a applicabile agli elementi a sinistra.

risposta

-5

Ecco un metodo:

  1. generare l'elenco delle regole di utilizzo ispezionare().
  2. Copia tutte le regole nell'editor di testo.
  3. Salva come file .txt.
  4. Apri in Excel come file delimitato a larghezza fissa.
  5. Filtra la LHS per includere solo "potatoe" [sic].

Ci può essere un modo più semplice, ma almeno non dovrà cercare manualmente per "patata" [sic] sul lato sinistro.

6

Supponendo di aver generato le regole ("regole" nella domanda), ecco come impostarlo. Fondamentalmente, devi forzare i dati in un frame di dati e poi suddividerli.

#Here are the original rules generated with some data I created 
# categories are "G", "T", "D", and "potatoe" 

> inspect(rules); 
lhs  rhs  support confidencelift 
1 {} => {T}  0.3333333 0.3333333 1.0000000 
2 {} => {G}  0.5000000 0.5000000 1.0000000 
3 {} => {potatoe} 0.5000000 0.5000000 1.0000000 
4 {} => {D}  0.5000000 0.5000000 1.0000000 
5 {T} => {G}  0.1666667 0.5000000 1.0000000 
6 {G} => {T}  0.1666667 0.3333333 1.0000000 
7 {T} => {D}  0.1666667 0.5000000 1.0000000 
8 {D} => {T}  0.1666667 0.3333333 1.0000000 
9 {G} => {potatoe} 0.1666667 0.3333333 0.6666667 
10 {potatoe} => {G} 0.1666667 0.3333333 0.6666667 
11 {potatoe} => {D} 0.3333333 0.6666667 1.3333333 
12 {D} => {potatoe} 0.3333333 0.6666667 1.3333333 

#Coerce into data frame 
as(rules, "data.frame"); 

#Restrict LHS to only certain value (here, "potatoe") 
rules_subset <- subset(rules, (lhs %in% c("potatoe"))); 

#Check to see subset rules 
inspect(rules_subset); 
lhs   rhs support confidencelift 
1 {potatoe} => {G} 0.1666667 0.3333333 0.6666667 
2 {potatoe} => {D} 0.3333333 0.6666667 1.3333333 

Questo metodo permette anche di arbitrariamente molti valori LHS, non solo uno. Molto più facile della mia risposta precedentemente proposta.

3

Mate, basta aggiungere default="rhs" nella lista dei parametri aspetto, e il gioco è fatto.

rules <- apriori(dtm.mat, parameter = list(sup = 0.4, conf = 
0.9,target="rules"), appearance = list(lhs = c("potatoe"), default="rhs")) 

Il parametro lhs=c("potatoe") dice l'algoritmo che il LHS dovrebbe contenere solo "patata", e il parametro default="rhs" dice l'algoritmo che RHS dovrebbe essere quello di default (cioè vincoli devono essere applicati lì).

0

La funzione subset() fornisce un metodo per cercare sottoinsiemi di transazioni, articoli o regole.

potatoerules <- subset(rules , items %in% "potatoe") 
Problemi correlati