h2o AutoML 与 h2o XGBoost - 模型指标
h2o AutoML vs h2o XGBoost - model metrics
我的数据集相当小:15 列,3500 行,我一直看到 h2o 中的 xgboost 训练的模型比 h2o AutoML 更好。我正在使用 H2O 3.26.0.2 和 Flow UI.
H2O XGBoost 在几秒钟内完成,而 AutoML 需要多长时间(20 分钟)并且总是给我带来更差的性能。
我承认数据集可能并不完美,但我希望带有网格搜索的 AutoML 与 h2o XGBoost 一样好(或更好)。我的想法是 AutoML 将训练多个 XGBoost 模型并对超参数进行网格搜索,所以它应该是相似的,对吧?
对于 AutoML 和 XGBoost,我使用相同的训练数据集和相同的响应列。
使用 XGBoost 进行 运行 实验的代码是:
import h2o
from h2o.estimators.xgboost import H2OXGBoostEstimator
h2o_frame = h2o.import_file(path="myFile.csv")
feature_columns = h2o_frame.columns
label_column = "responseColumn"
feature_columns.remove(label_column)
xgb = H2OXGBoostEstimator(nfolds=10, seed=1)
xgb.train(x=feature_columns, y=label_column, training_frame=h2o_frame)
# now export metrics to file
MRD = xgb.mean_residual_deviance()
RMSE= xgb.rmse()
MSE= xgb.mse()
MAE= xgb.mae()
RMSLE= xgb.rmsle()
header = ['model','mean_residual_deviance','rmse','mse','mae','rmsle']
with open('metrics.out', mode='w') as result_file:
writer = csv.writer(result_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
writer.writerow(header)
writer.writerow(['H2O_XGBoost', MRD, RMSE, MSE, MAE, RMSLE])
使用 AutoML 进行 运行 实验的代码是:
import h2o
from h2o.automl import H2OAutoML
h2o_frame = h2o.import_file(path="myFile.csv")
feature_columns = h2o_frame.columns
label_column = "responseColumn"
feature_columns.remove(label_column)
aml = H2OAutoML(seed=1, nfolds=10, exclude_algos=["StackedEnsemble"], max_models=20)
aml.train(x=feature_columns, y=label_column, training_frame=h2o_frame)
# now export metrics to file
h2o.export_file(aml.leaderboard, "metrics.out", force = True, parts = 1)
尝试使用不同的 nfold,更多 AutoML 模型,增加早期停止轮数。我尝试从 AutoML 中排除所有算法(XGBoost 除外),但我仍然得到相同的结果。
结果差异如下:
H2O XGBoost:
model xgboost-5a8f9766-940c-4e5c-b57d-62b186f4c058
model_checksum 7409831159060775248
frame train_set_v01.hex
frame_checksum 6864971999838167226
description ·
model_category Regression
scoring_time 1566296468447
predictions ·
MSE 252.265021
RMSE 15.882853
nobs 3476
custom_metric_name ·
custom_metric_value 0
r2 0.726871
mean_residual_deviance 252.265021
mae 10.709369
rmsle NaN
xgboost-5a8f9766-940c-4e5c-b57d-62b186f4c058 的 XGBoost 本机参数:
name value
silent true
eta 0.3
colsample_bylevel 1
objective reg:linear
min_child_weight 1
nthread 8
seed -1058380797
max_depth 6
colsample_bytree 1
lambda 1
gamma 0
alpha 0
booster gbtree
grow_policy depthwise
nround 50
subsample 1
max_delta_step 0
tree_method auto
H2O AutoML(获奖模型):
model StackedEnsemble_AllModels_AutoML_20190819_235446
model_checksum -6727284429527535576
frame automl_training_train_set_v01.hex
frame_checksum 6864971999838167226
description ·
model_category Regression
scoring_time 1566256209073
predictions ·
MSE 332.146239
RMSE 18.224880
nobs 3476
custom_metric_name ·
custom_metric_value 0
r2 0.640383
mean_residual_deviance 332.146239
mae 12.927023
rmsle 1.225650
residual_deviance 1154540.326762
null_deviance 3210476.302359
AIC 30070.640602
null_degrees_of_freedom 3475
residual_degrees_of_freedom 3464
来自同一 AutoML 的评分最高的 XGBoost 模型(排行榜第三):
model XGBoost_grid_1_AutoML_20190819_235446_model_5
model_checksum 8047828446507408480
frame automl_training_train_set_v01.hex
frame_checksum 6864971999838167226
description ·
model_category Regression
scoring_time 1566255442068
predictions ·
MSE 616.910151
RMSE 24.837676
nobs 3476
custom_metric_name ·
custom_metric_value 0
r2 0.332068
mean_residual_deviance 616.910151
mae 17.442629
rmsle 1.325149
XGBoost 本机参数(AutoML 中的 XGBoost_grid_1_AutoML_20190819_235446_model_5):
name value
silent true
normalize_type tree
eta 0.05
objective reg:linear
colsample_bylevel 0.8
nthread 8
seed 940795529
min_child_weight 15
rate_drop 0
one_drop 0
sample_type uniform
max_depth 20
colsample_bytree 1
lambda 100
gamma 0
alpha 0.1
booster dart
grow_policy depthwise
skip_drop 0
nround 120
subsample 0.8
max_delta_step 0
tree_method auto
这里的问题是您正在将 XGBoost 的 训练指标 与 AutoML 模型的 CV 指标 进行比较。
您为手动 XGBoost 模型发布的代码提供了训练指标。相反,如果您想与 AutoML 中模型的性能进行公平比较,则需要获取 CV 指标(AutoML 排行榜默认报告 CV 指标,这就是您在代码中报告的内容)。
改变这个:
# now export metrics to file
MRD = xgb.mean_residual_deviance()
RMSE= xgb.rmse()
MSE= xgb.mse()
MAE= xgb.mae()
RMSLE= xgb.rmsle()
收件人:
# now export metrics to file
MRD = xgb.mean_residual_deviance(xval=True)
RMSE= xgb.rmse(xval=True)
MSE= xgb.mse(xval=True)
MAE= xgb.mae(xval=True)
RMSLE= xgb.rmsle(xval=True)
指标的描述及其 return 在 Python module docs 中。
进行此更改后,您应该会看到问题已解决,并且手动 XGBoost 模型和 AutoML 模型的性能相当。
我的数据集相当小:15 列,3500 行,我一直看到 h2o 中的 xgboost 训练的模型比 h2o AutoML 更好。我正在使用 H2O 3.26.0.2 和 Flow UI.
H2O XGBoost 在几秒钟内完成,而 AutoML 需要多长时间(20 分钟)并且总是给我带来更差的性能。
我承认数据集可能并不完美,但我希望带有网格搜索的 AutoML 与 h2o XGBoost 一样好(或更好)。我的想法是 AutoML 将训练多个 XGBoost 模型并对超参数进行网格搜索,所以它应该是相似的,对吧?
对于 AutoML 和 XGBoost,我使用相同的训练数据集和相同的响应列。
使用 XGBoost 进行 运行 实验的代码是:
import h2o
from h2o.estimators.xgboost import H2OXGBoostEstimator
h2o_frame = h2o.import_file(path="myFile.csv")
feature_columns = h2o_frame.columns
label_column = "responseColumn"
feature_columns.remove(label_column)
xgb = H2OXGBoostEstimator(nfolds=10, seed=1)
xgb.train(x=feature_columns, y=label_column, training_frame=h2o_frame)
# now export metrics to file
MRD = xgb.mean_residual_deviance()
RMSE= xgb.rmse()
MSE= xgb.mse()
MAE= xgb.mae()
RMSLE= xgb.rmsle()
header = ['model','mean_residual_deviance','rmse','mse','mae','rmsle']
with open('metrics.out', mode='w') as result_file:
writer = csv.writer(result_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
writer.writerow(header)
writer.writerow(['H2O_XGBoost', MRD, RMSE, MSE, MAE, RMSLE])
使用 AutoML 进行 运行 实验的代码是:
import h2o
from h2o.automl import H2OAutoML
h2o_frame = h2o.import_file(path="myFile.csv")
feature_columns = h2o_frame.columns
label_column = "responseColumn"
feature_columns.remove(label_column)
aml = H2OAutoML(seed=1, nfolds=10, exclude_algos=["StackedEnsemble"], max_models=20)
aml.train(x=feature_columns, y=label_column, training_frame=h2o_frame)
# now export metrics to file
h2o.export_file(aml.leaderboard, "metrics.out", force = True, parts = 1)
尝试使用不同的 nfold,更多 AutoML 模型,增加早期停止轮数。我尝试从 AutoML 中排除所有算法(XGBoost 除外),但我仍然得到相同的结果。
结果差异如下:
H2O XGBoost:
model xgboost-5a8f9766-940c-4e5c-b57d-62b186f4c058
model_checksum 7409831159060775248
frame train_set_v01.hex
frame_checksum 6864971999838167226
description ·
model_category Regression
scoring_time 1566296468447
predictions ·
MSE 252.265021
RMSE 15.882853
nobs 3476
custom_metric_name ·
custom_metric_value 0
r2 0.726871
mean_residual_deviance 252.265021
mae 10.709369
rmsle NaN
xgboost-5a8f9766-940c-4e5c-b57d-62b186f4c058 的 XGBoost 本机参数:
name value
silent true
eta 0.3
colsample_bylevel 1
objective reg:linear
min_child_weight 1
nthread 8
seed -1058380797
max_depth 6
colsample_bytree 1
lambda 1
gamma 0
alpha 0
booster gbtree
grow_policy depthwise
nround 50
subsample 1
max_delta_step 0
tree_method auto
H2O AutoML(获奖模型):
model StackedEnsemble_AllModels_AutoML_20190819_235446
model_checksum -6727284429527535576
frame automl_training_train_set_v01.hex
frame_checksum 6864971999838167226
description ·
model_category Regression
scoring_time 1566256209073
predictions ·
MSE 332.146239
RMSE 18.224880
nobs 3476
custom_metric_name ·
custom_metric_value 0
r2 0.640383
mean_residual_deviance 332.146239
mae 12.927023
rmsle 1.225650
residual_deviance 1154540.326762
null_deviance 3210476.302359
AIC 30070.640602
null_degrees_of_freedom 3475
residual_degrees_of_freedom 3464
来自同一 AutoML 的评分最高的 XGBoost 模型(排行榜第三):
model XGBoost_grid_1_AutoML_20190819_235446_model_5
model_checksum 8047828446507408480
frame automl_training_train_set_v01.hex
frame_checksum 6864971999838167226
description ·
model_category Regression
scoring_time 1566255442068
predictions ·
MSE 616.910151
RMSE 24.837676
nobs 3476
custom_metric_name ·
custom_metric_value 0
r2 0.332068
mean_residual_deviance 616.910151
mae 17.442629
rmsle 1.325149
XGBoost 本机参数(AutoML 中的 XGBoost_grid_1_AutoML_20190819_235446_model_5):
name value
silent true
normalize_type tree
eta 0.05
objective reg:linear
colsample_bylevel 0.8
nthread 8
seed 940795529
min_child_weight 15
rate_drop 0
one_drop 0
sample_type uniform
max_depth 20
colsample_bytree 1
lambda 100
gamma 0
alpha 0.1
booster dart
grow_policy depthwise
skip_drop 0
nround 120
subsample 0.8
max_delta_step 0
tree_method auto
这里的问题是您正在将 XGBoost 的 训练指标 与 AutoML 模型的 CV 指标 进行比较。
您为手动 XGBoost 模型发布的代码提供了训练指标。相反,如果您想与 AutoML 中模型的性能进行公平比较,则需要获取 CV 指标(AutoML 排行榜默认报告 CV 指标,这就是您在代码中报告的内容)。
改变这个:
# now export metrics to file
MRD = xgb.mean_residual_deviance()
RMSE= xgb.rmse()
MSE= xgb.mse()
MAE= xgb.mae()
RMSLE= xgb.rmsle()
收件人:
# now export metrics to file
MRD = xgb.mean_residual_deviance(xval=True)
RMSE= xgb.rmse(xval=True)
MSE= xgb.mse(xval=True)
MAE= xgb.mae(xval=True)
RMSLE= xgb.rmsle(xval=True)
指标的描述及其 return 在 Python module docs 中。
进行此更改后,您应该会看到问题已解决,并且手动 XGBoost 模型和 AutoML 模型的性能相当。