如何使用TensorFlow数据集预测汽车MPG的燃油效率?

如何使用TensorFlow数据集预测汽车MPG的燃油效率?

燃油效率通常被衡量为每加仑英里数(Miles Per Gallon,简称MPG),它是衡量汽车燃油经济性的重要标准之一。在汽车行业中,预测车辆的燃油效率是一个关键的问题。本文将介绍如何使用TensorFlow数据集预测汽车的MPG。

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

TensorFlow数据集简介

TensorFlow数据集是一个由TensorFlow开发团队维护的数据集工具包,它可以加载和处理常用的数据集,并用于深度学习任务。包括图像、文本、音频和其他领域的数据集。TensorFlow数据集不仅提供了数据集,还提供了数据预处理、数据增强、数据格式转换等常用功能,方便用户用于模型训练和评估。本文所使用的数据集为UCI Machine Learning Repository提供的Auto MPG数据集。

下载Auto MPG数据集

在本文中,我们使用Auto MPG数据集,数据集包含了不同品牌的汽车的各种属性和MPG值。将数据集下载到本地,并将数据集的文件名命名为auto-mpg.data。

!wget https://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data

加载数据集

对于数据集的加载,TensorFlow数据集提供了一组快速加载数据集的API。首先,需要安装TensorFlow数据集,可以通过以下命令进行安装。

!pip install tensorflow-datasets

安装好TensorFlow数据集后,我们可以通过tensorflow-datasets模块快速读取Auto MPG数据集,具体代码如下:

import tensorflow_datasets as tfds

dataset = tfds.load("auto_mpg", split=tfds.Split.TRAIN)

for data in dataset.take(1):
    print(data)

我们使用tfds.load()方法加载数据集,其中的参数”auto_mpg”表示数据集的名称,”tfds.Split.TRAIN”表示分割方式为训练集。通过take()方法可以选择取出一定量的数据进行处理,我们这里取出一个数据进行展示。

数据处理

数据集处理包括特征工程和数据准备两个方面。在这个过程中,我们将探索数据并将其转换为可用于训练模型的形式。

数据集探索

在使用数据集之前,我们需要先了解这个数据集的内容和格式。打印出前五行数据,查看数据集的格式。

import pandas as pd

dataframe = pd.read_csv("auto-mpg.data", header=None, sep="\s+", encoding="utf-8")
dataframe.columns = ["mpg", "cylinders", "displacement", "horsepower", "weight", "acceleration", "model year", "origin", "car name"]
print(dataframe.head())

输出结果如下:

    mpg  cylinders  displacement horsepower  weight  acceleration  model year  origin                   car name
0  18.0          8         307.0      130.0  3504.0          12.0          70       1  chevrolet chevelle malibu
1  15.0          8         350.0      165.0  3693.0          11.5          70       1          buick skylark 320
2  18.0          8         318.0      150.0  3436.0          11.0          70       1         plymouth satellite
3  16.0          8         304.0      150.0  3433.0          12.0          70       1              amc rebel sst
4  17.0          8         302.0      140.0  3449.0         11.0          70       1     ford torino

以上代码将Auto MPG数据集文件加载到pandas的dataframe中,并进行了一些列别。输出结果显示,该数据集包含了九个字段,包括`mpg`(每加仑的英里数),`cylinders`(气缸数),`displacement`(排量),`horsepower`(马力),`weight`(重量),`acceleration`(加速度),`model year`(生产年份),`origin`(产地)和`car name`(汽车型号)。其中`horsepower`字段的数据类型是字符串,我们需要将其转换为浮点数类型。

