2017-10-16 4 views
1

Alors que head() peut être utilisé pour extraire les n premières règles, certains éléments RHS peuvent apparaître plusieurs fois. J'aimerais trouver les n premiers articles RHS uniques ainsi que la règle la plus élevée pour chacun de ces articles.Comment utiliser arules pour identifier les n éléments recommandés et leurs règles?

J'ai écrit un code qui accomplit cela mais il fonctionne très lentement, vraisemblablement en raison de l'utilisation de la fonction 'sous-ensemble', qui est très inefficace. Mon code I itére sur les éléments uniques de RHS, trouve le sous-ensemble des règles qui s'y rapportent, et renvoie la règle supérieure unique de l'élément. Est-ce une façon efficace ou efficiente de le faire? Y a-t-il un meilleur moyen?

library(arules) 
data("Groceries") 
rules = apriori(Groceries, 
       parameter = list(supp = 0.01, conf = 0.1, target = "rules"), 
       appearance = list(lhs=c("whole milk", "root vegetables"), default="rhs")) 

rules = sort(rules, by=c("confidence", "lift", "support")) 
rhs.unique = unique([email protected]@itemInfo$labels[[email protected]@[email protected]+1]) #Already sorted by top items. 

#Function that returns the top rule for a particular RHS item in a set of rules. 
top_item_rule = function(item, rules=NULL) { 
    rules = subset(rules, rhs %in% item) 
    rules = sort(rules, by=c("confidence", "lift", "support")) 
    head(rules, n=1) 
} 

n = 3 
toprules = lapply(rhs.unique[1:n], top_item_rule, rules) 
toprules = do.call(c, args=toprules) 

Répondre

2

Que pensez-vous de cela? Il renvoie le pour chaque rhs les règles supérieures (premier après tri).

+0

Mais bien sûr! Je vous remercie. – MCornejo