【问题标题】:caret: different RMSE on the same data插入符号:相同数据上的不同 RMSE
【发布时间】:2015-01-11 13:56:34
【问题描述】:

我认为,我的问题很奇怪。当我使用 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)

【问题讨论】:

    标签: r r-caret


    【解决方案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 中的预测是根据包含相同数据点的模型创建的,这就是它看起来更好的原因。

    最大

    【讨论】:

    • 另外,caret 返回每​​个 CV(或数据拆分)的平均 RMSE,因此存在模型平均,这使得准确度值低于最佳模型值。我对吗?可以使用model$resample 查看各个值。
    猜你喜欢
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多