基于Google Cloud Platform训练数据分析项目的出租车费用预测模型开发
引言
在机器学习项目中,特征工程是提升模型性能的关键环节。本文将详细介绍如何在Google Cloud Platform环境下,通过添加交通流量特征(traffic_last_5min
)来改进出租车费用预测模型的开发过程。我们将使用TensorFlow构建深度神经网络模型,并展示从数据准备到模型部署的完整流程。
环境准备与数据加载
首先需要设置项目环境变量,包括项目ID、存储桶名称和区域信息。这些配置对于后续使用Google Cloud服务至关重要。
PROJECT = 'cloud-training-demos' # 替换为您的项目ID
BUCKET = 'cloud-training-demos' # 替换为您的存储桶名称
REGION = 'us-central1' # 替换为您的区域
数据加载部分,我们使用tf.data
API高效地读取CSV格式的出租车数据。这种方法特别适合处理大规模数据集,因为它支持流式处理和并行读取。
特征工程与模型构建
特征列定义
我们定义了以下特征列用于模型训练:
CSV_COLUMNS = [
'fare_amount', # 标签:费用金额
'dayofweek', # 星期几
'hourofday', # 一天中的小时
'pickup_longitude', # 上车经度
'pickup_latitude', # 上车纬度
'dropoff_longitude', # 下车经度
'dropoff_latitude', # 下车纬度
'traffic_last_5min' # 新增特征:过去5分钟交通流量
]
其中traffic_last_5min
是我们新增的特征,用于捕捉实时交通状况对出租车费用的影响。
数据预处理流水线
我们创建了专门的数据处理函数,将原始数据转换为模型可用的格式:
def create_dataset(pattern, batch_size=1, mode=tf.estimator.ModeKeys.EVAL):
dataset = tf.data.experimental.make_csv_dataset(
pattern, batch_size, CSV_COLUMNS, DEFAULTS)
dataset = dataset.map(features_and_labels)
if mode == tf.estimator.ModeKeys.TRAIN:
dataset = dataset.shuffle(buffer_size=1000).repeat()
dataset = dataset.prefetch(1) # 使用预取提高性能
return dataset
深度神经网络模型构建
我们使用Keras Sequential API构建了一个包含两个隐藏层的深度神经网络:
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")) # 输出层
# 自定义RMSE评估指标
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
模型结构说明:
- 输入层:接收所有特征输入
- 隐藏层1:32个神经元,ReLU激活
- 隐藏层2:8个神经元,ReLU激活
- 输出层:1个神经元,线性激活(回归问题)
模型训练与评估
我们配置了训练参数并启动训练过程:
BATCH_SIZE = 1000
NUM_TRAIN_EXAMPLES = 10000 * 6 # 训练样本数
NUM_EVALS = 60 # 评估次数
NUM_EVAL_EXAMPLES = 10000 # 评估样本数
history = model.fit(x=trainds,
steps_per_epoch=steps_per_epoch,
epochs=NUM_EVALS,
validation_data=evalds,
callbacks=[TensorBoard(LOGDIR)])
训练过程中,我们使用TensorBoard记录训练指标,方便后续分析模型表现。
模型性能分析
通过绘制训练和验证集的RMSE曲线,我们可以直观地评估模型性能:
RMSE_COLS = ['rmse', 'val_rmse']
pd.DataFrame(history.history)[RMSE_COLS].plot()
这种可视化方法帮助我们判断模型是否过拟合或欠拟合,以及训练过程是否收敛。
模型部署
训练完成后,我们将模型导出为SavedModel格式,便于部署到生产环境:
OUTPUT_DIR = "./export/savedmodel"
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),仅供参考