欢迎访问宙启技术站
智能推送

使用Python实现线性回归算法

发布时间:2023-12-04 12:54:20

线性回归是一种基本的机器学习算法,用于建立一个自变量和因变量之间的线性关系模型。该模型可以用于预测新的自变量对应的因变量的值。

下面我们使用Python实现线性回归算法,并通过一个例子来说明其使用方法。

首先,我们需要导入相关的库和模块。我们将使用numpy库来进行数值计算,并使用matplotlib库来进行图形化展示。

import numpy as np
import matplotlib.pyplot as plt

接下来,我们生成一组随机的自变量数据X和对应的因变量数据Y。这里我们使用numpy的random模块来生成随机数。

np.random.seed(0)
X = np.random.rand(100, 1)  # 生成100个在[0, 1)区间内的随机数
Y = 2 + 3 * X + np.random.rand(100, 1)  # 对应的因变量Y与自变量X的线性关系

我们画出这组数据的散点图,以便更好地观察它们之间的关系。

plt.scatter(X, Y)
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

接下来,我们将数据集划分为训练集和测试集。训练集用于训练模型,测试集用于评估模型的性能。我们将数据集的70%作为训练集,30%作为测试集。

m = len(X)
train_ratio = 0.7
train_num = int(m * train_ratio)

X_train = X[:train_num]
Y_train = Y[:train_num]
X_test = X[train_num:]
Y_test = Y[train_num:]

现在,我们使用最小二乘法来拟合线性回归模型。最小二乘法的目标是使误差的平方和最小,即将自变量X向量表示成Y的线性组合。

X_train = np.c_[np.ones((train_num, 1)), X_train]  # 添加一个全1的列向量到X_train的左边

theta = np.linalg.inv(X_train.T.dot(X_train)).dot(X_train.T).dot(Y_train)

print('theta:', theta)

最后,我们用拟合的模型在测试集上进行预测,并计算预测结果和真实值之间的均方误差。均方误差越小,模型拟合的越好。

X_test = np.c_[np.ones((m - train_num, 1)), X_test]  # 添加一个全1的列向量到X_test的左边

Y_pred = X_test.dot(theta)
mse = np.mean((Y_pred - Y_test) ** 2)

print('Mean Squared Error:', mse)

完整的代码如下:

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
X = np.random.rand(100, 1)
Y = 2 + 3 * X + np.random.rand(100, 1)

plt.scatter(X, Y)
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

m = len(X)
train_ratio = 0.7
train_num = int(m * train_ratio)

X_train = X[:train_num]
Y_train = Y[:train_num]
X_test = X[train_num:]
Y_test = Y[train_num:]

X_train = np.c_[np.ones((train_num, 1)), X_train]

theta = np.linalg.inv(X_train.T.dot(X_train)).dot(X_train.T).dot(Y_train)

print('theta:', theta)

X_test = np.c_[np.ones((m - train_num, 1)), X_test]

Y_pred = X_test.dot(theta)
mse = np.mean((Y_pred - Y_test) ** 2)

print('Mean Squared Error:', mse)

运行上述代码,即可得到线性回归模型的拟合结果和均方误差。

以上就是使用Python实现线性回归算法的步骤和一个简单示例。线性回归是机器学习中一个非常经典和重要的算法,它为我们提供了对于自变量和因变量之间线性关系的预测能力。同时,你可以进一步扩展这个例子,使用更复杂的数据集,以及在模型中添加更多的自变量和特征工程等。