如何在TensorFlow上构建顺序模型来预测车辆的燃油效率?
TensorFlow是Google推出的流行机器学习框架,经过多年的发展,支持用于构建神经网络模型进行训练和推理,以及进行数值计算和数据处理。该框架非常适合解决各种领域的机器学习和深度学习问题,包括汽车行业。在汽车行业中,TensorFlow可以用于构建顺序模型来预测车辆燃油效率。本文将介绍如何在TensorFlow上构建机器学习模型来解决这个问题。
更多Python教程,请阅读:Python 教程
数据集介绍
本文的数据集是汽车MPG(miles per gallon)。它包含了位于1983年的模拟测试,来自多家汽车制造商,包含了多达15个季度车型的数据,每个季度的数量是不同的。 有些示例为插电式混合动力,但不包括电力车或氢气燃料电池车。如前所述,这个数据集的任务是预测每个车辆的燃油效率(称为MPG),基于该车辆的一些特征。我们将使用TensorFlow来构建机器学习模型,使其在看到新的车辆特征时能够预测他们的MPG。
车辆特征
汽车MPG数据集包含以下特征:
- mpg: 每加仑英里数。
- cylinders:气缸数量(4, 6或8)。
- displacement: 发动机排量(立方英尺)。
- horsepower: 发动机功率。
- weight: 车辆重量(磅)。
- acceleration: 速度变化(英尺每秒平方)。
- model year: 发行年份。
- origin: 生产地(1=美国,2=欧洲,3=日本)。
- car name: 车型名字。
为了使用这些特征预测汽车的燃油效率,我们需要对它们进行一些处理。首先,我们需要将类别数据转换为数值数据。在此数据集中,我们唯一一个分类特征是产地,我们将其转换为三个二进制分类特征。此外,我们需要对数字特征进行规范化,以确保它们在同一范围内。最后,我们需要从数据中删除车型名称这个特征,因为它不直接与MPG关联。
以下是代码用于处理汽车MPG数据集:
import pandas as pd
# 导入数据集
dataset_url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data'
column_names = ['MPG', 'Cylinders', 'Displacement', 'Horsepower', 'Weight',
'Acceleration', 'ModelYear', 'Origin', 'CarName']
raw_dataset = pd.read_csv(dataset_url, names=column_names,
na_values='?', comment='\t', sep=' ', skipinitialspace=True)
# 删除车型名称
dataset = raw_dataset.drop(['CarName'], axis=1)
# 处理缺失值
dataset = dataset.dropna()
# 处理类别数据
dataset['Origin'] = dataset['Origin'].map({1: 'USA', 2: 'Europe', 3: 'Japan'})
dataset = pd.get_dummies(dataset, prefix='', prefix_sep='')
# 规范化数字特征
train_dataset = dataset.sample(frac=0.8, random_state=0)
test_dataset = dataset.drop(train_dataset.index)
train_stats = train_dataset.describe()
train_stats.pop('MPG')
train_stats = train_stats.transpose()
def norm(x):
return (x - train_stats['mean']) / train_stats['std']
normed_train_data = norm(train_dataset.drop('MPG', axis=1)
normed_test_data = norm(test_dataset.drop('MPG', axis=1))
构建机器学习模型
现在我们已经准备好数据,可以开始构建我们的机器学习模型了。在这里,我们将使用TensorFlow的Keras API构建一个顺序模型。这个模型包含了两个隐藏层,每个层有64个神经元,以及一个输出层,它输出一个单一的连续值,也就是燃油效率。
以下是代码用于构建模型:
import tensorflow as tf
from tensorflow.keras import layers
model = tf.keras.Sequential([
layers.Dense(64, activation='relu', input_shape=[len(train_dataset.keys())-1]),
layers.Dense(64, activation='relu'),
layers.Dense(1)
])
model.compile(loss='mean_squared_error',
optimizer=tf.keras.optimizers.RMSprop(0.001),
metrics=['mean_absolute_error', 'mean_squared_error'])
这个模型使用的损失函数是均方误差(MSE),优化器是RMSprop。我们选择MSE作为损失函数,因为我们的任务是预测燃油效率,这是一个回归问题。我们希望训练模型能够最小化它的预测结果与实际值之间的差异。我们选择RMSprop优化器,因为它是Adam优化器的一种变体,它显示出对神经网络训练的收敛速度有所改进。我们还选择了平均绝对误差和均方误差作为衡量模型性能的指标。
训练模型
在训练模型之前,我们需要定义一些超参数,例如训练次数(epochs)和批次大小(batch_size)等。我们将这些超参数设置为1000和64,分别表示模型将在所有训练数据上运行1000个周期,并在每个周期上使用64个样本更新权重。
以下是代码用于训练模型:
EPOCHS = 1000
BATCH_SIZE = 64
history = model.fit(normed_train_data, train_dataset['MPG'],
epochs=EPOCHS, batch_size=BATCH_SIZE,
validation_split=0.2, verbose=0)
训练模型需要一定的时间,具体取决于数据集的大小和计算硬件的性能。在实践中,我们通常要对训练期间的模型性能进行监控,并根据需要调整超参数。我们使用validation_split=0.2选项将训练数据集分割成80%的训练数据和20%的验证数据,用于评估模型是否出现过拟合的情况。训练期间的输出将显示模型在每个周期上的训练和验证损失、均方误差和平均绝对误差。
评估模型
模型训练结束后,我们需要评估它的表现。我们可以使用测试集上的数据来评估模型,也可以使用交叉验证等其他技术。在这里,我们将使用测试集来评估模型。
以下是代码用于评估模型:
loss, mae, mse = model.evaluate(normed_test_data, test_dataset['MPG'], verbose=2)
print("Test set Mean Absolute Error: {:5.2f} MPG".format(mae))
这个测试代码的输出将报告模型在测试数据集上的平均绝对误差,即预测值和实际值之间的差异。较小的平均绝对误差值表示模型具有更高的准确性。
做出预测
最后,我们可以使用模型来做出新样本的燃油效率预测。下面是使用测试样本做出预测的代码:
test_predictions = model.predict(normed_test_data).flatten()
print("Predicted MPG: ", test_predictions)
这个测试代码将输出测试数据集上的预测值,我们可以将它们与实际值进行比较,并计算平均绝对误差来确定模型是否适用于新数据集。
结论
在本文中,我们介绍了如何在TensorFlow上构建顺序模型来预测车辆的燃油效率。我们对汽车MPG数据集进行了预处理,并使用TensorFlow的Keras API构建了一个顺序模型。我们选择了均方误差作为损失函数,RMSprop作为优化器,并使用测试集对模型进行了评估。最后,我们使用模型对测试样本进行了预测并输出了预测值。这些步骤可以用于解决许多其他的回归问题,并可以根据需要进行修改。