BigQuery ML 使用入门(使用 Cloud Datalab)

本教程介绍如何将 BigQuery ML 与 Cloud Datalab 结合使用。要查看本教程的 BigQuery 网页界面详细版本,请转到 BigQuery ML 使用入门(使用网页界面)

通过 BigQuery ML,用户可以利用 SQL 查询在 BigQuery 中创建和执行机器学习模型。其目标是让 SQL 专业人员能够利用现有的工具构建模型,从而实现机器学习的普及,并通过消除数据移动需求来提高开发速度。

在本教程中,您可利用适用于 BigQuery 的 Google Analytics(分析)示例数据集创建一个模型,预测网站访客是否会进行交易。如需了解关于 Analytics 数据集架构的信息,请访问 Google Analytics 帮助中心,然后查看 BigQuery Export 架构

目标

在本教程中,您将需要:

  • BigQuery ML,用于通过 CREATE MODEL 语句创建二元逻辑回归模型
  • ML.EVALUATE 函数,用于评估机器学习模型
  • ML.PREDICT 函数,用于通过机器学习模型进行预测

费用

本教程使用 Cloud Platform 的可计费组件,包括:

  • BigQuery
  • BigQuery ML
  • Cloud Datalab

如需了解有关 BigQuery 费用的更多信息,请参阅 BigQuery 价格页面。

如需了解有关 BigQuery ML 费用的更多信息,请参阅 BigQuery ML 价格页面。

如需了解有关 Cloud Datalab 费用的更多信息,请参阅 Cloud Datalab 价格页面。

准备工作

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册新帐号

  2. 选择或创建 Google Cloud Platform 项目。

    转到“管理资源”页面

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

    了解如何启用结算功能

  4. 系统会自动为新项目启用 BigQuery。要在现有的项目中激活 BigQuery,请转至 启用BigQuery API。

    启用 API

要查看对此处所介绍概念的说明,请参阅:

第一步:设置 Cloud Datalab

在本教程中,您将使用 Google Cloud Shell 设置 Cloud Datalab。Cloud Datalab 提供基于 Jupyter 的笔记本环境,用于处理 BigQuery ML 和 BigQuery。

在设置 Cloud Datalab 之前,必须启用 Compute Engine API 和 Cloud Source Repositories API。如需了解如何启用这些 API,请参阅启用和停用服务

要在 Compute Engine 虚拟机上设置 Google Cloud Datalab,请执行以下操作:

  1. 转到 GCP Console。

    GCP Console

  2. 点击激活 Cloud Shell

    激活 Cloud Shell 图标

  3. 在 Cloud Shell 窗口中,通过输入以下命令来配置 gcloud 工具,以便将 us-central1-a 用作您的 Cloud SDK 默认地区。该地区将包含您的 Cloud Datalab 实例。

    gcloud config set compute/zone us-central1-a
    
  4. 输入以下命令,创建用于运行 Cloud Datalab 容器的 Compute Engine 虚拟机(名为 mltutorial)。此命令还会创建与虚拟机的 SSH 连接,并将远程 Cloud Datalab 网页界面映射到 localhost 端口 8081。如果系统提示,请输入与默认 Compute Engine 地区对应的数字。

    datalab create mltutorial
    

    看到 The connection to Datalab is now open and will remain until this command is killed 消息即表明您已连接到实例。建立 SSH 连接后,命令行界面可能无法再生成输出。

  5. 在 Cloud Shell 窗口中,点击 网络预览图标 网页预览图标。

  6. 选择更改端口

  7. 更改预览端口对话框中,输入 8081,然后点击更改并预览。此操作会在新的标签中打开 Cloud Datalab。

    gcloud compute ssh --quiet --zone "us-central1-a" --ssh-flag="-N" --ssh-flag="-L" --ssh-flag="localhost:8081:localhost:8080" "${USER}@mltutorial"
    
  8. 点击笔记本以创建新笔记本。笔记本将在新标签页中打开。

  9. 在标题栏中,点击未命名的笔记本,更改笔记本的名称。

  10. 重命名笔记本对话框中,输入 BigQuery ML tutorial,然后点击确定

  11. 在第一个代码单元中,输入下列内容以更新为 BigQuery Python 客户端库的最新版本。

    !pip install --upgrade google-cloud-bigquery
    
  12. 依次点击运行 > 从此单元运行。查询结果会显示在代码块下方。看到以下消息即表示安装完成:

    Successfully installed ...

  13. 代码产生了大量输出。要隐藏输出,请点击单元菜单,然后选择收起以收起单元。

    单元菜单

  14. 点击添加代码以创建新的代码单元。

  15. 输入以下代码以导入 BigQuery Python 客户端库并初始化客户端。BigQuery 客户端用于通过 BigQuery API 收发消息。

    from google.cloud import bigquery
    client = bigquery.Client(location="US")
    
  16. 依次点击运行 > 从此单元运行。此命令没有任何输出。

