计算r

时间:2016-03-10 11:43:45

标签: r machine-learning statistics

为了获得我预测的模型和真值的相对RMSE,我使用了代码

ratio<-prediction1/ISEtrain  

rRMSE1<-sqrt(mean((1-ratio)^2))

但我失败了,输出&#34; [1] Inf&#34;。我的代码出了什么问题?

谢谢!

4 个答案:

答案 0 :(得分:4)

您获得Inf,因为您除以零。

遵循维基百科对规范化RMSE(https://en.wikipedia.org/wiki/Root-mean-square_deviation)的定义,您可能想要:

sqrt( mean( (prediction1-ISEtrain)^2) ) / ( max(ISEtrain)-min(ISEtrain) )

答案 1 :(得分:1)

有两种获得相对RMSE(或标准化RMSE)的方法:

  1. 将RMSE除以观测值的标准偏差:

    sqrt(mean((prediction1 - ISEtrain)^2)) / sd(ISEtrain)
    
  2. 将RMSE除以观察值的最大值和最小值之间的差值(如David所述):

    sqrt(mean((prediction1 - ISEtrain)^2)) / diff(range(ISEtrain))
    
  3. 这两种方法都存在于"hydroGOF"包中并且执行完全相同但正确的函数名称是nrmse()而不是rmse(),如前所述。

    library("hydroGOF")
    
    nrmse(prediction1, ISEtrain, norm = "sd")
    nrmse(prediction1, ISEtrain, norm = "maxmin")
    

答案 2 :(得分:0)

如果您只想要RMSE,还可以使用hydroGOF包的内置函数,例如:

rmse(prediction1,ISEtrain, na.rm=TRUE)

此功能可以轻松处理设置na.rm=TRUE的NA或缺失值,有关详细信息,请参阅文档。

此外,包还包含其他有用的拟合优度函数,如NRMSE,MAE,GOF等。

答案 3 :(得分:0)

是的,但是hydroGOF包中的rmse计算与相对均方根误差不同,见下文:

RRMSE = (sqrt(sum(predicted-observed)^2))/ (number of observations * mean of observation)

HydroGOF中的rmse计算是

rmse = sqrt (mean((sim-obs)^2, na.rm=TRUE)

所以不幸的是,这些计算完全不同。

此时我还没有意识到包含此功能的软件包,因此可能需要创建自己的软件包。