如何使用TensorFlow基于Auto MPG评估模型?
Auto MPG评估数据集是一个常用的数据集,用于预测70年代末到80年代初美国汽车的燃油效率(每加仑英里数)。本文将介绍如何使用TensorFlow创建和训练一个基于Auto MPG数据集的回归模型,并对其进行评估。
阅读更多:Python 教程
导入数据
首先,我们需要导入数据,并对其进行探索。我们将使用pandas库来读取CSV文件,并显示前几行数据以检查导入是否成功。
import pandas as pd
data_url = "http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data"
column_names = ["MPG","Cylinders","Displacement","Horsepower","Weight",
"Acceleration","Model Year","Origin"]
raw_dataset = pd.read_csv(data_url, names=column_names,
na_values = "?", comment='\t',
sep=" ", skipinitialspace=True)
dataset = raw_dataset.copy()
dataset.tail()
输出如下:
MPG Cylinders Displacement Horsepower Weight Acceleration Model Year Origin
393 27.0 4 140.0 86.0 2790.0 15.6 82 1
394 44.0 4 97.0 52.0 2130.0 24.6 82 2
395 32.0 4 135.0 84.0 2295.0 11.6 82 1
396 28.0 4 120.0 79.0 2625.0 18.6 82 1
397 31.0 4 119.0 82.0 2720.0 19.4 82 1
我们可以看到,Auto MPG数据集包含8个特征,包括MPG、Cylinders、Displacement等,及一个输出标签,即MPG。
接下来,我们需要对数据进行清理和预处理。我们可以使用dataset.isna().sum()
来检查是否存在缺失值。在这个数据集中,缺失值只存在于Horsepower列,我们可以通过将其替换为平均值来处理这些缺失值。
dataset = dataset.dropna()
horsepower_median = dataset['Horsepower'].median()
dataset['Horsepower'] = dataset['Horsepower'].fillna(horsepower_median)
train_dataset = dataset.sample(frac=0.8,random_state=0)
test_dataset = dataset.drop(train_dataset.index)
我们使用dataset.dropna()
将所有包含缺失值的行删除。然后,我们使用Horsepower列的中位数来替换空值。
最后,我们通过随机采样将数据集分为训练集和测试集。
探索数据
我们现在可以探索数据集,以确定特征之间的相互关系。我们可以使用Seaborn库的pairplot函数来绘制不同特征之间的散点图。这将使我们更好地了解Auto MPG数据集中每个特征的相关性。
import seaborn as sns
sns.pairplot(train_dataset[["MPG", "Cylinders", "Displacement", "Weight"]], diag_kind="kde")
这些关系显示为散点图,其中每个数据点都与相应的特征填充。对角线上的“核密度图”是单变量分布,这个变量可以显示为突出的峰或高斯风格的曲线。
准备数据
在训练和测试模型之前,我们需要对数据进行处理,使其成为模型可以利用的形式。对于此,我们需要对数据进行标准化处理,以使所有特征具有相同的重要性和范围。我们可以通过减去每个特征的平均值并除以每个特征的标准差来完成标准化。我们将使用sklearn库的StandardScaler类来实现这一点。
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
train_features = train_dataset.drop(['MPG'], axis=1)
train_labels = train_dataset['MPG']
test_features = test_dataset.drop(['MPG'], axis=1)
test_labels = test_dataset['MPG']
train_features = scaler.fit_transform(train_features)
test_features = scaler.transform(test_features)
在这里,我们首先分离训练集和测试集中的标签和特征。然后,我们使用fit_transform函数对训练集的特征进行标准化处理,并使用transform函数对测试集的特征进行标准化处理。
创建模型
我们将使用Keras API创建模型。Keras API是TensorFlow的高级API,其易于使用且能够快速实现各种深度学习模型。我们将使用顺序模型Sequential(),它是一个简单的线性堆栈模型。模型中包含三个密集层,每层的激活函数使用ReLU,最后一层仅包含单一的输出节点。
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
model = Sequential([
Dense(64, activation='relu', input_shape=[len(train_features[0])]),
Dense(64, activation='relu'),
Dense(1)
])
在这里,我们使用Dense层创建了三个密集层。每个层都包含64个神经元和ReLU激活函数。最后一层只有一个输出节点,因为这是一个回归模型。输入形状是训练集特征的长度。
编译模型
在训练模型之前,我们需要设置一些参数,以确定优化器、损失函数和评估指标。在这里,我们将使用Adam优化器,均方误差作为损失函数和平均绝对误差指标。
model.compile(optimizer='adam', loss='mse', metrics=['mae', 'mse'])
在这里,我们使用compile函数来编译模型,并传递我们想要使用的优化器、损失函数和指标。
训练模型
我们现在准备好训练模型了。在这里,我们将使用fit函数来训练模型,并传递训练数据和标签。我们可以使用validation_split参数将20%的训练数据用作验证数据。
history = model.fit(train_features, train_labels, epochs=100, validation_split=0.2)
在这里,我们使用fit函数进行模型训练,并传递训练集和标签,以及epochs和validation_split参数。这将输出模型关于训练和验证误差的历史记录。
评估模型
我们现在可以使用测试数据集来评估我们的模型了。在这里,我们将使用evaluate函数来计算模型的均方误差和平均绝对误差。
loss, mae, mse = model.evaluate(test_features, test_labels, verbose=0)
print("Testing set Mean Abs Error: {:5.2f} MPG".format(mae))
在这里,我们使用evaluate函数来评估模型,并输出平均绝对误差。
预测数据
最后,我们可以使用我们的模型来对新数据进行预测。在这里,我们将使用predict函数来预测来自测试数据集的MPG标签。然后,我们将输出前五个预测的MPG标签和与其对应的真实MPG标签。
predictions =model.predict(test_features).flatten()
print("Predictions: ", predictions[:5])
print("True Values: ", test_labels[:5].values)
在这里,我们使用predict函数来预测测试数据的MPG标签。然后,我们输出前五个预测值和相应的真实值。
结论
在这篇文章中,我们介绍了如何使用TensorFlow基于Auto MPG数据集创建、训练和评估回归模型。我们演示了如何导入和探索数据,如何准备数据以进行训练,如何创建、编译和训练模型,如何评估模型并对数据进行预测。
在实际项目中,我们可以根据自己的需求使用更复杂的神经网络模型和更广泛的数据集。