1

我有一个scikit-learn模型,我可以GCP使用AI Platform training. 我还想使用AI Platform training. 这是可能的,只需要传递带有参数及其范围的 YAML:

params:
- parameterName: max_df
  type: DOUBLE
  minValue: 0.0
  maxValue: 1.0
  scaleType: UNIT_LINEAR_SCALE
- parameterName: min_df
  type: DOUBLE
  minValue: 0
  maxValue: 1.
  scaleType: UNIT_LINEAR_SCALE

这里的问题是两个参数之间存在一些依赖关系:min_df<max_df. 如果不是这种情况scikit-learn,将按预期失败。

在 YAML 中似乎不可能表达这种依赖关系。

我可以调整失败的试验次数,但如果我不走运并且我的第一份工作,df_min>df_max那么超参数调整的整个过程将停止。这似乎不是一个有效的选择。 链接文档

我可以在我的 python 代码中控制它并确保df_min<df_max我应该返回到代码中进行超参数调整(我猜是使用贝叶斯优化),以便它了解这种参数选择是无效的?

# this is for hyperparameter tuning
    hpt = hypertune.HyperTune()
    hpt.report_hyperparameter_tuning_metric(
        hyperparameter_metric_tag='accuracy',
        metric_value=accuracy,
        global_step=0)

只是返回 0.0 的精度就足够了吗?或者我应该返回None还是NaN?我没有找到关于这个主题的任何文档。

额外问题:当我使用 YAML 时,我只能传递字符串,而不能像 None 或 NULL link doc

- parameterName: FT_norm
      type: CATEGORICAL
      categoricalValues: ['l1', 'l2', 'None']

在将值传递给模型之前,我需要直接在 python 代码中转换'None'为。None有没有更好的方法来处理这种情况?(我正在使用 gcloud cli)例如使用 GCP python 客户端库?

4

1 回答 1

1

最后,我实现了我上面描述的想法,当给 sciki-learn 的参数不正确时(比如我们有 ),返回一个 0.0 的度量(在我的测试中是准确的df_min>df_max)。

正如您在下面看到的,在无效超参数的情况下返回值 0.0 时没有报告应计:示例

还发现代码只接受浮点数或字符串作为度量的输入,如下所示,但我没有找到更多详细解释这一点的文档:

File "/root/.local/lib/python3.5/site-packages/hypertune/hypertune.py", line 62, in report_hyperparameter_tuning_metric
    metric_value = float(metric_value)
TypeError: float() argument must be a string or a number, not 'NoneType'

我确信这不是 100% 正确的,但似乎可以按预期工作。

于 2019-12-18T14:13:24.523 回答