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