【问题标题】:Caret and rpart - definining methodCaret 和 rpart - 定义方法
【发布时间】:2015-08-02 03:29:49
【问题描述】:

我正在尝试熟悉 caret 包。我以前会直接使用 rpart - 例如使用以下语法

fit_rpart=rpart(y~.,data=dt1,method="anova"). 

我已经指定了方差分析,因为我的目标是回归(而不是分类)

使用插入符号 - 我会使用以下语法:

rpart_fit <- train(y ~ ., data = dt1, method = "rpart",trControl=fitControl)

我的问题是,由于方法槽已被使用,我仍然可以在哪里/如何指定 method="anova"?

提前非常感谢!

【问题讨论】:

    标签: r tree r-caret rpart


    【解决方案1】:

    您可以使用当前的rpart 代码创建custom method。首先,获取当前代码:

    library(caret)
    rpart_code <- getModelInfo("rpart", regex = FALSE)[[1]]
    

    然后您只需将额外选项添加到代码中。这个方法有点复杂,因为它处理了很多不同的情况,但这里是编辑:

    rpart_code$fit <- function(x, y, wts, param, lev, last, classProbs, ...) { 
      cpValue <- if(!last) param$cp else 0
      theDots <- list(...)
      if(any(names(theDots) == "control")) {
        theDots$control$cp <- cpValue
        theDots$control$xval <- 0 
        ctl <- theDots$control
        theDots$control <- NULL
      } else ctl <- rpart.control(cp = cpValue, xval = 0)   
    
      ## check to see if weights were passed in (and availible)
      if(!is.null(wts)) theDots$weights <- wts    
    
      modelArgs <- c(list(formula = as.formula(".outcome ~ ."),
                          data = if(is.data.frame(x)) x else as.data.frame(x),
                          control = ctl,
                          method = "anova"),
                     theDots)
      modelArgs$data$.outcome <- y
    
      out <- do.call("rpart", modelArgs)
    
      if(last) out <- prune.rpart(out, cp = param$cp)
      out           
    }
    

    然后测试:

    library(rpart)
    set.seed(445)
    mod <- train(pgstat ~ age + eet + g2 + grade + gleason + ploidy, 
                 data = stagec,
                 method = rpart_code,
                 tuneLength = 8)
    

    最大

    【讨论】:

      【解决方案2】:

      插入符号中的“方法”是指您要使用的模型类型,例如 rpart 或 lm(线性回归)或 rf(随机森林)。

      您所指的是插入符号中的“度量”。 如果您的 y 变量是连续变量,则该指标将默认设置为最大化 RMSE。所以你不需要做任何事情。

      您也可以通过以下方式明确指定:

      rpart_fit <- train(y ~ ., data = dt1, method = "rpart",trControl=fitControl, metric="RMSE")
      

      【讨论】:

        猜你喜欢
        • 2018-09-25
        • 2015-05-23
        • 2015-02-17
        • 2017-06-01
        • 2020-12-12
        • 1970-01-01
        • 2014-04-08
        • 2015-08-29
        • 2017-07-20
        相关资源
        最近更新 更多