使用indexOut设置插入符号和自定义验证会产生奇怪的结果

时间:2017-04-04 18:16:21

标签: r validation r-caret

Caret允许您使用选项indexindexOut设置自定义培训和验证集,但是当获得的模型应用于验证集并测量其性能时,这非常与模型本身提供的不同:

library(caret)
library(Metrics)

set.seed(123)
index_on <- 1:16
index_out <- 17:32
fit <- train(mpg~wt+qsec,
             mtcars,
             method = "glm", 
             metric = "RMSE",
             trControl = trainControl(method="cv", 
                                      index = list(index_on), 
                                      indexOut = list(index_out))
             ) 
fit$results$RMSE
rmse(mtcars[index_out, "mpg"], predict(fit, mtcars[index_out,])) 

正如您所看到的,当从火车对象获得或直接使用预测计算时,这会产生不同的性能值:

[1] 3.612743

[1] 3.079445

这是一个错误吗?我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

我一直在调查,看起来内部列车计算正确的预期模型并使用该模型计算性能,但它返回不同的模型。它返回一个获得的训练所有数据(不仅是&#34;索引&#34;数据)。

您可以使用以下代码查看:

group by

产生:

[1] 3.079445

我使用的是最新的当前插入符号版本(目前为caret_6.0-75)。 很明显,这是一个但是当我发现它已经是一个开放的bug时我会报告它:

https://github.com/topepo/caret/issues/348