[英]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.