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


本教程介绍如何通过指定 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

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

    Enable the BigQuery API.

    Enable the 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 评估指标之间的区别,请参阅模型部署函数

您还可以通过提供自己的数据来评估特定试验。如需了解详情,请参阅模型部署函数

通过 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))

如需详细了解如何使用模型部署函数,请参阅模型部署函数

清理

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

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

删除数据集

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

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

    前往 BigQuery 页面

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

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

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

删除项目

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

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

后续步骤