如何使用arules来识别top n推荐项目及其规则?

Posted

技术标签:

【中文标题】如何使用arules来识别top n推荐项目及其规则?【英文标题】:How to use arules to identify top n recommended items and their rules? 【发布时间】:2017-10-16 14:10:57 【问题描述】:

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

我已经编写了完成此操作的代码,但运行速度很慢,大概是由于使用了“子集”函数,效率非常低。我的代码 I 遍历 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)

【问题讨论】:

【参考方案1】:

这个怎么样?

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

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

【讨论】:

以上是关于如何使用arules来识别top n推荐项目及其规则?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅获取 arules 中特定列的 LHS 和 RHS 项目?

Top-k 推荐中的召回率、召回率@k 和精度

我们如何才能找到对规则的先验支持和信心?

使用 arules/apriori 过滤 rhs 不起作用

R arules / apriori - 如何实际实现

工具推荐 | 分析大数据最需要的Top 10数据挖掘工具