2017-04-04 18 views
2

插入符允許您在列車中設置自定義訓練和驗證集,其選項爲indexindexOut,但是當獲取的模型應用於驗證集並對其性能進行測量時,是非常不同的由模型本身提供:使用indexOut設計的插入符和自定義驗證會產生奇怪的結果

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

我一直在調查,它看起來像內部培訓計算正確的預期模型,並計算與該模型的性能,但它返回一個不同的模型。它返回一個是獲得的所有數據的訓練(不僅是「索引」數據)。

你可以看到,這段代碼:

set.seed(123) 
fit_3 <- train(mpg~wt+qsec, 
      data=mtcars, 
      method = "glm", 
      metric = "RMSE", 
      trControl = trainControl(method="none") 
) 

rmse(mtcars[index_out, "mpg"], predict(fit_3, mtcars[index_out,])) 

主要生產:

[1] 3.079445

我用最後的當前插入符版本(caret_6.0-75在此時此刻)。 這是很清楚,這是一個,但我正要彙報時,我發現它是一個開放的bug已經:

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

相關問題