знак вставки: разные RMSE для одних и тех же данных

Я думаю, что моя проблема довольно странная. Когда я использую метрику RMSE для выбора наилучшей модели с помощью функции train, я получаю другое значение RMSE, вычисленное моей собственной функцией для тех же данных. Где проблема? Моя функция работает неправильно?

library(caret)
library(car)
library(nnet)


data(oil)
ztest=fattyAcids[c(81:96),]

fit<-list(r1=c(1:80)) 
pred<-list(r1=c(81:96)) 
ctrl <- trainControl(method = "LGOCV",index=fit,indexOut=pred)



model <- train(Palmitic~Stearic+Oleic+Linoleic+Linolenic+Eicosanoic, 
               fattyAcids, 
               method='nnet', 
               linout=TRUE, 
               trace=F,
               maxit=10000,
               skip=F,
               metric="RMSE",

               tuneGrid=expand.grid(.size=c(10,11,12,9),.decay=c(0.005,0.001,0.01)),
               trControl = ctrl,
               preProcess = c("range"))
model
forecast <- predict(model, ztest)

Blad<-function(zmienna,prognoza){

  RMSE<-((sum((zmienna-prognoza)^2))/length(zmienna))^(1/2)

  estymatory <- c(RMSE)
  names(estymatory) <-c('RMSE') 
  estymatory
}
Blad(ztest$Palmitic,forecast)

person mismael    schedule 07.08.2014    source источник


Ответы (1)


Оценки после повторной выборки, показанные в выходных данных train, рассчитываются с использованием строк 81:96. После того, как train установит правильные настройки параметров настройки, он перенастраивается, используя все данные (1:96). Модель на основе этих данных используется для новых прогнозов.

По этой причине производительность модели

> getTrainPerf(model)
  TrainRMSE TrainRsquared method
1 0.9230175     0.8364212   nnet

хуже других прогнозов:

> Blad(ztest$Palmitic,forecast)
     RMSE 
0.3355387 

Прогнозы в forecast созданы на основе модели, включающей те же точки данных, поэтому она выглядит лучше.

Максимум

person topepo    schedule 08.08.2014
comment
кроме того, caret возвращает среднее значение RMSE для каждого CV (или разделения данных), поэтому существует усреднение модели, которое делает значения точности ниже лучших значений модели. Я прав? Можно увидеть отдельные значения, используя model$resample. - person jpcgandre; 13.09.2014