簡體   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