虽然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)
最佳答案
这个怎么样?
rules <- sort(rules, by=c("confidence", "lift", "support"))
rules[!duplicated(rhs(rules))]
它返回每个 rhs 的顶部(排序后的第一个)规则。
关于r - 如何使用arules识别top n推荐商品及其规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46772380/