网格搜索中的 H2OResponseError 获取网格排序
H2OResponseError in Grid Search Get Grid Sorting
当我运行:
data_h = h2o.H2OFrame(data)
### Edit: added asfactor() below to change integer target array.
data_h["BPA"] = data_h["BPA"].asfactor()
train, valid = data_h.split_frame(ratios=[.7], seed = 1234)
features = ["bq_packaging_consumepkg", "bq_packaging_microwave_v3", "bq_packaging_plasticbottle_v2",
"bq_packaging_hotdrink_v3", "bq_packaging_microwsaran_v3","bq_food_cannedfoods_v2"]
target = "BPA"
# Hyperparameter tuning
params = {"ntrees": [50, 100, 200, 300, 400, 500, 600],
"max_depth": [10, 30, 50, 70, 90, 110],
"min_rows": [1,5,10,15,20,25]}
criteria = {"strategy": "RandomDiscrete",
"stopping_rounds": 10,
"stopping_tolerance": 0.00001,
"stopping_metric": "misclassification"}
# Grid search and Training
grid_search = H2OGridSearch(model= rf_h, hyper_params= params,
search_criteria = criteria)
grid_search.train(x = features, y = target, training_frame=train,
validation_frame = valid)
# Sorting the grid
sorted_grid = grid_search.get_grid(sort_by='auc', decreasing = True)
调用 grid_search.get_grid(sort_by = 'auc', decreasing = True)
产生以下错误:
H2OResponseError: Server error water.exceptions.H2OIllegalArgumentException:
Error: Invalid argument for sort_by specified. Must be one of: [mae, residual_deviance, r2, mean_residual_deviance, rmsle, rmse, mse]
Request: GET /99/Grids/Grid_DRF_py_29_sid_95b5_model_python_1533334963198_8
params: {'sort_by': 'auc', 'decreasing': 'True'}
查看 documentation for the grid search 中的示例,我相信我使用的方法是正确的。
编辑:添加了将目标数组更改为整数数组的因子数组。
Error: Invalid argument for sort_by specified. Must be one of: [mae, residual_deviance, r2, mean_residual_deviance, rmsle, rmse, mse]
问题是 "auc"
不是您问题的有效指标。看起来您训练的是回归模型而不是二元分类模型,这就是不允许 AUC 的原因。错误消息中的指标列表是回归问题允许的指标列表。
如果您的响应列是 0 和 1,并且您没有将其转换为因子,那么它将训练回归模型而不是二元分类模型。如果是这种情况,而你想要一个二元分类模型,那么你需要做的就是首先将响应转换为一个因子:
train[target] = train[target].asfactor()
这个特定问题询问如何获得多类分类问题的 AUC(即目标具有两个以上的因子水平 - 请参阅原始问题评论中的张贴图片)。 H2O 不会计算单个类别的 auc,因此如果您尝试使用其二元分类指标 auc()
.
,将会 return 出错
要查看可用于多类分类问题的指标,请参阅 documentation
选项包括,例如:logloss()
和 mean_per_class_error()
当我运行:
data_h = h2o.H2OFrame(data)
### Edit: added asfactor() below to change integer target array.
data_h["BPA"] = data_h["BPA"].asfactor()
train, valid = data_h.split_frame(ratios=[.7], seed = 1234)
features = ["bq_packaging_consumepkg", "bq_packaging_microwave_v3", "bq_packaging_plasticbottle_v2",
"bq_packaging_hotdrink_v3", "bq_packaging_microwsaran_v3","bq_food_cannedfoods_v2"]
target = "BPA"
# Hyperparameter tuning
params = {"ntrees": [50, 100, 200, 300, 400, 500, 600],
"max_depth": [10, 30, 50, 70, 90, 110],
"min_rows": [1,5,10,15,20,25]}
criteria = {"strategy": "RandomDiscrete",
"stopping_rounds": 10,
"stopping_tolerance": 0.00001,
"stopping_metric": "misclassification"}
# Grid search and Training
grid_search = H2OGridSearch(model= rf_h, hyper_params= params,
search_criteria = criteria)
grid_search.train(x = features, y = target, training_frame=train,
validation_frame = valid)
# Sorting the grid
sorted_grid = grid_search.get_grid(sort_by='auc', decreasing = True)
调用 grid_search.get_grid(sort_by = 'auc', decreasing = True)
产生以下错误:
H2OResponseError: Server error water.exceptions.H2OIllegalArgumentException:
Error: Invalid argument for sort_by specified. Must be one of: [mae, residual_deviance, r2, mean_residual_deviance, rmsle, rmse, mse]
Request: GET /99/Grids/Grid_DRF_py_29_sid_95b5_model_python_1533334963198_8
params: {'sort_by': 'auc', 'decreasing': 'True'}
查看 documentation for the grid search 中的示例,我相信我使用的方法是正确的。
编辑:添加了将目标数组更改为整数数组的因子数组。
Error: Invalid argument for sort_by specified. Must be one of: [mae, residual_deviance, r2, mean_residual_deviance, rmsle, rmse, mse]
问题是 "auc"
不是您问题的有效指标。看起来您训练的是回归模型而不是二元分类模型,这就是不允许 AUC 的原因。错误消息中的指标列表是回归问题允许的指标列表。
如果您的响应列是 0 和 1,并且您没有将其转换为因子,那么它将训练回归模型而不是二元分类模型。如果是这种情况,而你想要一个二元分类模型,那么你需要做的就是首先将响应转换为一个因子:
train[target] = train[target].asfactor()
这个特定问题询问如何获得多类分类问题的 AUC(即目标具有两个以上的因子水平 - 请参阅原始问题评论中的张贴图片)。 H2O 不会计算单个类别的 auc,因此如果您尝试使用其二元分类指标 auc()
.
要查看可用于多类分类问题的指标,请参阅 documentation
选项包括,例如:logloss()
和 mean_per_class_error()