在Cloud ML Engine上部署XGBoost模型实现在线预测

在Cloud ML Engine上部署XGBoost模型实现在线预测

本文将详细介绍如何在Google Cloud ML Engine平台上部署XGBoost模型并实现在线预测功能。我们将使用美国人口普查收入数据集作为示例,完整演示从模型训练到在线预测的整个流程。

准备工作

在开始之前,我们需要完成以下准备工作:

  1. 创建GCP项目:在Google Cloud Platform上创建一个新项目
  2. 设置GCS存储桶:创建用于存储模型文件的Google Cloud Storage存储桶
  3. 启用API服务:启用AI Platform Training and Prediction和Compute Engine API
  4. 安装必要工具
    • Cloud SDK:用于与Google Cloud产品交互
    • XGBoost:用于构建和训练模型
    • scikit-learn:用于数据预处理
    • NumPy和pandas:用于数据处理
    • Google API Python Client:用于调用Google API

环境变量设置

在开始实际工作前,我们需要设置一些环境变量:

PROJECT_ID = "your-project-id"  # 替换为你的GCP项目ID
BUCKET_ID = "your-bucket-id"    # 替换为你的GCS存储桶ID
MODEL_NAME = "census"           # 模型名称
VERSION_NAME = "v1"             # 版本名称
REGION = "us-central1"          # 部署区域
INPUT_DATA_FILE = "data.json"   # 输入数据文件

数据集准备

我们使用美国人口普查收入数据集,该数据集包含以下文件:

  • 训练数据:adult.data
  • 测试数据:adult.test

数据集包含以下特征列:

age, workclass, fnlwgt, education, education-num, marital-status, 
occupation, relationship, race, sex, capital-gain, capital-loss, 
hours-per-week, native-country, income-level

其中income-level是我们的预测目标(是否收入超过50K美元)。

模型训练与保存

1. 数据预处理

首先,我们需要加载数据并进行预处理:

import xgboost as xgb
import pandas as pd
from sklearn.preprocessing import LabelEncoder

# 加载数据
raw_training_data = pd.read_csv('census_data/adult.data', header=None, names=COLUMNS)
raw_testing_data = pd.read_csv('census_data/adult.test', names=COLUMNS, skiprows=1)

# 分离特征和标签
train_features = raw_training_data.drop('income-level', axis=1)
train_labels = (raw_training_data['income-level'] == ' >50K')

test_features = raw_testing_data.drop('income-level', axis=1)
test_labels = (raw_testing_data['income-level'] == ' >50K.')

# 对分类特征进行编码
CATEGORICAL_COLUMNS = ('workclass', 'education', 'marital-status', 
                      'occupation', 'relationship', 'race', 'sex', 'native-country')

encoders = {col:LabelEncoder() for col in CATEGORICAL_COLUMNS}
for col in CATEGORICAL_COLUMNS:
    train_features[col] = encoders[col].fit_transform(train_features[col])
    test_features[col] = encoders[col].fit_transform(test_features[col])

2. 训练XGBoost模型

将数据转换为XGBoost的DMatrix格式并训练模型:

# 转换为DMatrix格式
dtrain = xgb.DMatrix(train_features, train_labels)
dtest = xgb.DMatrix(test_features)

# 训练模型
bst = xgb.train({}, dtrain, 20)

# 保存模型
bst.save_model('model.bst')

模型部署到AI Platform

1. 上传模型到GCS

将训练好的模型文件上传到Google Cloud Storage:

gsutil cp ./model.bst gs://$BUCKET_ID/model.bst

注意:上传的模型文件名必须为model.bst(对于XGBoost模型),这是AI Platform的要求。

2. 创建模型资源

在AI Platform上创建一个模型容器:

gcloud ml-engine models create $MODEL_NAME --regions $REGION

3. 创建模型版本

创建模型版本并关联我们上传的模型文件:

curl -X POST -H "Content-Type: application/json" \
   -d '{"name": "'$VERSION_NAME'", "deploymentUri": "gs://'$BUCKET_ID'/", "runtimeVersion": "1.4", "framework": "XGBOOST"}' \
   -H "Authorization: Bearer `gcloud auth print-access-token`" \
    https://ml.googleapis.com/v1/projects/$PROJECT_ID/models/$MODEL_NAME/versions

关键参数说明:

  • runtimeVersion: 设置为"1.4"(使用XGBoost 0.6)
  • framework: 设置为"XGBOOST"

在线预测

1. 准备预测数据

我们需要将测试数据转换为JSON格式,以便用于在线预测:

import json
import numpy as np

data = []
for i in range(len(test_features)):
    data.append([])
    for col in COLUMNS[:-1]:  # 忽略'income-level'列
        # 将numpy整数转换为标准整数
        data[i].append(int(np.uint64(test_features[col][i]).item()))

# 保存为JSON文件
with open('data.json', 'w') as outfile:
    json.dump(data, outfile)

2. 执行在线预测

使用gcloud命令进行预测:

gcloud ml-engine predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE

预测结果将显示每个人收入是否超过50K的概率。

总结

通过本文,我们完整演示了如何在Cloud ML Engine上部署XGBoost模型并实现在线预测的流程,包括:

  1. 数据准备和预处理
  2. XGBoost模型训练
  3. 模型上传到Google Cloud Storage
  4. 在AI Platform上创建模型和版本
  5. 执行在线预测

这种方法可以轻松地将机器学习模型部署为可扩展的Web服务,无需担心基础设施管理问题。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邢璋顺Blair

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值