2015-11-02 76 views
6

让我首先说我已经阅读了很多有关交叉验证的文章,看起来有很多困惑。我的理解仅仅是这样的:使用插入符号包应用k-fold交叉验证模型

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

我正在尝试使用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参数或者我的代码是否足够?

回答

15

当您执行k-fold交叉验证时,您已经对每个样本进行了预测,只是超过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

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

3

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

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

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

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

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