代码之家  ›  专栏  ›  技术社区  ›  Frankln

按提升和信心排序规则

  •  2
  • Frankln  · 技术社区  · 11 年前

    我正在尝试使用R中arules包中的apriori函数查找关联规则。

    rules <- apriori(data=data, parameter=list(supp=0.001,conf = 0.08), 
                      appearance = list(default="lhs",rhs="YOGHURT"),
                      control = list(verbose=F))
    
    rules <- sort(rules, decreasing=TRUE,by="confidence")
    
    inspect(rules[1:3])
    
    
        lhs       rhs      support      confidence       lift
    1. {A,B}     {C}       0.04           0.96           0.25
    2. {C,A}     {D}       0.05           0.95           0.26
    3. {B,D}     {A,C}     0.03           0.93           0.24
    

    通过上面显示的代码,我得到了一些保存在变量“rules”中的关联规则,该变量按置信度递减排序。但我希望同时通过信任和提升来命令这些规则。我尝试了这个,但我遇到了一个错误:

    rules <- sort(rules, decreasing=TRUE,by=c("confidence","lift"))
    
    Error in .subset2(x, i, exact = exact) : subscript out of bounds
    

    有没有一种方法可以通过信心来排序规则,同时解除规则?

    2 回复  |  直到 11 年前
        1
  •  3
  •   Michael Hahsler    11 年前

    我没有想过这个。您可以复制&加载arules后,将以下代码粘贴到R会话中。

    setMethod("sort", signature(x = "associations"),
      function (x, decreasing = TRUE, na.last = NA, by = "support", ...) {
        q <- quality(x)
        q <- q[, pmatch(by, colnames(q)), drop = FALSE]
        if(is.null(q)) stop("Unknown interest measure to sort by.")
        if(length(x) == 0) return(x)
    
        x[do.call(order, c(q, list(na.last = na.last, decreasing = decreasing)))]
    }) 
    

    现在您的原始代码应该可以工作了。

    > data("Adult")
    > rules <- apriori(Adult, parameter = list(supp = 0.5, conf = 0.9, target = "rules"))
    > inspect(head(sort(rules, by=c("supp", "conf"))))
      lhs                               rhs                   support confidence      lift
    1 {}                             => {capital-loss=None} 0.9532779  0.9532779 1.0000000
    2 {}                             => {capital-gain=None} 0.9173867  0.9173867 1.0000000
    3 {capital-gain=None}            => {capital-loss=None} 0.8706646  0.9490705 0.9955863
    4 {capital-loss=None}            => {capital-gain=None} 0.8706646  0.9133376 0.9955863
    5 {native-country=United-States} => {capital-loss=None} 0.8548380  0.9525461 0.9992323
    6 {native-country=United-States} => {capital-gain=None} 0.8219565  0.9159062 0.9983862
    

    这将是arules下一版本的一部分。

        2
  •  -1
  •   lukeA    11 年前

    假设你有

    library(arules)
    data("Adult")
    rules <- apriori(Adult, parameter = list(supp = 0.5, conf = 0.9, target = "rules"))
    

    那你可以试试

    df <- as(rules, "data.frame") 
    df[order(df$lift, df$confidence), ]