```python
import numpy as np

dataframe.replace("?", np.nan, inplace=True)
dataframe.dropna(inplace=True)
dataframe["horsepower"] = dataframe["horsepower"].astype("float")
print(dataframe.info())

输出结果如下:

<class 'pandas.core.frame.DataFrame'>
Int64Index: 392 entries, 0 to 398
Data columns (total 9 columns):
 #   Column        Non-Null Count  Dtype  
---  ------        --------------  -----  
 0   mpg           392 non-null    float64
 1   cylinders     392 non-null    int64  
 2   displacement  392 non-null    float64
 3   horsepower    392 non-null    float64
 4   weight        392 non-null    float64
 5   acceleration  392 non-null    float64
 6   model year    392 non-null    int64  
 7   origin        392 non-null    int64  
 8   car name      392 non-null    object 
dtypes: float64(5), int64(3), object(1)
memory usage: 30.6+ KB
None

以上代码中,我们使用了pandas.DataFrame.replace()方法,将horsepower字段中的”?”替换成NaN缺失值,并通过pandas.DataFrame.dropna()方法删除了缺失值所在的行。接下来,将horsepower字段的数据类型转换为float类型,并通过pandas.DataFrame.info()方法输出dataframe的一些信息,包含了行数、列数、每个字段的类型等。

特征工程

特征工程的目的是将数据转换为模型可以理解的形式。在这个过程中,我们将对每个特征进行分析,并进行一些操作,例如特征缩放、特征选择和属性组合等。

import tensorflow as tf

def norm(x):
    return (x - train_stats['mean']) / train_stats['std']

train_dataset = dataframe.sample(frac=0.8, random_state=0)
test_dataset = dataframe.drop(train_dataset.index)

train_stats = train_dataset.describe()
train_stats.pop("mpg")
train_stats = train_stats.transpose()
train_labels = train_dataset.pop("mpg")
test_labels = test_dataset.pop("mpg")

normed_train_data = norm(train_dataset)
normed_test_data = norm(test_dataset)

以上代码中,我们首先按80:20的比例将数据集划分为训练集和测试集。然后,通过pandas.DataFrame.describe()方法获取主要的统计信息,例如均值、最大值、最小值等。将数据中的标签字段mpg单独取出,作为训练集和测试集的标签。

norm()函数用于将每个字段进行标准化处理,即所有字段按照均值为0,方差为1的标准正态分布进行缩放。最后将正态化的训练集和测试集数据保存在normed_train_datanormed_test_data中用于模型训练和评估。

搭建模型

使用TensorFlow Keras API来定义和编译神经网络模型。在这个过程中,我们将配置各层的节点数量和节点功能,并定义损失函数和优化器。

def build_model():
    model = tf.keras.Sequential([
        tf.keras.layers.Dense(64, activation="relu", input_shape=[len(train_dataset.keys()]),
        tf.keras.layers.Dense(64, activation="relu"),
        tf.keras.layers.Dense(1)
    ])

    optimizer = tf.keras.optimizers.RMSprop(0.001)

    model.compile(loss="mse",
                  optimizer=optimizer,
                  metrics=["mae", "mse"])
    return model

model = build_model()
model.summary()

以上代码中,我们使用tf.keras.Sequential()方法来定义一个序列模型,该模型包含三个全连接层。第一层有64个节点,激活函数为ReLU,输入为训练集中的特征数量。第二层同样有64个节点,并重新使用ReLU作为激活函数。最后的输出层只有一个节点,它没有激活函数,因为我们要预测的是单一值。

在优化器中使用了RMSprop算法和学习率为0.001,损失函数使用均方误差(Mean Squared Error,MSE),计算模型的评估指标包括平均绝对误差(Mean Absolute Error,MAE)和均方误差(MSE)。

训练模型

有了数据集和模型之后,我们就可以训练模型了。在训练过程中,我们需要为训练集和测试集提供数据,设置训练的epoch数量和批次大小,并使用model.fit()方法来训练模型。

history = model.fit(normed_train_data, train_labels, epochs=500, validation_split=0.2, verbose=0)

hist = pd.DataFrame(history.history)
hist["epoch"] = history.epoch
print(hist.tail())

model.fit()方法有许多参数可以配置,包括epochs(训练的epoch数量),batch_size(批次大小),validation_split(用于验证的数据比例)和verbose(日志输出级别)等。其中,verbose参数控制输出的详细程度,如设置为0,则不输出任何信息。

评估模型

在训练之后,我们需要评估模型的性能。通过model.evaluate()方法可以评估经过训练后的模型在测试数据集上的性能表现。

test_loss, test_mae, test_mse = model.evaluate(normed_test_data, test_labels, verbose=0)

print(f"Test Loss: {test_loss:.2f}\nTest MAE: {test_mae:.2f}\nTest MSE: {test_mse:.2f}")

以上代码中,我们使用model.evaluate()方法,在测试数据集上对模型进行评估。输出模型在测试数据集上的损失值(Test Loss)、平均绝对误差(Test MAE)和均方误差(Test MSE)等指标。

我们还可以使用model.predict()方法对新样本进行预测,例如:

mpg_pred = model.predict(norm(pd.DataFrame({"cylinders": [6], "displacement": [225], "horsepower": [100], "weight": [3060], "acceleration": [17.5], "model year": [76], "origin": [1]})))
print(f"Prediction of MPG: {mpg_pred[0][0]:.2f}")

此处我们输入了一个与Auto MPG数据集类似的新样本,并使用模型进行预测。输出预测结果。预测结果可能会与实际值有所偏差,这需要我们对预测模型进行更深入的研究和改进。

结论

在此文中,我们介绍了如何使用TensorFlow数据集预测汽车MPG的燃油效率。通过数据集的处理和分析,使用序列模型进行训练,并评估了经过训练后的模型在测试数据集上的性能。这是一个入门级别的教程,如果你希望进一步学习深度学习的知识,推荐你阅读TensorFlow的官方文档,或者尝试从事相关领域的项目开发。祝你在机器学习和深度学习方面取得成功!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程