2017-10-12 2 views
0

J'essaie d'obtenir l'algorithme R apriori pour me permettre de spécifier plusieurs attributs que je veux sur les lhs, en même temps.Plusieurs critères sur lhs pour R Apriori

rules <- apriori(Data, parameter=list(supp = 0.0001, conf = 0.001, minlen = 2), appearance = list(lhs = c("DiagnoseTekst=Acuut hartfalen"), default="rhs")) 

La ligne ci-dessus filtrerait LHS pour seulement un certain DiagnoseTekst (les colonnes de mes données sont « MedicatieTekst », « Geslacht » et « DiagnoseTekst ») Cependant, je voudrais à filtrer sur les deux DiagnoseTekst ET Geslacht. Quand je mets en

rules <- apriori(Data, parameter=list(supp = 0.0001, conf = 0.001, minlen = 2), appearance = list(lhs = c("DiagnoseTekst=Acuut hartfalen", "Geslacht=M"), default="rhs")) 

Je reçois des règles avec juste DiagnoseTekst, et quelques-uns avec juste Geslacht. (alors que dans ce cas, la plupart des cas devraient avoir les deux attributs). Existe-t-il un moyen de filtrer la recherche ou les résultats pour pouvoir spécifier plusieurs critères pour la colonne lhs?

code complet pour être clair:

Data <- as(data, "transactions") 

str(Data) 
rules <- apriori(Data, parameter=list(supp = 0.0001, conf = 0.001, minlen = 2), appearance = list(lhs = c("DiagnoseTekst=Acuut hartfalen"), default="rhs")) 
top.conf <- sort(rules, decreasing = TRUE, na.last = NA, by = c("confidence","lift")) 
set <- inspect(head(subset(top.conf), 30)) 

Exemple de sortie:

> set <- inspect(head(subset(top.conf), 30)) 
    lhs        rhs            support  confidence lift  count 
[1] {DiagnoseTekst=Acuut hartfalen} => {Geslacht=V}          0.066477566 0.525500378 1.1539592 30561 
[2] {DiagnoseTekst=Acuut hartfalen} => {Geslacht=M}          0.060025798 0.474499622 0.8712635 27595 
[3] {DiagnoseTekst=Acuut hartfalen} => {MedicatieTekst=FUROSEMIDE}      0.017917467 0.141636289 2.9290550 8237 
[4] {DiagnoseTekst=Acuut hartfalen} => {MedicatieTekst=METOPROLOL}      0.006279923 0.049642341 0.9877311 2887 
[5] {DiagnoseTekst=Acuut hartfalen} => {MedicatieTekst=PARACETAMOL}      0.005201003 0.041113557 0.6085413 2391 

Répondre

0

Si je vous comprends bien, vous voulez vous assurer que deux éléments spécifiés doivent se produire dans le LHS de la règle. Apparence seulement peut restreindre quels éléments PEUVENT se produire dans la règle, mais pas que tous doivent être présents. Toutefois, vous pouvez utiliser le filtrage avec subset pour résoudre ce problème. Le code suivant trouve toutes les règles avec les éléments « âge = Senior » et « sexe = masculin » dans la partie gauche de la règle à l'aide %ain% (tous dans, voir ? "%ain%")

> library("arules") 
> data(Adult) 

> rules <- apriori(Adult) 
> rules 
set of 6137 rules 

> rules <- subset(rules, lhs %ain% c("age=Senior","sex=Male")) 
> rules 
set of 167 rules 

> inspect(head(rules, by = "lift", n = 3)) 
    lhs         rhs     support confidence lift count 
[1] {age=Senior,                    
    marital-status=Married-civ-spouse,               
    sex=Male,                     
    capital-gain=None,                   
    native-country=United-States}  => {relationship=Husband} 0.12   1 2.5 5687 
[2] {age=Senior,                    
    marital-status=Married-civ-spouse,               
    race=White,                    
    sex=Male,                     
    capital-gain=None,                   
    native-country=United-States}  => {relationship=Husband} 0.11   1 2.5 5293 
[3] {age=Senior,                    
    marital-status=Married-civ-spouse,               
    sex=Male,                     
    capital-gain=None,                   
    capital-loss=None,                   
    native-country=United-States}  => {relationship=Husband} 0.11   1 2.5 5238