网格搜索中的H2OResponseError获取网格排序

时间:2018-08-07 21:07:58

标签: python h2o grid-search

我跑步时:

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中的示例,我相信我使用的方法正确。

编辑:将更改的目标数组添加为整数数组中的因子数组。

2 个答案:

答案 0 :(得分:1)

  

错误:为sort_by指定了无效的参数。必须为以下之一:[mae,residual_deviance,r2,mean_residual_deviance,rmsle,rmse,mse]

问题是"auc"不是解决您问题的有效指标。看来您已经训练了回归模型而不是二进制分类模型,这就是为什么不允许AUC的原因。错误消息中的指标列表是回归问题允许的指标列表。

如果您的响应列为0和1,并且您没有将其转换为因子,则它将训练回归模型而不是二进制分类模型。如果是这种情况,而您想要一个二进制分类模型,那么您要做的就是首先将响应转换为一个因子:

train[target] = train[target].asfactor()

答案 1 :(得分:1)

这个特定问题询问如何针对多类分类问题获得AUC(即目标具有两个以上的因子水平-请参阅原始问题的注释中的张贴图像)。 H2O不会为单个类别计算auc,因此,如果您尝试使用其二进制分类指标auc(),则会返回错误。

要查看适用于多类分类问题的指标,请参见documentation

例如,选项包括:logloss()mean_per_class_error()