📜  使用Tensorflow进行线性回归(1)

📅  最后修改于: 2023-12-03 14:49:51.813000             🧑  作者: Mango

使用Tensorflow进行线性回归

线性回归是最基本的回归算法之一,它可以用来预测一个数值型的目标变量。TensorFlow是一个非常流行的深度学习框架,它也可以用来实现线性回归。

简介

我们将使用TensorFlow来训练一个线性回归模型,然后使用模型来预测房价。在这个例子中,我们使用的是波士顿房价数据集。这个数据集包含了506个样本,每个样本包含了13个特征,以及一个房屋的中位价。

实现
导入库

我们首先需要导入需要使用的库:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
数据加载和预处理

我们使用sklearn中的load_boston函数来加载波士顿房价数据集:

boston = load_boston()
X = boston.data
y = boston.target

为了更好地利用数据,我们可以对数据进行标准化处理:

X = (X - np.mean(X, axis=0)) / np.std(X, axis=0)

将数据集划分为训练集和测试集:

n_samples = X.shape[0]
train_size = int(n_samples * 0.8)
rand_idx = np.random.permutation(n_samples)
train_idx = rand_idx[:train_size]
test_idx = rand_idx[train_size:]
train_X, train_y = X[train_idx], y[train_idx]
test_X, test_y = X[test_idx], y[test_idx]
构建模型

我们使用TensorFlow来构建线性回归模型:

num_features = X.shape[1]
learning_rate = 0.01
num_epochs = 1000

X = tf.placeholder(tf.float32, [None, num_features], name='X')
y = tf.placeholder(tf.float32, [None], name='y')
W = tf.Variable(tf.zeros([num_features, 1]), name='W')
b = tf.Variable(tf.zeros([1]), name='b')
y_pred = tf.matmul(X, W) + b
loss = tf.reduce_mean(tf.square(y_pred - y))
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
训练模型

我们使用训练集来训练模型,并在每次迭代后计算损失值:

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for epoch in range(num_epochs):
        sess.run(optimizer, feed_dict={X: train_X, y: train_y})
        if (epoch + 1) % 100 == 0:
            loss_val = sess.run(loss, feed_dict={X: train_X, y: train_y})
            print('Epoch {}: loss = {}'.format(epoch + 1, loss_val))
    W_val, b_val = sess.run([W, b])
模型评估

我们使用测试集来评估模型的效果:

with tf.Session() as sess:
    y_pred_val = sess.run(y_pred, feed_dict={X: test_X})
mse = np.mean(np.square(y_pred_val - test_y))
print('Mean squared error = {}'.format(mse))
结果可视化

我们可以将预测值和真实值进行比较,以了解模型的预测效果:

plt.scatter(y_pred_val, test_y)
plt.xlabel('Predicted values')
plt.ylabel('Actual values')
plt.show()
总结

在本文中,我们介绍了如何使用TensorFlow来进行线性回归。我们首先加载并预处理了波士顿房价数据集,然后构建了线性回归模型,并使用训练集对模型进行训练。最后,我们评估了模型的效果,并可视化了预测结果和真实值之间的关系。