使用caret软件包应用k-fold交叉验证模型

使用caret软件包应用k-fold交叉验证模型,r,cross-validation,r-caret,rpart,R,Cross Validation,R Caret,Rpart,首先,我要说的是,我已经阅读了很多关于交叉验证的帖子,似乎有很多困惑。我的理解是,这很简单: 执行k倍交叉验证,即10倍,以了解10倍的平均误差 如果可以接受,则在完整的数据集上训练模型 我正在尝试使用R中的rpart并利用caret包构建决策树。下面是我正在使用的代码 # load libraries library(caret) library(rpart) # define training control train_control<- trainControl(method="

首先,我要说的是,我已经阅读了很多关于交叉验证的帖子,似乎有很多困惑。我的理解是,这很简单:

  • 执行k倍交叉验证,即10倍,以了解10倍的平均误差
  • 如果可以接受,则在完整的数据集上训练模型
  • 我正在尝试使用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)
    
    #加载库
    图书馆(插入符号)
    图书馆(rpart)
    #定义培训控制
    
    训练控制当你进行k倍交叉验证时,你已经对每个样本进行了预测,刚好超过10个不同的模型(假设k=10)。 没有必要对完整的数据进行预测,因为您已经从k个不同的模型中得到了他们的预测

    您可以执行以下操作:

    train_control<- trainControl(method="cv", number=10, savePredictions = TRUE)
    
    同样对于问题的第二部分,插入符号应该处理所有参数。如果需要,您可以手动尝试调整参数。

    在for-caret包的第一页中,提到了跨参数选择最佳模型。
    首先,必须了解交叉验证是选择最佳建模方法的过程,而不是模型本身。插入符号使用
    tuneGrid
    提供网格搜索选项,您可以在其中提供要测试的参数值列表。训练完成后,最终模型将具有优化的参数。

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

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

    通常这是通过10倍交叉验证完成的,因为这是偏差-方差权衡的好选择(2倍可能导致模型具有高偏差,忽略一倍cv可能导致模型具有高方差/过度拟合)

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

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

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