我想,我的问题很奇怪。当我使用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)
答案 0 :(得分:2)
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
中的预测是从包含相同数据点的模型创建的,这就是它看起来更好的原因。
最大