r caret finalModel参数/预测与多个模型的重复cv中的预处理

时间:2017-08-03 21:26:21

标签: r parameters prediction r-caret

我对如何在插入符号模型调整后预测新数据感到困惑。首先听起来很容易;只是调整一个模型并使用模型$ finalModel,但是有一些问题。

  

5.5.1预处理选项

     

这些处理步骤将在任何预测期间应用   使用predict.train,extractPrediction或extractProbs生成(参见   本文后面的详细信息)。预处理不会   应用于直接使用对象$ finalModel对象的预测link

你可以在这里阅读(它是包的创建者)

  

换句话说,在运行randomForest之前,您要求的任何预处理都是在训练集中完成的。它还对您预测的任何数据应用了相同的预处理(使用预测(RFFit,testSet))。 如果您使用finalModel 对象,则在预测之前使用predict.randomForest而不是predict.train和没有预处理link

接下来

  

首先,几乎从不使用$ finalModel对象进行预测。使用predict.train。这是原因的一个很好的例子。

     

某些函数(包括randomForest和train)如何处理虚拟变量之间存在一些不一致。 R中使用公式方法的大多数函数会将因子预测变量转换为虚拟变量,因为它们的模型需要数据的数字表示。对此的例外是基于树和规则的模型(可以分类为分类预测变量),朴素贝叶斯和其他一些模型。 link

在以下example see "2. Create A Standalone Model"(无预处理)中,您可以看到我们如何解决这个问题,他构建了一个全新的“独立模型”,并用于预测。在这里再次添加预处理很容易。

....
# create standalone model using all training data
set.seed(7)
finalModel <- randomForest(Class~., training, mtry=2, ntree=2000)
# make a predictions on "new data" using the final model
final_predictions <- predict(finalModel, validation[,1:60])
confusionMatrix(final_predictions, validation$Class)

但我不想每次都更改我的代码或手动从对象$ finalModel中提取和插入参数,这就是我使用插入符号的原因吗?

我想使用对象$ finalModel或至少提取其参数网格,BUT用于多个模型(即gbm,knn,...)

::: linux-gnu R version 3.4.1(2017-06-30)::: Single Candle :::

r_get_best <- function(.mth="gbm") {

    library(caret)
    library(mlbench)
    library(randomForest)

    data(Sonar)
    idx <- createDataPartition(Sonar$Class,p=0.80,list=F)
    trn <- Sonar[idx,]
    tst <- Sonar[-idx,]

    # settings
    prp <- c("center","scale")
    tcl <- trainControl(method="repeatedcv",number=3,repeats=3,preProcOptions=prp,verboseIter=F)

    # train model(.mth)
    set.seed(7)
    fit <- train(Class~.,data=trn,method=.mth,metric="Accuracy",preProcess=prp,trControl=tcl)
    print(fit)
    print("")
    print("----- final model -----")
    print(fit$finalModel)

    # i can get the result, but this way i have to construct a new grid + re-train a new final model
    frs <- fit$results[which.max(fit$results[,fit$metric]),]
    print("")
    print("----- final model extracted -----")
    print(frs)

    # use fit$finalModel OR fit$bestTune ???
    fml <- NULL # ??????????

    # make test prediction on UNSEEN tst data using the final model
    # prd <- predict(fml,tst[,-ncol(tst)])

    # check the quality
    # cfm <- confusionMatrix(prd,tst$Class)
    # print("")
    # print(cfm)

    return(fml)

}

> r_get_best("gbm")

我不能使用predict(model $ finalModel)。我也不能使用predict.train(),因为我正在使用公式接口+预处理。

所以问题是,我怎样才能使用对象$ finalModel或者为多个方法提取其参数设置=“gbm,knn,rf,...”来预测新的(看不见的)数据,即使我正在使用公式界面+预处理+可能之前的交叉验证?

或者它是使用非公式界面的最佳方式吗?

对我感到羞耻,问题的一部分已经解决:     用于模型的最终值是n.trees = 150,     interaction.depth = 2,shrinkage = 0.1和n.minobsinnode = 10.

> Tuned Parameters can be accessed through model$bestTune

 n.trees interaction.depth shrinkage n.minobsinnode
 150               2         0.1             10

但这是要走的路,创建一个新模型并再次对所有数据进行训练吗?

0 个答案:

没有答案