TensorFlow Estimator API 入门教程:出租车费预测模型实践

TensorFlow Estimator API 入门教程:出租车费预测模型实践

【免费下载链接】training-data-analyst Labs and demos for courses for GCP Training (http://cloud.google.com/training). 【免费下载链接】training-data-analyst 项目地址: https://gitcode.com/gh_mirrors/tr/training-data-analyst

概述

TensorFlow Estimator API 是 TensorFlow 高级 API 之一,它提供了一套简单易用的接口来构建、训练和评估机器学习模型。本教程将通过一个出租车费预测的实例,带你全面了解如何使用 Estimator API 构建机器学习模型。

TensorFlow 层次结构

TensorFlow 采用分层架构设计,从高到低分为多个层次:

  1. Estimators (预制/自定义) - 最高抽象级别
  2. Keras - 中级API
  3. 低阶API (tf.layers, tf.losses等) - 更灵活但代码量更大
  4. Python/TensorFlow运算 - 最底层,完全控制

Estimator API 位于最高层,适合快速构建和部署模型,同时保持足够的灵活性。

准备工作

首先导入必要的库并检查 TensorFlow 版本:

import tensorflow as tf
import pandas as pd
import shutil

print(tf.__version__)

数据加载与处理

我们从存储中获取预处理好的出租车费数据集,这些数据包含以下特征:

  • 上车地点坐标
  • 下车地点坐标
  • 乘客人数
  • 上车时间
  • 车费金额(标签)
df_train = pd.read_csv("./taxi-train.csv")
df_valid = pd.read_csv("./taxi-valid.csv")
df_test = pd.read_csv("./taxi-test.csv")

CSV_COLUMN_NAMES = list(df_train)
FEATURE_NAMES = CSV_COLUMN_NAMES[1:]  # 所有特征列
LABEL_NAME = CSV_COLUMN_NAMES[0]      # 标签列

特征列定义

特征列(Feature Columns)是TensorFlow中定义模型输入的标准方式,它告诉模型如何解释输入数据。对于数值型特征,我们使用numeric_column

feature_columns = [tf.feature_column.numeric_column(key=feature) 
                  for feature in FEATURE_NAMES]

输入函数设计

输入函数负责将数据转换为Estimator所需的格式。我们使用tf.data.DatasetAPI构建高效的数据管道:

def train_input_fn(df, batch_size=128):
    # 1. 转换为(features, label)格式
    features = {key: df[key].values for key in FEATURE_NAMES}
    dataset = tf.data.Dataset.from_tensor_slices((features, df[LABEL_NAME].values))
    
    # 2. 数据增强处理
    dataset = dataset.shuffle(1000).repeat().batch(batch_size)
    return dataset

def eval_input_fn(df, batch_size=128):
    features = {key: df[key].values for key in FEATURE_NAMES}
    dataset = tf.data.Dataset.from_tensor_slices((features, df[LABEL_NAME].values))
    return dataset.batch(batch_size)

def predict_input_fn(df, batch_size=128):
    features = {key: df[key].values for key in FEATURE_NAMES}
    dataset = tf.data.Dataset.from_tensor_slices(features)
    return dataset.batch(batch_size)

模型构建与训练

TensorFlow提供了多种预制Estimator,我们首先尝试线性回归模型:

OUTDIR = "taxi_trained"

model = tf.estimator.LinearRegressor(
    feature_columns=feature_columns,
    model_dir=OUTDIR,
    config=tf.estimator.RunConfig(tf_random_seed=1)
)

# 训练模型
tf.logging.set_verbosity(tf.logging.INFO)
shutil.rmtree(path=OUTDIR, ignore_errors=True)
model.train(input_fn=lambda: train_input_fn(df=df_train), steps=500)

模型评估

定义评估函数计算RMSE:

def print_rmse(model, df):
    metrics = model.evaluate(input_fn=lambda: eval_input_fn(df))
    print("RMSE = {:.2f}".format(metrics["average_loss"]**0.5))

print_rmse(model, df_valid)

尝试DNN模型

我们可以轻松更换为深度神经网络模型:

model = tf.estimator.DNNRegressor(
    hidden_units=[10, 10],  # 两层网络,每层10个神经元
    feature_columns=feature_columns,
    model_dir=OUTDIR,
    config=tf.estimator.RunConfig(tf_random_seed=1)
)

model.train(input_fn=lambda: train_input_fn(df=df_train), steps=500)
print_rmse(model, df_valid)

性能对比

模型类型验证集RMSE
基准模型7.76
线性回归~9.43
DNN模型~9.26

挑战练习

尝试构建一个神经网络,根据圆柱体的半径(r)和高度(h)预测其体积(V=πr²h)。数据范围:r和h都在0.5到2.0之间。

提示:

  1. 生成随机r和h值
  2. 计算对应的V值
  3. 构建包含r、h和V的数据集
  4. 使用DNNRegressor进行训练

总结

通过本教程,我们学习了:

  1. TensorFlow Estimator API的基本工作流程
  2. 如何定义特征列和输入函数
  3. 如何使用不同的预制Estimator
  4. 模型训练、评估和预测的完整流程

虽然当前模型性能不如基准,但这为后续的特征工程和模型优化奠定了基础。Estimator API的模块化设计使得我们可以轻松尝试不同的模型架构和特征组合。

【免费下载链接】training-data-analyst Labs and demos for courses for GCP Training (http://cloud.google.com/training). 【免费下载链接】training-data-analyst 项目地址: https://gitcode.com/gh_mirrors/tr/training-data-analyst

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

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

抵扣说明:

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

余额充值