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