内置 XGBoost 算法使用入门

借助 AI Platform Training 中的内置算法,您可以提交训练数据、选择算法,以及让 AI Platform Training 为您处理预处理和训练作业,而无需为训练应用编写任何代码。

概览

在本教程中,您将在无需编写任何代码的情况下完成 XGBoost 模型的训练。您可以将人口普查收入数据集提交给 AI Platform Training 进行预处理和训练,然后在 AI Platform Training 上部署模型以获取预测结果。生成的模型预测了个人年收入超过 $50000 的概率。

准备工作

如需通过命令行完成本教程的学习,请使用 Cloud Shell 或已安装 Google Cloud CLI 的任何环境。

完成以下步骤以设置 GCP 账号,启用所需的 API,以及安装和激活 Google Cloud CLI。

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  4. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  9. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

设置

如需使用表格式内置算法,您必须从 CSV 文件中移除标题行,并将目标值移到第一列。我们已针对本教程中的操作修改了原始人口普查数据集,并将其托管在公开 Cloud Storage 存储分区 (gs://cloud-samples-data/ai-platform/census/algorithms/data/) 中。

控制台

在开始训练作业前,您需要将数据从我们的公开 Cloud Storage 存储分区复制到您的 Cloud Storage 存储分区。

将示例数据复制到 Cloud Storage 存储分区

  1. 首先,从我们的公开 Cloud Storage 存储分区中下载训练数据和测试数据。

    1. 导航到我们的公开 Cloud Storage 存储分区:

      获取示例数据

    2. 下载 test.csvtrain.csv

      1. 点击文件名。

      2. 对象详情页面中点击下载。这些文件会分别作为 ai-platform_census_algorithms_data_test.csvai-platform_census_algorithms_data_train.csv 下载到您的本地环境。

  2. 接下来,将训练数据和测试数据上传到您的 Cloud Storage 存储分区。

    1. 导航到 Cloud Storage 存储分区的“浏览器”页面。 从选择项目下拉列表中选择您的项目,或在新标签页中将其打开:

      “Cloud Storage 浏览器”页面

    2. 点击要使用的存储分区的名称,如果没有存储分区,请新建一个。(如要创建新的存储分区,请务必创建区域性存储分区,并选择在其中运行 AI Platform Training 训练作业的区域。)

    3. (可选)点击创建文件夹,为您上传的文件创建一个文件夹。为该文件夹输入名称(例如“data”),然后点击创建。然后,点击文件夹名称导航到新文件夹。

    4. 点击上传文件,将训练文件 ai-platform_census_algorithms_data_train.csv 和测试文件 ai-platform_census_algorithms_data_test.csv 上传到您的存储分区中。

现在数据已复制到存储分区中,您可以通过选择要使用的算法类型来启动训练作业。

选择算法

  1. 转到 Google Cloud Console 中的 AI Platform Training“作业”页面:

    AI Platform Training“作业”页面

  2. 点击新建训练作业按钮。从下方显示的选项中,点击内置算法训练创建新的训练作业页面随即显示。

  3. 训练作业的创建分为四个步骤。第一步是训练算法。选择 XGBoost,然后点击下一步

gcloud

为您的项目 ID、Cloud Storage 存储分区、指向训练数据的 Cloud Storage 路径以及算法选择设置环境变量。

AI Platform Training 内置算法位于 Container Registry 中托管的 Docker 容器中。

PROJECT_ID=YOUR_PROJECT_ID
BUCKET_NAME=YOUR_BUCKET_NAME
REGION="us-central1"
gcloud config set project $PROJECT_ID
gcloud config set compute/region $REGION

# Copy the training data into your Cloud Storage bucket, and set the path
# to your copy of the training data.
TRAINING_DATA_SOURCE=gs://cloud-samples-data/ai-platform/census/algorithms/data/train.csv
TRAINING_DATA_PATH=gs://$BUCKET_NAME/algorithms-demo/data/train.csv
gcloud storage cp $TRAINING_DATA_SOURCE $TRAINING_DATA_PATH

# Specify the Docker container URI specific to the algorithm.
IMAGE_URI="gcr.io/cloud-ml-algos/boosted_trees:latest"

提交训练作业

要提交作业,您必须指定一些基本的训练参数和一些与 XGBoost 算法相关的基本参数。

训练作业的常规参数:

训练作业参数
参数 说明
job-id 训练作业的唯一 ID。提交训练作业后,您可以使用此参数查找训练作业状态的日志。
job-dir AI Platform Training 在训练作业成功完成后用来保存训练文件的 Cloud Storage 路径。
scale-tier 指定用于训练的机器类型。使用 BASIC 选择仅使用一台机器的配置。
master-image-uri Container Registry URI,用于指定训练作业要使用的 Docker 容器。将容器用于先前定义为 IMAGE_URI 的内置 XGBoost 算法。
region 指定用于运行训练作业的可用区域。在本教程中,您可以使用区域 us-central1

内置 XGBoost 算法专用参数:

算法参数
参数 说明
preprocess 布尔值参数,说明 AI Platform Training 是否应对数据进行预处理。
objective 表示学习任务及其相应的学习目标。 在本示例中是指“binary:logistic”。
training_data_path 指向训练数据的 Cloud Storage 位置,必须为 CSV 文件。

如需所有其他 XGBoost 算法标志的详细列表,请参阅内置 XGBoost 参考

控制台

  1. 启用自动数据预处理保持勾选状态。

  2. 对于训练数据路径,点击浏览。在右侧面板中,点击您将训练数据上传到的存储分区的名称,然后导航到 ai-platform_census_algorithms_data_train.csv 文件。

  3. 验证数据测试数据的字段保留为默认设置。

  4. 输出目录中,输入您希望 AI Platform Training 用于存储训练作业输出的 Cloud Storage 存储分区的路径。您可以直接填写 Cloud Storage 存储分区路径,或点击浏览按钮来选择。

    为了便于管理,请在 Cloud Storage 存储分区中为此训练作业创建一个新目录。您可以在浏览窗格中执行此操作。

    点击下一步

  5. 对于目标,选择“binary:logistic”,它表示一个二进制学习任务和一个逻辑回归目标

  6. 对于模型类型,选择分类

  7. 将所有其他字段保留为默认设置,然后点击下一步

  8. 作业设置页面上,执行以下操作:

    1. 输入一个唯一作业 ID(例如“linear_example”)。
    2. 输入可用区域(例如“us-central1”)。
    3. 容量层级选择“BASIC”。

    点击完成,提交训练作业。

gcloud

  1. 使用 gcloud 提交训练作业之前,请先设置训练作业和算法的所有参数:

    DATASET_NAME="census"
    ALGORITHM="xgboost"
    MODEL_TYPE="classification"
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}"
    
    # Give a unique name to your training job.
    DATE="$(date '+%Y%m%d_%H%M%S')"
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Make sure you have access to this Cloud Storage bucket.
    JOB_DIR="gs://${BUCKET_NAME}/algorithms_training/${MODEL_NAME}/${DATE}"
    
  2. 提交作业:

    gcloud ai-platform jobs submit training $JOB_ID \
      --master-image-uri=$IMAGE_URI --scale-tier=BASIC --job-dir=$JOB_DIR \
      -- \
      --preprocess --objective=binary:logistic \
      --training_data_path=$TRAINING_DATA_PATH

  3. 成功提交作业后,您可以使用以下 gcloud 命令查看日志:

    gcloud ai-platform jobs describe $JOB_ID
    gcloud ai-platform jobs stream-logs $JOB_ID
    

