Caret 交叉验证中每个折叠的测试集和训练集

Posted

技术标签:

【中文标题】Caret 交叉验证中每个折叠的测试集和训练集【英文标题】:Test set and train set for each fold in Caret cross validation 【发布时间】:2018-04-03 05:29:50 【问题描述】:

我试图理解 Caret 包中的 5 折交叉验证算法,但我不知道如何为每个折获取训练集和测试集,我也无法从类似的建议问题中找到这一点。想象一下,如果我想通过随机森林方法进行交叉验证,我会执行以下操作:

set.seed(12)
train_control <- trainControl(method="cv", number=5,savePredictions = TRUE)
rfmodel <- train(Species~., data=iris, trControl=train_control, method="rf")
first_holdout <- subset(rfmodel$pred, Resample == "Fold1")
str(first_holdout)
'data.frame':   90 obs. of  5 variables:
$ pred    : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1     
$ obs     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 
$ rowIndex: int  2 3 9 11 25 29 35 36 41 50 ...
$ mtry    : num  2 2 2 2 2 2 2 2 2 2 ...
$ Resample: chr  "Fold1" "Fold1" "Fold1" "Fold1" ...

Fold1 中的这 90 个观察值是否用作训练集?如果是,那么此折叠的测试集在哪里?

【问题讨论】:

无需手动操作。检查str(rfModel) 您会在indexindexOut 中找到它,其中包含用于训练和坚持的样本行索引。 【参考方案1】:
 str(rfmodel)

执行的模型以以下形式存储所有内容。下面的control 存储了进入Train 的样本的索引以及indexindexOut 中的相应保留。

 names(rfmodel)
 #  [1] "method"       "modelInfo"    "modelType"    "results"      "pred"        
 #  [6] "bestTune"     "call"         "dots"         "metric"       "control"     
 # [11] "finalModel"   "preProcess"   "trainingData" "resample"     "resampledCM" 
 # [16] "perfNames"    "maximize"     "yLimits"      "times"        "levels"      
 # [21] "terms"        "coefnames"    "xlevels" 

训练和保持样本索引的路径

 # Indexes of Hold Out Sets
 rfmodel$control$indexOut

 # Indexes of Train Sets for above hold outs
 rfmodel$control$index

【讨论】:

感谢您的回答,所以 rfmodel$resample 中的准确度列表是对保留样本进行的每个折叠中的预测准确度? 是的。那是真实的。这些将是坚持预测的结果。 始终对您执行的模型执行str()names(),以查看它存储的方式和内容,以及我们如何从创建的模型或执行的预测中访问信息。因此,请利用这些功能来帮助您学习。

以上是关于Caret 交叉验证中每个折叠的测试集和训练集的主要内容,如果未能解决你的问题,请参考以下文章

在使用 k 折交叉验证训练训练数据后如何测试数据?

交叉验证

交叉验证

交叉验证(Cross Validation)原理小结

交叉验证(Cross Validation)原理小结

交叉验证iris数据集