Path: blob/master/site/zh-cn/tutorials/estimator/linear.ipynb
25118 views
Copyright 2019 The TensorFlow Authors.
使用 Estimator 构建线性模型
安装
加载 Titanic 数据集
使用 Titanic 数据集的目的是在给定诸如性别、年龄、阶级等特征的情况下预测乘客能否生存(相当病态)。
探索数据
该数据集包含以下特征
训练和评估集中分别有 627 个和 264 个样本。
大部分乘客的年龄为 20 多岁和 30 多岁。
男性乘客人数大约是女性乘客人数的两倍。
大多数乘客位于“三等”舱。
与男性相比,女性的幸存机率要高得多。这显然是模型的预测性特征。
模型的特征工程
Estimator 使用名为特征列的系统来描述模型应如何解释每个原始输入特征。需要为 Estimator 提供数字输入向量, 特征列描述了模型应如何转换各个特征。
选择和制作一组正确的特征列是学习高效模型的关键。特征列可以是原始特征 dict
(基础特征列)中的一项原始输入,也可以是使用一个或多个基础列定义的转换创建的任何新列(派生特征列)。
线性 Estimator 同时使用数字和分类特征。特征列可与所有 TensorFlow Estimator 配合使用,其目的是定义用于建模的特征。此外,它们还提供了一些特征工程功能,例如独热编码、归一化和分桶。
基础特征列
input_function
指定如何将数据转换为流式馈送输入流水线的 tf.data.Dataset
。tf.data.Dataset
支持多种来源,例如数据帧、csv 格式文件等。
您可以检查数据集:
您还可以使用 tf.keras.layers.DenseFeatures
层来检查特定特征列的结果:
DenseFeatures
仅接受密集张量,要检查分类列,您需要先将其转换为指示列:
将所有基础特征添加到模型后,让我们开始训练模型。训练模型仅为使用 tf.estimator
API 的单个命令:
派生特征列
现在,您已达到 75% 的准确率。单独使用每个基本特征列可能不足以解释数据。例如,年龄和标签之间的相关性可能因性别不同而不同。因此,如果您只学习了 gender="Male"
和 gender="Female"
的单个模型权重,则将无法捕获每个年龄-性别组合(例如区分 gender="Male"
和 age="30"
以及 gender="Male"
和 age="40"
)。
要了解不同特征组合之间的区别,您可以向模型添加交叉特征列(也可以在添加交叉列之前对年龄列进行分桶):
将组合特征添加到模型后,让我们再次训练模型:
现在,准确率已达 77.6%,与仅使用基础特征进行训练相比略高。您可以尝试使用更多特征和转换,看看能否进一步提高准确率!
现在,您可以使用训练模型对评估集内的乘客进行预测。TensorFlow 模型进行了优化,能够每次以一批或一组样本的方式进行预测。之前,eval_input_fn
是使用整个评估集定义的。
最后,查看结果的受试者工作特征 (ROC),这将使我们能够在真正例率与假正例率之间更好地加以权衡。