第二步:创建数据集

接下来,您要创建一个 BigQuery 数据集来存储机器学习模型。要创建数据集,请执行以下操作:

  1. 点击添加代码以创建新的代码单元。

  2. 输入以下命令以创建数据集。

    dataset = client.create_dataset('bqml_tutorial')
    
  3. 依次点击运行 > 从此单元运行。此命令没有任何输出。

第三步:创建模型

接下来,您可利用适用于 BigQuery 的 Google Analytics 示例数据集创建逻辑回归模型。该模型用于预测网站访客是否会进行交易。标准 SQL 查询利用 CREATE MODEL 语句来创建和训练模型。

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

  1. 点击添加代码以创建新的代码单元。

  2. BigQuery Python 客户端库提供了一个魔法命令,可让您使用最少的代码运行查询。如需从客户端库加载魔法命令,请输入以下代码。

    %load_ext google.cloud.bigquery
    
  3. 依次点击运行 > 从此单元运行。此命令没有任何输出。

  4. 点击添加代码以创建新的代码单元。

  5. BigQuery 客户端库提供了一个单元魔法 %%bigquery,它可运行 SQL 查询并以 Pandas DataFrame 形式返回结果。在单元中输入以下标准 SQL 查询。对于客户端库,不需要使用 #standardSQL 前缀。标准 SQL 为默认查询语法。

    %%bigquery
    CREATE OR REPLACE MODEL `bqml_tutorial.sample_model`
    OPTIONS(model_type='logistic_reg') AS
    SELECT
      IF(totals.transactions IS NULL, 0, 1) AS label,
      IFNULL(device.operatingSystem, "") AS os,
      device.isMobile AS is_mobile,
      IFNULL(geoNetwork.country, "") AS country,
      IFNULL(totals.pageviews, 0) AS pageviews
    FROM
      `bigquery-public-data.google_analytics_sample.ga_sessions_*`
    WHERE
      _TABLE_SUFFIX BETWEEN '20160801' AND '20170630'
    
  6. 依次点击运行 > 从此单元运行

  7. 查询需要几分钟才能完成。第一次迭代完成后,您的模型 (sample_model) 将出现在 BigQuery 网页界面的导航面板中。由于查询使用 CREATE MODEL 语句来创建表,因此您看不到查询结果。输出为空字符串。

第四步:获取训练统计信息

如需查看模型训练的结果,您可以使用 ML.TRAINING_INFO 函数,也可以在 BigQuery 网页界面中查看该统计信息。BigQuery 经典版网页界面目前不提供此功能。在本教程中,您可以使用 ML.TRAINING_INFO 函数。

机器学习算法通过检查多个示例并尝试找到实现损失最小化的模型来构建模型。该过程称为经验风险最小化。

损失是对不良预测的惩罚 - 即表明模型的预测在单个示例中不良程度的数字。如果模型的预测完全准确,则损失为零,否则损失会较大。训练模型的目标是从所有示例中找到一组平均损失“较小”的权重。

要查看运行 CREATE MODEL 查询时生成的模型训练统计信息:

  1. 点击添加代码以创建新的代码单元。

  2. 在单元中输入以下标准 SQL 查询。

    %%bigquery
    SELECT
      *
    FROM
      ML.TRAINING_INFO(MODEL `bqml_tutorial.sample_model`)
    
  3. 依次点击运行 > 从此单元运行

  4. 查询完成后,结果会显示在查询下方。结果应类似于以下内容:

    ML.TRAINING_INFO 输出

    loss 列表示对训练数据集进行指定迭代后计算得出的损失指标。由于您执行了逻辑回归,该列为对数损失eval_loss 列是根据维持数据集(从训练数据集中保留的用于验证模型的数据)计算出的相同损失指标。

    如需详细了解 ML.TRAINING_INFO 函数,请参阅 BigQuery ML 语法参考

第五步:评估模型

创建模型后,您可以使用 ML.EVALUATE 函数评估分类器的性能。您还可以使用 ML.ROC_CURVE 函数评估逻辑回归的专用指标。

