如何使用arules识别top n个推荐item及其规则?

How to use arules to identify top n recommended items and their rules?

虽然head()可用于提取前n条规则,但某些RHS项可能会出现多次。我想找到前 n 个唯一的 RHS 项目以及每个此类项目的最高规则。

我已经编写了实现此功能的代码,但运行速度非常慢,可能是由于使用了效率非常低的 'subset' 函数。我的代码我遍历RHS的唯一项,找到与其相关的规则子集,以及returns项的单顶规则。这是一种有效或高效的方法吗?有没有更好的方法?

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)

这个怎么样?

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

它returns 为每个 rhs 顶部(排序后的第一个)规则。