了解作业目录

训练作业成功完成后,AI Platform Training 会在您的 Cloud Storage 存储分区中创建经过训练的模型,以及其他一些工件。您可以在 JOB_DIR 中找到以下目录结构:

  • model/
    • model.pkl
    • deployment_config.yaml
  • artifacts/
    • instance_generator.py
    • metadata.json
  • processed_data/
    • training.csv
    • validation.csv
    • test.csv

确认您的 JOB_DIR 中的目录结构与上述结构相同:

gcloud storage ls $JOB_DIR/* --all-versions

部署经过训练的模型

AI Platform Prediction 使用模型和版本资源来组织经过训练的模型。AI Platform Prediction 模型是存放机器学习模型版本的容器。

要部署模型,请在 AI Platform Prediction 中创建模型资源,创建该模型的一个版本,然后使用该模型和版本请求在线预测。

详细了解如何将模型部署到 AI Platform Prediction

控制台

  1. 作业页面上,您可以找到包含所有训练作业的列表。点击您刚刚提交的训练作业的名称(“xgboost_example”或您使用的作业名称)。

  2. 作业详情页面上,您可以查看作业的整体进度,也可以点击查看日志,更详细地查看进度。

  3. 如果作业成功,顶部会显示部署模型按钮。点击部署模型

  4. 选择“部署为新模型”,然后输入模型名称,如 "xgboost_model"。然后,点击确认

  5. 创建版本页面上,输入版本名称(如“v1”),并将所有其他字段保留为默认设置。点击保存

  6. 您的版本名称会显示在模型详情页面。版本创建过程需要几分钟时间才能完成。版本准备就绪后,版本名称旁会显示一个对勾图标。

  7. 点击版本名称(“v1”)导航至版本详情页面。在本教程的下一步,您将发送预测请求

gcloud

使用内置 XGBoost 算法的训练过程会生成文件 deployment_config.yaml,该文件可让您更轻松地在 AI Platform Prediction 上部署模型以进行预测。

  1. 将该文件复制到本地目录并查看其内容:

    gcloud storage cp $JOB_DIR/model/deployment_config.yaml .
    cat deployment_config.yaml
    

    您的 deployment_config.yaml 文件应类似于以下内容:

    deploymentUri: gs://YOUR_BUCKET_NAME/algorithms_training/census_xgboost_classification/20190227060114/model
    framework: XGBOOST
    labels:
      job_id: census_xgboost_classification_20190227060114
      error_percentage: '14'
    runtimeVersion: '0.81'
    pythonVersion: '2.7'
    
  2. 在 AI Platform Training 中创建模型和版本:

    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_${MODEL_TYPE}"
    gcloud ai-platform models create $MODEL_NAME --regions $REGION
    
    # Create a model and a version using the file above.
    VERSION_NAME="v_${DATE}"
    
    gcloud ai-platform versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --config deployment_config.yaml
    

    版本创建过程需要几分钟时间才能完成。

获取在线预测结果

请求预测时,您需要确保输入数据与训练数据的格式设置相同。在训练之前,AI Platform Training 会通过将您的数据转换为 metadata.json 中显示的语料库来对其进行预处理。

您可以使用 instance_generator.py,对 AI Platform Training 应用于您的训练数据的输入实例应用相同的预处理转换。此文件将读取存储在 metadata.json 文件中的映射信息。您还可以使用模块中的 transform_string_instance 函数将原始字符串转换为模型可接受的格式。

  1. 下载训练工件文件,并查看 metadata.json

    gcloud storage cp $JOB_DIR/artifacts/* .
    
    # Let's look at the metadata.json file
    head metadata.json
    
  2. 使用 instance_generator.py 准备一个数据实例的预测输入:

     # ground truth is >50K
    RAW_DATA_POINT="44, Private, 160323, Some-college, 10, Married-civ-spouse, Machine-op-inspct, Husband, Black, Male, 7688, 0, 40, United-States"
    
     # Now let's create a JSON prediction request
    python instance_generator.py --raw_data_string="${RAW_DATA_POINT}" > sample_input.json
    
    # Let's look at the prediction request file.
    cat sample_input.json
    
  3. 发送预测请求:

    gcloud ai-platform predict \
      --model $MODEL_NAME \
      --version $VERSION_NAME \
      --json-instances sample_input.json
    

生成的预测结果应为大于 0.5 的数字,表示相应个体的薪水极有可能高于 50000 美元。

关于数据

人口普查收入数据集加州大学欧文分校机器学习代码库

人口普查数据由 Lichman, M. (2013) 提供。UCI 机器学习存储库 http://archive.ics.uci.edu/ml。加利福尼亚州欧文市:加州大学信息与计算机科学学院。

后续步骤