分类服务是用于标签的一组枚举目标值之一。例如,在本教程中,您使用的是检测交易的二元分类模型。这两类分别是 label 列中的值:0(无交易)和非 1(交易处理)。

要运行 ML.EVALUATE 查询来评估模型,请执行以下操作:

  1. 点击添加代码以创建新的代码单元。

  2. 在单元中输入以下标准 SQL 查询。

    %%bigquery
    SELECT
      *
    FROM ML.EVALUATE(MODEL `bqml_tutorial.sample_model`, (
      SELECT
        IF(totals.transactions IS NULL, 0, 1) AS label,
        IFNULL(device.operatingSystem, "") AS os,
        device.isMobile AS is_mobile,
        IFNULL(geoNetwork.country, "") AS country,
        IFNULL(totals.pageviews, 0) AS pageviews
      FROM
        `bigquery-public-data.google_analytics_sample.ga_sessions_*`
      WHERE
        _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
    
  3. 依次点击运行 > 从此单元运行

  4. 查询完成后,结果会显示在查询下方。结果应类似于以下内容:

    ML.EVALUATE 输出

    由于您执行了逻辑回归,因此结果包含以下列:

第六步:利用您的模型预测结果

现在您已评估了模型,下一步是用它来预测结果。您利用自己的模型来预测每个国家/地区的网站访客的交易数量。而且,您用其来预测每位用户的购买量。

要运行使用模型预测交易数量的查询,请执行以下操作:

  1. 点击添加代码以创建新的代码单元。

  2. 在单元中输入以下标准 SQL 查询。

    %%bigquery
    SELECT
      country,
      SUM(predicted_label) as total_predicted_purchases
    FROM ML.PREDICT(MODEL `bqml_tutorial.sample_model`, (
      SELECT
        IFNULL(device.operatingSystem, "") AS os,
        device.isMobile AS is_mobile,
        IFNULL(totals.pageviews, 0) AS pageviews,
        IFNULL(geoNetwork.country, "") AS country
      FROM
        `bigquery-public-data.google_analytics_sample.ga_sessions_*`
      WHERE
        _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
      GROUP BY country
      ORDER BY total_predicted_purchases DESC
      LIMIT 10
    
  3. 依次点击运行 > 从此单元运行

  4. 查询完成后,结果会显示在查询下方。结果应类似于以下内容。由于培训模型具有不确定性,因此您的结果可能会有所不同。

    ML.PREDICT 输出一

在下一示例中,您尝试预测每个网站访客将进行的交易数量。除 GROUP BY 子句外,此查询与上一查询相同。GROUP BY 子句 - GROUP BY fullVisitorId - 在此用于按访客 ID 对结果进行分组。

要运行预测每位用户购买情况的查询,请执行以下操作:

  1. 点击添加代码以创建新的代码单元。

  2. 在单元中输入以下标准 SQL 查询。

    %%bigquery
    SELECT
      fullVisitorId,
      SUM(predicted_label) as total_predicted_purchases
    FROM ML.PREDICT(MODEL `bqml_tutorial.sample_model`, (
      SELECT
        IFNULL(device.operatingSystem, "") AS os,
        device.isMobile AS is_mobile,
        IFNULL(totals.pageviews, 0) AS pageviews,
        IFNULL(geoNetwork.country, "") AS country,
        fullVisitorId
      FROM
        `bigquery-public-data.google_analytics_sample.ga_sessions_*`
      WHERE
        _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
      GROUP BY fullVisitorId
      ORDER BY total_predicted_purchases DESC
      LIMIT 10
    
  3. 依次点击运行 > 从此单元运行

  4. 查询完成后,结果会显示在查询下方。结果应类似于以下内容:

    ML.PREDICT 输出二

清理

为避免因本教程中使用的资源而导致我们向您的 Google Cloud Platform 帐号收取费用,请执行以下操作:

  • 您可以删除自己创建的项目。
  • 或者您可以保留项目但删除 Cloud Datalab 虚拟机。

删除 Cloud Datalab 虚拟机

删除项目会移除 Cloud Datalab 虚拟机。如果并非想删除 Cloud Platform 项目,您可删除 Cloud Datalab 虚拟机。

要删除 Cloud Datalab 虚拟机,请执行以下操作:

  1. 打开“Compute Engine 虚拟机实例”页面。

    转到“虚拟机实例”页面

  2. 检查 mltutorial 实例,然后点击删除

  3. 当系统提示时,点击删除

删除您的项目

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

  1. 在 GCP Console 中,转到“项目”页面。

    转到“项目”页面

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

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
BigQuery ML 文档