【问题标题】:Hyperparameters tuning with Google Cloud ML Engine and XGBoost使用 Google Cloud ML Engine 和 XGBoost 调整超参数
【发布时间】:2019-03-10 19:09:23
【问题描述】:

我正在尝试复制link 报告的超参数调整示例,但我想在我的训练应用程序中使用 scikit learn XGBoost 而不是 tensorflow。

我可以在单个作业中针对每个超参数组合运行多个试验。但是,ML-Engine 返回的 Training 输出对象不包含 finalMetric 字段,报告指标信息(参见下图的差异)。

我从上面的链接示例中得到了什么: Training output object with Tensorflow training app

使用 XGBoost 运行我的 Training 应用程序得到的结果: Training output object with XGBoost training app

XGBoost 有没有办法将训练指标返回给 ML-Engine?

似乎这个过程对于 tensorflow 是自动化的,如文档中所述:

Cloud ML Engine 如何获取您的指标

您可能会注意到本文档中没有说明 用于将您的超参数指标传递给 Cloud ML Engine 训练 服务。那是因为该服务监控 TensorFlow 摘要事件 由您的训练应用程序生成并检索指标。

XGBoost 有类似的机制吗?

现在,我总是可以在每次试验结束时将每个指标结果转储到一个文件中,然后手动分析它们以选择最佳参数。但是,这样做是否会失去 Cloud ML Engine 提供的自动化机制,尤其是关于“ALGORITHM_UNSPECIFIED”超参数搜索算法?

即,

ALGORITHM_UNSPECIFIED:[...] 将贝叶斯优化应用于搜索 可能的超参数值的空间,导致最 对您的一组超参数有效的技术。

【问题讨论】:

    标签: scikit-learn google-cloud-platform xgboost google-cloud-ml


    【解决方案1】:

    谷歌的 Sara Robinson 整理了一篇关于如何做到这一点的好帖子。我不会反刍并声称它是我自己的,而是将其发布在此处以供遇到此帖子的其他人使用:

    https://sararobinson.dev/2019/09/12/hyperparameter-tuning-xgboost.html

    【讨论】:

      【解决方案2】:

      XGBoost 的超参数调整支持以不同的方式实现。我们创建了cloudml-hypertune python package 来帮助实现这一目标。我们仍在为此编写公共文档。同时,您可以参考这个staging sample了解如何使用它。

      【讨论】:

      • 谢谢,这个例子非常有用。只是一个小评论:cloudml-hypertune 包的“report_hyperparameter_tuning_metric”函数中的参数“global_step”的值在训练输出对象中报告,在“finalMetric”的标签“trainingStep”内。因此,传递模型的 best_ntree_limit 参数会更有用,以防使用提前停止(而不是像示例中那样始终分配值 1)。
      猜你喜欢
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      相关资源
      最近更新 更多