Хотя head()
можно использовать для извлечения первых n правил, некоторые элементы RHS могут появляться несколько раз. Я хотел бы найти лучшие n уникальных элементов RHS, а также главное правило для каждого такого элемента.
Я написал код, который выполняет это, но он работает очень медленно, предположительно из-за использования функции «подмножество», что очень неэффективно. Мой код перебирает уникальные элементы RHS, находит подмножество правил, связанных с ним, и возвращает единственное верхнее правило элемента. Это эффективный или действенный способ сделать это? Есть ли способ лучше?
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(rules@rhs@itemInfo$labels[rules@rhs@data@i+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)