首页 文章

使用插入包应用k折交叉验证模型

提问于
浏览
6

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

  • 执行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)

我有一个关于插入火车应用的问题 . 我已阅读A Short Introduction to the caret Package列车部分,其中说明在重新采样过程中确定了"optimal parameter set" .

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

3 回答

  • 1

    当你进行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
    

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

  • 3

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

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

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

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

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

  • 15

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

相关问题