繁体   English   中英

H2O 的 RMSE 性能报告不一致

[英]H2O's RMSE performance report not consistent

我想知道为什么h2o.performance报告与测试数据上rmse的标准定义不同。 h2o的业绩报告似乎夸大了。

下面是一个代表。


iris_h2o = as.h2o(iris)
parts = h2o.splitFrame(iris_h2o, ratios = c(0.5,0.25), seed = 1)
train = parts[[1]]
valid = parts[[2]]
test = parts[[3]]

x = c('Sepal.Width','Petal.Length','Petal.Width')
y = 'Sepal.Length'
auto_gbm = h2o.automl(x= x,
                      y= y,
                      training_frame = train,
                      validation_frame = valid,
                      nfolds = 0,
                      include_algos = c('GBM'),
                      max_models = 5,
                      seed = 1
                      )
best_gbm = h2o.get_best_model(auto_gbm)
 
h2o.performance(best_gbm, test)

以上性能结果为

H2ORegressionMetrics: gbm

MSE:  0.1152907
RMSE:  0.3395449
MAE:  0.2675279
RMSLE:  0.04744378
Mean Residual Deviance :  0.1152907

但是,当我在测试数据集上生成预测并手动计算RMSE时,值差异很大。

rmse = function(y, y_predict){
  N = length(y)
  RMSE = sqrt(sum((y-y_predict)^2,na.rm=T)/N)
  return(RMSE)
}

test['predicted'] = h2o.predict(best_gbm, test)

rmse(test['Sepal.Length'], test['predicted'])

[1] 1.890506

H2O 的 RMSE 性能报告:0.33

手动计算 RMSE:1.89

这是5倍以上。 为什么我会看到这种不一致?

H2O cluster version:        3.36.1.4 

您的 rmse function 有错误。 length(y)的返回并没有返回您认为的返回值。 您应该使用nrow来获取行数。 您可以使用length(test['Sepal.Length'])进行检查,它将返回 1 而不是 31 如您所期望的。 你的 function 应该是这样的:

rmse = function(y, y_predict){
  N = nrow(y)
  RMSE = sqrt(sum((y-y_predict)^2,na.rm=T)/N)
  return(RMSE)
}

rmse(test['Sepal.Length'], test['predicted'])
[1] 0.3395448

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM