如何使用TensorFlow将数据导入以预测Auto MPG数据集(基本回归)中的燃油效率?

如何使用TensorFlow将数据导入以预测Auto MPG数据集(基本回归)中的燃油效率?

简介

在这篇文章中,我们将使用 TensorFlow 建立一个基础回归神经网络,来对来自 Auto MPG 数据集中的燃油效率进行预测。此外,我们还将探讨如何将数据导入 TensorFlow、如何进行特征工程和数据清洗、以及如何调整模型以最大化性能。

为了更好地理解代码和技术概念,本篇文章将使用 Python3 语言和 Jupyter Notebooks。

更多Python教程,请阅读:Python 教程

准备

在开始本文之前,请确保已经在你的系统上安装了 TensorFlow 和 scikit-learn 库。如果你还没有安装,请先安装他们。

!pip install tensorflow
!pip install scikit-learn

数据集

Auto MPG 数据集是一个流行的数据集,包含了 70 年代末和 80 年代初汽车的性能数据,其中包括每个汽车的燃油效率、气缸数、排量、马力等属性。数据的可用性取决于在当时生产汽车的厂商和来源地区的数量。数据集的大小为 398 条数据,共 9 个属性,其中一个是目标属性“MPG”,其他 8 个就是用于预测的属性。

从 scikit-learn 库中导入 Auto MPG 数据集:

from sklearn import datasets
import pandas as pd

data = datasets.load_boston()

df = pd.DataFrame(data.data, columns=data.feature_names)
df['target'] = data.target

df.head()

特征工程和数据清洗

在这个数据集中,我们需要将“mpg”列设置为标签列,将其他列设置为特征列。我们还需要根据需要进行跟踪,为了方便管理,我们将把这些变量存储在“feature_names”和“label_name”变量中。

接下来,我们需要处理一些无效或缺少的数据。这是一个先决条件,如果不清理数据集,我们无法训练模型。我们将使用 pandas 库来完成此任务。

首先,我们将通过查看看数据集中有哪些缺少的值,来确定哪些数据需要清洗。请注意,我们使用“isna()”函数查找缺失的值。

df.isna().sum()

我们可以看到数据集里面没有缺失值,因此可以跳过下一步的处理。我们需要将数据分为训练和测试数据集,以便进行模型验证,为了消除随机性,请设置随机数种子。

from sklearn.model_selection import train_test_split

feature_names = data.feature_names
label_name = 'target'

train_df, test_df = train_test_split(df, 
                                     test_size=0.2, 
                                     random_state=42)

train_df.head()

由于转换过程很琐碎,因此我们将它们包装在preprocessor函数中。我们将使用 StandardScaler 对特征进行缩放,以便我们的网络在训练时不会受到特征差异的影响。

from sklearn.preprocessing import StandardScaler

def preprocessor(df, feature_names, label_name):
    x_train = df[feature_names]
    y_train = df[label_name]

    # 缩放特征
    scaler = StandardScaler().fit(x_train)
    x_train = scaler.transform(x_train)

    return x_train, y_train

x_train, y_train = preprocessor(train_df, feature_names, label_name)

print(x_train[:10])
print(y_train[:10])

创建模型

我们使用 TensorFlow 创建一个非常简单的神经网络,其仅具有一个层和一个神经元。我们还将使用整个数据集进行训练,因为我们的数据集较小,我们不需要进行数据批处理。我们将使用 mean_squared_error 来计算损失,并使用 Adam 优化器进行模型优化。 我们将使用 metrics 库中的“mean_absolute_error”和“mean_squared_error”函数来衡量模型表现。

import tensorflow as tf
from tensorflow.keras import layers

# 定义模型
model = tf.keras.Sequential()
model.add(layers.Dense(1, activation='linear', input_shape=[len(feature_names),]))

# 编译模型
model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(),
              metrics=['mean_absolute_error', 'mean_squared_error'])

# 训练模型
history = model.fit(x_train, y_train, epochs=100, verbose=2)

模型评估

现在,我们已经训练了一个基本的回归模型,让我们看看它的表现如何。我们将使用测试数据集对模型进行评估。

# 缩放测试数据中的特征
x_test, y_test = preprocessor(test_df, feature_names, label_name)

# 评估模型
model.evaluate(x_test, y_test, verbose=2)

现在我们可以看到,该模型的平均绝对误差约为 2.44,均方误差约为 10.0。虽然这可能对于这个相对简单的模型来说已经很不错了,但对于更复杂的模型,我们需要更小的误差以获得更准确的预测。

优化模型

考虑到模型性能不是很好,我们需要对其进行优化。这里有很多调整我们可以尝试,每次调整都会影响模型的性能。

我们可以考虑以下这些:

  • 添加更多的神经元或更多的层,以构建更复杂的模型。
  • 调整学习率以找到更好的模型收敛速度和性能平衡。
  • 调整批量大小以找到更好的模型收敛速度和性能平衡。
  • 增加训练时期,以便模型有更多的时间学习。
  • 使用正则化避免过度拟合。

例如,我们可以增加隐藏层,增加训练时期,以及修改学习率。

# 定义模型
model = tf.keras.Sequential()
model.add(layers.Dense(128, activation='relu', input_shape=[len(feature_names),]))
model.add(layers.Dense(1, activation='linear'))

# 编译模型
model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(learning_rate=0.01),
              metrics=['mean_absolute_error', 'mean_squared_error'])

# 训练模型
history = model.fit(x_train, y_train, epochs=500, batch_size=32, verbose=2)

# 评估模型
model.evaluate(x_test, y_test, verbose=2)

这次我们得到了更好的结果。平均绝对误差约为 1.94,均方误差约为 5.66。这比我们最初的结果更好。

结论

在本文中,我们学习了如何使用 TensorFlow、导入数据、对数据进行特征工程和数据清洗、创建和训练基础回归模型、进行模型评估和调整模型以提高性能。当然,这只是一个简单的示例,但我们可以使用相同的技术来处理更复杂的数据集和模型。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程