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

pma*_*971 9 r cross-validation rpart r-caret

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

  1. 执行k倍交叉验证,即10倍,以了解10倍的平均误差.
  2. 如果可接受,则在完整数据集上训练模型.

我正在尝试使用rpartR 构建一个决策树并利用该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)
Run Code Online (Sandbox Code Playgroud)

我有一个关于插入火车应用的问题.我已经阅读了插入符号列表部分的简短介绍,其中说明了在重新采样过程中确定了"最佳参数集".

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

zac*_*dav 18

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

你能做的是以下几点:

train_control<- trainControl(method="cv", number=10, savePredictions = TRUE)
Run Code Online (Sandbox Code Playgroud)

然后

model<- train(resp~., data=mydat, trControl=train_control, method="rpart")
Run Code Online (Sandbox Code Playgroud)

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

model$pred
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你得到 10 个不同的模型,每次折叠一个,你如何从它们中得到最终的整体模型?全部平均? (2认同)

jor*_*sso 5

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

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

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

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

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