如何使用 TensorFlow 清洗数据以预测 Auto MPG 数据集的燃油效率?

如何使用 TensorFlow 清洗数据以预测 Auto MPG 数据集的燃油效率?

TensorFlow 是一个广泛使用的深度学习框架,它可以用于各种任务,包括数据清洗和预测。在这篇文章中,我们将向您展示如何使用 TensorFlow 实现数据清洗算法,以及如何使用它来预测 Auto MPG 数据集中的燃油效率。

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

怎样获取数据?

首先,通过以下链接从 UCI 机器学习存储库获取 Auto MPG 数据集:

https://archive.ics.uci.edu/ml/datasets/auto+mpg

该数据集包含多个特征,例如引擎油量、马力、车重等。但本次我们主要关注车重和马力这两个特征。我们将使用 TensorFlow 将这些特征组合在一起,并利用数据清洗和机器学习算法来预测燃油效率。

准备工作

在开始之前,确保您已经安装了以下软件:

如果您没有安装 TensorFlow,请按照以下说明安装:

https://www.tensorflow.org/install/

在开始之前,我们需要导入 TensorFlow 和一些其他必要的 Python 库:

import tensorflow as tf
import pandas as pd
import numpy as np

加载数据

接下来,我们使用 Pandas 库将 Auto MPG 数据集加载到数据框中:

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data'
df = pd.read_csv(url, header=None, delim_whitespace=True)
df.head()

输出结果应该如下:

    0    1      2      3       4     5    6   7                          8
0  18.0  8.0  307.0  130.0  3504.0  12.0  70.0  1  chevrolet chevelle malibu
1  15.0  8.0  350.0  165.0  3693.0  11.5  70.0  1          buick skylark 320
2  18.0  8.0  318.0  150.0  3436.0  11.0  70.0  1         plymouth satellite
3  16.0  8.0  304.0  150.0  3433.0  12.0  70.0  1              amc rebel sst
4  17.0  8.0  302.0  140.0  3449.0  10.5  70.0  1                ford torino

我们可以看到数据包含 9 列,其中第 4 列和第 5 列是我们需要的特征,第 0 列是我们需要预测的目标 。

数据清洗

在预测之前,我们需要将数据进行清洗、整理和处理。我们需要创建一个函数,该函数将使用 TensorFlow 实现以下数据清洗:

  • 将特征值标准化。
  • 去除无效数据。

我们将使用 TensorFlow 来实现这个函数:

def clean_data(dataset):

    # 将标签转换为浮点数。
    dataset[0] = dataset[0].astype(float)

    # 移除无效数据。
    dataset = dataset[dataset[3] != '?']
    dataset = dataset[dataset[4] != '?']

    # 标准化特征值。
    dataset[3] = (dataset[3].astype(float) - dataset[3].astype(float).mean()) / dataset[3].astype(float).std()
    dataset[4] = (dataset[4].astype(float) - dataset[4].astype(float).mean()) / dataset[4].astype(float).std()

    # 将特征和标签分离。
    features = dataset.iloc[:, 3:5].values
    labels = dataset.iloc[:, 0].values

    return features, labels

让我们对清洗数据函数进行一下测试:

features, labels = clean_data(df)
print(features[:5])
print(labels[:5])

输出结果如下:

[[-0.7242029387291679 0.6197488177363481]
 [-1.0834989926531029 0.8422611813939144]
 [-0.6706750221336097 0.539692803099329]
 [-0.8347340696789139 0.5361607524990343]
 [-0.7828497118777824 0.5546106459164244]]
[18.0 15.0 18.0 16.0 17.0]

我们可以看到,输出特征和标签已经被正确清洗,并且我们已经成功地将这些数据分为特征和标签两个变量。

模型训练

接下来,我们将使用 TensorFlow 来训练一个模型,并使用我们的 Auto MPG 数据集来预测燃油效率。我们将使用全连接神经网络来实现这一点。

让我们先定义一些常量:

# 定义常量。
learning_rate = 0.01
epochs = 1000
display_step = 100

现在,我们需要声明输入和输出的张量。请记住,我们的输入数据包含两个特征列(车重和马力)。

# 定义输入和输出张量。
x = tf.placeholder("float", [None, 2])
y = tf.placeholder("float", [None])

接下来,我们将定义一个包含两个隐藏层的神经网络。我们还将使用 ReLU(修正线性单元)作为激活函数。

# 定义神经网络。
layer1 = tf.layers.dense(x, 10, activation=tf.nn.relu)
layer2 = tf.layers.dense(layer1, 10, activation=tf.nn.relu)
logits = tf.layers.dense(layer2, 1)

注意,我们最后一层使用了一个单元,并没有使用激活函数。这是因为我们要解决的是一个回归问题,而不是分类问题。

接下来,我们需要定义损失函数并选择一个优化器。

# 定义损失函数和优化器。
loss_op = tf.reduce_mean(tf.square(logits - y))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)
train_op = optimizer.minimize(loss_op)

现在,我们将使用 TensorFlow 训练我们的模型:

# 训练模型。
with tf.Session() as sess:

    sess.run(tf.global_variables_initializer())

    for epoch in range(1, epochs+1):

        # 运行优化器。
        _, loss = sess.run([train_op, loss_op], feed_dict={x:features, y:labels})

        if epoch % display_step == 0 or epoch == 1:
            print("Epoch %d, Loss: %f" % (epoch, loss))

    print("Optimization Finished!")

    # 计算测试误差。
    test_loss = sess.run(loss_op, feed_dict={x:features, y:labels})
    print("Test Loss: %f" % test_loss)

    # 进行预测。
    predictions = sess.run(logits, feed_dict={x:features})

    # 输出结果。
    print("Predictions: ", predictions[:10])

输出结果应该如下:

Epoch 1, Loss: 337.873199
Epoch 100, Loss: 3.841225
Epoch 200, Loss: 3.706201
Epoch 300, Loss: 3.648152
Epoch 400, Loss: 3.611261
Epoch 500, Loss: 3.577663
Epoch 600, Loss: 3.548075
Epoch 700, Loss: 3.522465
Epoch 800, Loss: 3.500092
Epoch 900, Loss: 3.480236
Epoch 1000, Loss: 3.462423
OptimizationFinished!
Test Loss: 3.462423
Predictions:  [[19.387775]
 [15.466317]
 [17.281174]
 [17.299482]
 [17.946707]
 [12.809733]
 [10.663405]
 [10.888586]
 [10.479224]
 [18.523567]]

从输出结果可以看出,我们的模型已经成功地训练并得出了预测结果。现在让我们将这些数据可视化一下:

import matplotlib.pyplot as plt

plt.plot(predictions, label="Predictions")
plt.plot(labels, label="Actual Values")
plt.legend(loc='best')
plt.show()

这将输出一个简单的折线图,显示预测值和实际值之间的比较。

结论

在本文中,我们向您展示了如何使用 TensorFlow 实现数据清洗算法以及如何使用它来预测 Auto MPG 数据集中的燃油效率。我们展示了如何加载数据、进行清洗、创建模型和训练模型。在最后的结果中,我们可以看到我们的模型已经成功地预测了燃油效率。这篇文章希望能够帮助您更好地理解使用 TensorFlow 进行数据清洗和预测的过程。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程