内置 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. 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. 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. Make sure that billing is enabled for your Google Cloud project.

  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。加利福尼亚州欧文市:加州大学信息与计算机科学学院。

后续步骤