【问题标题】:R- Is there a way to limit apriori rules by lift?R-有没有办法通过提升来限制先验规则?
【发布时间】:2017-02-23 07:48:04
【问题描述】:

我正在查看这个数据集:https://archive.ics.uci.edu/ml/machine-learning-databases/credit-screening/crx.data

我对数据进行了预处理:

ca.1<-read.csv("CreditApproval.csv",T,",")

# From http://stackoverflow.com/q/4787332/
remove_outliers <- function(x, na.rm = TRUE, ...) {
  qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...)
  H <- 1.5 * IQR(x, na.rm = na.rm)
  y <- x
  y[x < (qnt[1] - H)] <- NA
  y[x > (qnt[2] + H)] <- NA
  y
}

ca.1$A2<-remove_outliers(ca$A2)
ca.1$A3<-remove_outliers(ca$A3)
ca.1$A8<-remove_outliers(ca$A8)
ca.1$A11<-remove_outliers(ca$A11)
ca.1$A14<-remove_outliers(ca$A14)
ca.1$A15<-remove_outliers(ca$A15)
ca.1$A2<-discretize(ca.1$A2,"frequency",categories = 6)
ca.1$A3<-discretize(ca.1$A3,"frequency",categories = 6)
ca.1$A8<-discretize(ca.1$A8,"frequency",categories = 6)
ca.1$A11<-discretize(ca.1$A11,"frequency",categories = 6)
ca.1$A14<-discretize(ca.1$A14,"frequency",categories = 6)
ca.1$A15<-discretize(ca.1$A15,"frequency",categories = 6)

ca.1<-na.omit(ca.1)

在微调 support、confidence、min/maxlen 后,我仍然得到 65 条规则:

> rules<-apriori(ca.1, parameter= list(supp=0.15, conf=0.89, minlen=3, maxlen=4), appearance=list(rhs=c("class=-", "class=+"), default="lhs"))
> rules.sorted <- sort(rules, by="lift")
> inspect(rules.sorted)
     lhs                     rhs       support   confidence lift    
[1]  {A5=g,A9=t,A10=t}    => {class=+} 0.1521739 0.8974359  2.770607
[2]  {A4=u,A9=t,A10=t}    => {class=+} 0.1521739 0.8974359  2.770607
[3]  {A1=a,A9=f}          => {class=-} 0.1717391 0.9753086  1.442579
[4]  {A1=a,A9=f,A13=g}    => {class=-} 0.1608696 0.9736842  1.440176
...[65]

如您所见,+ 规则比- 规则有更大的提升,但支持和信心较低。我一直在查看文档,但找不到任何可以通过提升来限制的参数。这可能吗?如果没有,遇到这种情况你会怎么做?

【问题讨论】:

  • 你在找那个吗?子规则 阈值)
  • 此示例不可重现。 stackoverflow.com/help/mcve
  • @MFR 我想知道先验方法是否提供了实现此目的的方法。我的意思是这不是一个常见的问题吗?
  • @Hack-R 我添加了数据集和预处理代码。

标签: r apriori


【解决方案1】:

arules 封装一个特殊的函数来subset 定义这个对象类型。 为了过滤掉提升值小于 2 的规则,您可以尝试以下操作:

subset(rules, subset = lift > 2)

【讨论】:

    【解决方案2】:

    另一种方法是使用arules::quality()。例如:

    association.rules <- apriori(tr, parameter = list(support=0.005, confidence=0.25, minlen=3, maxlen=10))
    
    subRules<-association.rules[quality(association.rules)$lift > 1]
    

    此功能可以通过support, confidence, coverage, lift, count过滤。

    【讨论】:

      【解决方案3】:

      您不能仅通过提升来限制先验规则。您必须首先通过 supportconfidence 获得限制:

       rules<-apriori(ca.1, parameter= list(supp=0.15, conf=0.89, minlen=3, maxlen=4)
      

      然后,做这样的事情

      rulesLift <- sort(subset(rules, subset = lift < 2), by="lift") 
      inspect(rulesLift)
      

      【讨论】:

        【解决方案4】:

        我认为 apriori 函数不会将提升作为参数之一。如果我尝试设置提升,我会收到此错误

        错误: 无效参数:提升

        相反,我可以按提升对规则进行排序,然后根据提升值选择规则,如下所示

        排序(规则,按=“提升”,递减=真)

        这不是一个简单的解决方案,而是一个不错的解决方法

        【讨论】:

          【解决方案5】:

          如果你尝试过:

          apriori(df, parameter = list(lift = 0.3, minlen =2))
          

          在这种情况下,您可以将最小提升设置为任何值,只需选择 0.3。

          【讨论】:

          • 嗨。没有要设置为参数的提升选项。
          猜你喜欢
          • 2019-10-15
          • 1970-01-01
          • 2014-07-17
          • 2017-02-01
          • 2021-11-30
          • 1970-01-01
          • 1970-01-01
          • 2023-04-01
          • 1970-01-01
          相关资源
          最近更新 更多