Caret和rpart - definining方法

时间:2015-05-20 18:04:54

标签: r tree r-caret rpart

我正在尝试熟悉插入符号包。我之前会直接使用rpart - 例如使用以下语法

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

我指定了anova,因为我的目标是回归(而非分类)

with caret - 我将使用以下语法:

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

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

非常感谢提前!

2 个答案:

答案 0 :(得分: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)

最高

答案 1 :(得分:0)

在插入方法&#39;是指您想要使用的模型类型,例如rpart或lm(线性回归)或rf(随机森林)。

您所指的内容定义为&#39; metric&#39;在插入符号中。 如果您的y变量是连续变量,则度量标准将默认设置为最大化RMSE。所以你不必做任何事情。

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

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