使用超参数调节来提高模型性能


本教程介绍如何通过指定 NUM_TRIALS 训练选项来启用一组模型训练试验,从而在 BigQuery ML 中使用超参数调节

在本教程中,您将使用 tlc_yellow_trips_2018 示例表创建一个模型,用于预测出租车行程的小费。使用超参数调节后,在 R2_SCORE 超参数调节目标中,模型性能提高了约 40%。

目标

在本教程中,您将需要:

  • BigQuery ML,用于使用 CREATE MODEL 语句创建线性回归模型,并将 NUM_TRIALS 设置为 20。
  • ML.TRIAL_INFO 函数,用于查看所有 20 个试验的概况
  • ML.EVALUATE 函数,用于评估机器学习模型
  • ML.PREDICT 函数,用于通过机器学习模型进行预测

费用

本教程使用 Google Cloud 的如下计费组件:

  • BigQuery
  • BigQuery ML

如需详细了解 BigQuery 费用,请参阅 BigQuery 价格页面。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  5. 确保您的 Google Cloud 项目已启用结算功能

  6. 新项目会自动启用 BigQuery。如需在现有项目中激活 BigQuery,请转到

    启用 BigQuery API。

    启用 API

第一步:创建训练数据集

创建 BigQuery 数据集以存储您的机器学习模型:

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery 页面

  2. 探索器窗格中,点击您的项目名称。

  3. 点击 查看操作 > 创建数据集

    创建数据集。

  4. 创建数据集页面上,执行以下操作:

    • 数据集 ID 部分,输入 bqml_tutorial

    • 位置类型部分,选择多区域,然后选择 US (multiple regions in United States)(美国[美国的多个区域])。

      公共数据集存储在 US 多区域中。为简单起见,请将数据集存储在同一位置。

    • 保持其余默认设置不变,然后点击创建数据集

      创建数据集页面。

第二步:创建训练输入表

在此步骤中,您将具体化具有 10 万行的训练输入表。

  1. 查看源表 tlc_yellow_trips_2018 的架构。

    表架构。

  2. 创建训练输入数据表。

CREATE TABLE `bqml_tutorial.taxi_tip_input` AS
SELECT
  * EXCEPT(tip_amount), tip_amount AS label
FROM
  `bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2018`
WHERE
  tip_amount IS NOT NULL
LIMIT 100000

第三步:创建模型

接下来,使用 BigQuery 中的 tlc_yellow_trips_2018 示例表创建具有超参数调节的线性回归模型。以下 GoogleSQL 查询用于创建具有超参数调节功能的模型。

CREATE MODEL `bqml_tutorial.hp_taxi_tip_model`
OPTIONS
  (MODEL_TYPE='LINEAR_REG',
   NUM_TRIALS=20,
   MAX_PARALLEL_TRIALS=2) AS
SELECT
  *
FROM
  `bqml_tutorial.taxi_tip_input`

查询详情

LINEAR_REG 模型有两个可调超参数:l1_regl2_reg。以上查询使用默认搜索空间。您也可以明确指定搜索空间:

OPTIONS
  (...
    L1_REG=HPARAM_RANGE(0, 20),
    L2_REG=HPARAM_CANDIDATES([0, 0.1, 1, 10]))

此外,以下其他超参数调节训练选项也使用其默认值:

  • HPARAM_TUNING_ALGORITHM:"VIZIER_DEFAULT"
  • HPARAM_TUNING_OBJECTIVES:["r2_score"]

MAX_PARALLEL_TRIALS 设置为 2,以加速调节过程。由于任意时刻都有 2 个试验在运行,整个调节过程应该只需要大约 10 个序列训练作业(而不是 20 个)的时间。但请注意,两个并发试验无法从彼此的训练结果中受益。

运行 CREATE MODEL 查询

要运行 CREATE MODEL 查询来创建和训练模型,请执行以下操作:

  1. 在 Google Cloud 控制台中,点击编写新查询按钮。

  2. 查询编辑器文本区域中输入上面的 GoogleSQL 查询。

  3. 点击运行

    查询大约需要 17 分钟才能完成。您可以在“阶段”下跟踪调节进度的执行详情:

    调节进度。

第四步:获取试验信息

如需查看所有试验的概况,包括其超参数、目标、状态和最佳试验,您可以使用 ML.TRIAL_INFO 函数。运行 SQL 后,您可以在 Google Cloud 控制台中查看结果。

SELECT *
FROM
  ML.TRIAL_INFO(MODEL `bqml_tutorial.hp_taxi_tip_model`)

一个试验完成后,您可以立即运行此 SQL 查询。如果调节中途停止,所有已完成的试验将仍然可用。

第五步:评估模型

创建模型后,您可以使用 ML.EVALUATE 函数或通过 Google Cloud 控制台获取所有试验的评估指标。

运行:ML.EVALUATE

SELECT *
FROM
  ML.EVALUATE(MODEL `bqml_tutorial.hp_taxi_tip_model`)

此 SQL 会提取根据测试数据计算的所有试验的评估指标。查看数据拆分部分,了解 ML.TRIAL_INFO 目标与 ML.EVALUATE 评估指标之间的区别。

您还可以通过提供自己的数据来评估特定试验。如需了解详情,请参阅 ML.EVALUATE

通过 Google Cloud 控制台查看评估指标

您还可以通过选择 EVALUATION 标签页来查看评估指标。

调节评估。

第六步:使用模型预测出租车小费

您已对模型进行了评估,下一步是使用模型来预测出租车小费。

用于预测小费的查询如下所示:

SELECT
  *
FROM
  ML.PREDICT(MODEL `bqml_tutorial.hp_taxi_tip_model`,
    (
    SELECT
      *
    FROM
      `bqml_tutorial.taxi_tip_input`
    LIMIT 10))

查询详情

最顶层的 SELECT 语句检索所有列,包括 predicted_label 列。该列由 ML.PREDICT 函数生成。 当您使用 ML.PREDICT 函数时,模型的输出列名称为 predicted_label_column_name

默认情况下,系统会根据最佳试验进行预测。您可以通过指定 trial_id 参数来选择其他试验。

SELECT
  *
FROM
  ML.PREDICT(MODEL `bqml_tutorial.hp_taxi_tip_model`,
    (
    SELECT
      *
    FROM
      `bqml_tutorial.taxi_tip_input`
    LIMIT
      10),
    STRUCT(3 AS trial_id))

如需详细了解如何使用模型服务函数,请参阅 ML.PREDICT

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

  • 删除您在教程中创建的项目。
  • 或者,保留项目但删除数据集。

删除数据集

删除项目也将删除项目中的所有数据集和所有表。如果您希望重复使用该项目,则可以删除在本教程中创建的数据集:

  1. 如有必要,请在 Google Cloud 控制台中打开 BigQuery 页面。

    前往 BigQuery 页面

  2. 在导航面板中,点击您创建的 bqml_tutorial 数据集。

  3. 点击窗口右侧的删除数据集。此操作会删除相关数据集、表和所有数据。

  4. 删除数据集对话框中,输入您的数据集的名称 (bqml_tutorial),然后点击删除以确认删除命令。

删除项目

要删除项目,请执行以下操作:

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