首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >arules包.错误:为产生建议下标

arules包.错误:为产生建议下标
EN

Stack Overflow用户
提问于 2016-05-06 16:59:44
回答 1查看 800关注 0票数 0

我正在尝试用arules包做推荐

我有这些数据

代码语言:javascript
复制
Data
      Client product  N       Date
    1      A  Banana  1 01/01/2016
    2      A  Tomato  1 01/01/2016
    3      A    Tuna  1 01/01/2016
    4      B  Orange  2 01/01/2016
    5      B  Tomato  3 02/01/2016
    6      C    Kiwi 11 08/01/2016

接下来,我使用了以下代码

代码语言:javascript
复制
trans = as(split(Data$product, Data$Client), "transactions")

Sales<- as(trans, "data.frame")

rules = apriori(trans, parameter = list(support = 0.001, confidence = 0.005))
rules.sorted <- sort(rules, by="lift")

# find redundant rules
subset.matrix <- is.subset(rules.sorted, rules.sorted)
subset.matrix[lower.tri(subset.matrix, diag=T)] <- NA
redundant <- colSums(subset.matrix, na.rm=T) >= 1
which(redundant)
rules.pruned <- rules.sorted[!redundant]
inspect(rules.pruned)
rules = rules.pruned

我知道这些规则:

代码语言:javascript
复制
lhs         rhs        support confidence lift
1 {Tuna}   => {Banana} 0.3333333  1.0000000  3.0
2 {Orange} => {Tomato} 0.3333333  1.0000000  1.5
3 {Tuna}   => {Tomato} 0.3333333  1.0000000  1.5
4 {Banana} => {Tomato} 0.3333333  1.0000000  1.5
5 {}       => {Kiwi}   0.3333333  0.3333333  1.0
6 {}       => {Orange} 0.3333333  0.3333333  1.0
7 {}       => {Tuna}   0.3333333  0.3333333  1.0
8 {}       => {Banana} 0.3333333  0.3333333  1.0
9 {}       => {Tomato} 0.6666667  0.6666667  1.0

但是现在,对于所有的客户,我想推荐3种产品:

代码语言:javascript
复制
for (i in 1:3) {

        reco=function(x){
                rulesMatchLHS = is.subset(rules@lhs,x)
                suitableRules =  rulesMatchLHS & !(is.subset(rules@rhs,x))
                order.rules = sort(rules[suitableRules], by = "lift")
                LIST(order.rules@rhs)[[i]]


        }

        NewS <- sapply(1:length(trans), function(x) reco(trans[x]))
        NewS <- as.data.frame(NewS)
        Sales <-cbind(Sales,NewS)

}

此代码产生错误。

LIST(order.rules@rhs)[i]中的错误:下标超出界限

我认为发生这种情况是因为我没有为所有用户提供推荐,但我希望代码继续,并在本例中“没有建议”。

做这件事的最好方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-07 14:04:47

我想你想要这样的代码。

阅读数据和地雷规则:

代码语言:javascript
复制
library(arules)

Data <- structure(list(Client = structure(c(1L, 1L, 1L, 2L, 2L, 3L), .Label = c("A", "B",  "C"), class = "factor"), product = structure(c(1L, 4L, 5L, 3L, 4L, 2L), .Label = c("Banana", "Kiwi", "Orange", "Tomato", "Tuna"), class = "factor"), N = c(1L, 1L, 1L, 2L, 3L, 11L), Date = structure(c(1L, 1L, 1L, 1L, 2L, 3L), .Label = c("01/01/2016", "02/01/2016", "08/01/2016"), class = "factor")), .Names = c("Client", "product", "N", "Date"), class = "data.frame", row.names = c(NA, -6L))

trans <- as(split(Data$product, Data$Client), "transactions")

rules <-  apriori(trans, parameter = list(support = 0.001, confidence = 0.5, maxlen = 2))
inspect(rules) 

输出:

代码语言:javascript
复制
lhs         rhs      support   confidence lift
1 {}       => {Tomato} 0.6666667 0.6666667  1.0 
2 {Orange} => {Tomato} 0.3333333 1.0000000  1.5 
3 {Tomato} => {Orange} 0.3333333 0.5000000  1.5 
4 {Tuna}   => {Banana} 0.3333333 1.0000000  3.0 
5 {Banana} => {Tuna}   0.3333333 1.0000000  3.0 
6 {Tuna}   => {Tomato} 0.3333333 1.0000000  1.5 
7 {Tomato} => {Tuna}   0.3333333 0.5000000  1.5 
8 {Banana} => {Tomato} 0.3333333 1.0000000  1.5 
9 {Tomato} => {Banana} 0.3333333 0.5000000  1.5 

提出建议:

代码语言:javascript
复制
reco <- function(rules, newTrans){
     rules.sorted <- sort(rules, by="lift")
     rhs_labels <- unlist(as(rhs(rules.sorted), "list"))

     matches <- is.subset(lhs(rules.sorted), newTrans) &
        !(is.subset(rhs(rules.sorted), newTrans))
     apply(matches, MARGIN = 2, FUN = function(x) unique(rhs_labels[x]))
}

reco(rules, trans)

这三项交易(即客户)的产出:

代码语言:javascript
复制
$`{Banana,Tomato,Tuna}`
[1] "Orange"

$`{Orange,Tomato}`
[1] "Tuna"   "Banana"

$`{Kiwi}`
[1] "Tomato"

几个注意事项:

  • 我只挖掘长度为1和2的规则,这样效率更高,不需要寻找多余的规则。
  • 我增加了信心。
  • 重新实验室将使用"AR“方法执行这种类型的建议。这是目前工作不正确,但它将很快工作。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37077774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档