基于Google Cloud Platform构建生产级ML系统:使用实时交通特征训练出租车费用预测模型
引言
在机器学习项目中,特征工程是提升模型性能的关键环节。本文将介绍如何在Google Cloud Platform的机器学习训练环境中,为出租车费用预测模型添加实时交通特征traffic_last_5min
,从而构建更精准的预测系统。
环境准备与数据加载
首先需要设置项目环境变量,包括项目ID、存储桶名称和区域信息。这些配置对于后续使用Google Cloud服务至关重要。
PROJECT = 'cloud-training-demos' # 替换为您的项目ID
BUCKET = 'cloud-training-demos' # 替换为您的存储桶名称
REGION = 'us-central1' # 替换为您的区域
数据加载部分,我们使用tf.data
模块高效读取CSV格式的训练数据。这种方法特别适合处理大规模数据集,因为它支持流式处理和并行读取。
特征工程与模型构建
本项目的特征集合包括:
- 时间特征:星期几(
dayofweek
)、小时(hourofday
) - 位置特征:上车/下车点的经纬度
- 新增的实时交通特征:过去5分钟交通状况(
traffic_last_5min
)
CSV_COLUMNS = [
'fare_amount',
'dayofweek',
'hourofday',
'pickup_longitude',
'pickup_latitude',
'dropoff_longitude',
'dropoff_latitude',
'traffic_last_5min'
]
模型采用Keras Sequential API构建,包含以下组件:
- 输入层:将特征列转换为模型可处理的格式
- 隐藏层:两个全连接层(32和8个神经元),使用ReLU激活函数
- 输出层:单个神经元,线性激活,直接预测费用金额
def build_model(dnn_hidden_units):
model = Sequential(DenseFeatures(feature_columns=feature_columns.values()))
for num_nodes in dnn_hidden_units:
model.add(Dense(units=num_nodes, activation="relu"))
model.add(Dense(units=1, activation="linear"))
def rmse(y_true, y_pred):
return tf.sqrt(tf.reduce_mean(tf.square(y_pred - y_true)))
model.compile(optimizer="adam", loss="mse", metrics=[rmse, "mse"])
return model
模型训练与评估
训练配置参数:
- 批量大小:1000
- 训练样本数:60,000
- 评估次数:60
- 评估样本数:10,000
BATCH_SIZE = 1000
NUM_TRAIN_EXAMPLES = 10000 * 6
NUM_EVALS = 60
NUM_EVAL_EXAMPLES = 10000
trainds = create_dataset(
pattern='../data/taxi-traffic-train*',
batch_size=BATCH_SIZE,
mode=tf.estimator.ModeKeys.TRAIN)
evalds = create_dataset(
pattern='../data/taxi-traffic-valid*',
batch_size=BATCH_SIZE,
mode=tf.estimator.ModeKeys.EVAL).take(NUM_EVAL_EXAMPLES//1000)
训练过程中使用TensorBoard记录指标,便于可视化分析训练过程:
LOGDIR = "./taxi_trained"
history = model.fit(x=trainds,
steps_per_epoch=steps_per_epoch,
epochs=NUM_EVALS,
validation_data=evalds,
callbacks=[TensorBoard(LOGDIR)])
模型部署
训练完成后,将模型导出为SavedModel格式,便于在生产环境中部署:
OUTPUT_DIR = "./export/savedmodel"
shutil.rmtree(OUTPUT_DIR, ignore_errors=True)
EXPORT_PATH = os.path.join(OUTPUT_DIR,
datetime.datetime.now().strftime("%Y%m%d%H%M%S"))
tf.saved_model.save(model, EXPORT_PATH)
使用Google Cloud AI Platform部署模型:
gcloud ai-platform versions create --model=$MODEL_NAME $VERSION_NAME --async \
--framework=tensorflow --python-version=3.5 --runtime-version=1.14 \
--origin=${EXPORT_PATH} --staging-bucket=gs://$BUCKET --region=$REGION
结论
通过添加实时交通特征traffic_last_5min
,我们构建了更精准的出租车费用预测模型。这种方法展示了如何将实时数据流整合到机器学习系统中,为生产环境中的预测服务提供更动态、更准确的决策支持。Google Cloud Platform提供的工具链使得从数据准备、模型训练到生产部署的整个流程变得高效且可扩展。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考