Как использовать правила для определения n лучших рекомендуемых элементов и их правил?

Хотя 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)

person MCornejo    schedule 16.10.2017    source источник


Ответы (1)


Как насчет этого?

rules <- sort(rules, by=c("confidence", "lift", "support"))
rules[!duplicated(rhs(rules))]

Он возвращает для каждой правой стороны верхние (первые после сортировки) правила.

person Michael Hahsler    schedule 17.10.2017