使用插入符号包

时间:2015-11-02 03:40:33

标签: r cross-validation r-caret rpart

首先我要说的是,我已经阅读了很多关于交叉验证的帖子,似乎有很多混乱。我对它的理解就是这样:

  1. 进行k倍交叉验证,即10倍,以了解10倍的平均误差。
  2. 如果可以接受,则在完整的数据集上训练模型。
  3. 我正在尝试使用R中的rpart构建决策树,并利用caret包。以下是我正在使用的代码。

    # load libraries
    library(caret)
    library(rpart)
    
    # define training control
    train_control<- trainControl(method="cv", number=10)
    
    # train the model 
    model<- train(resp~., data=mydat, trControl=train_control, method="rpart")
    
    # make predictions
    predictions<- predict(model,mydat)
    
    # append predictions
    mydat<- cbind(mydat,predictions)
    
    # summarize results
    confusionMatrix<- confusionMatrix(mydat$predictions,mydat$resp)
    

    我有一个关于插入符号列车应用的问题。我已经阅读了A Short Introduction to the caret Package列车部分,该部分在重新采样过程中表明确定了“最佳参数集”。

    在我的例子中,我是否正确编码了?我是否需要在代码中定义rpart参数或我的代码是否足够?

3 个答案:

答案 0 :(得分:17)

当你进行k折交叉验证时,你已经对每个样本进行了预测,只有10多种不同的模型(假设k = 10)。 没有必要对完整数据进行预测,因为您已经从k个不同模型中预测了它们。

您可以做的是:

train_control<- trainControl(method="cv", number=10, savePredictions = TRUE)

然后

model<- train(resp~., data=mydat, trControl=train_control, method="rpart")

如果你想以一种漂亮的格式看到观察和预测,你只需输入:

model$pred

同样对于你问题的第二部分,插入符应该处理所有参数。如果需要,您可以手动尝试调整参数。

答案 1 :(得分:4)

这里需要注意的重要事项是不要混淆模型选择和模型误差估计。

您可以使用交叉验证来估计模型超参数(例如正则化参数)。

通常用10倍交叉验证来完成,因为它是偏差 - 方差权衡的好选择(2倍可能导致具有高偏差的模型,留下一个cv可能会导致模型具有高差异/超过-配件)。

之后,如果您没有独立的测试集,您可以使用交叉验证来估计某些性能指标的经验分布:一旦找到最佳超参数,您可以使用它们来估计de cv错误。

请注意,在此步骤中,超参数是固定的,但可能模型参数在交叉验证模型中是不同的。

答案 2 :(得分:1)

在插入符号包short introduction document的第一页中,提到跨参数选择最佳模型。 作为一个起点,必须理解交叉验证是选择最佳建模方法而不是模型本身CV - Final model selection的过程。 Caret使用tuneGrid提供网格搜索选项,您可以在其中提供要测试的参数值列表。训练完成后,最终模型将具有优化参数。