一元线性回归python实现代码
以下是一元线性回归的Python实现代码:
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, s=10)
plt.xlabel('X')
plt.ylabel('y')
plt.show()
# 初始化参数
theta = np.random.randn(2, 1)
# 添加偏置项
X_b = np.c_[np.ones((100, 1)), X]
# 定义学习率和迭代次数
learning_rate = 0.1
n_iterations = 1000
# 梯度下降算法
for iteration in range(n_iterations):
gradients = 2 / 100 * X_b.T.dot(X_b.dot(theta) - y)
theta = theta - learning_rate * gradients
# 输出最终参数
print(theta)
# 绘制拟合直线
X_new = np.array([[0], [1]])
X_new_b = np.c_[np.ones((2, 1)), X_new]
y_predict = X_new_b.dot(theta)
plt.plot(X_new, y_predict, 'r-', linewidth=2, label='Predictions')
plt.scatter(X, y, s=10, label='Data')
plt.xlabel('X')
plt.ylabel('y')
plt.legend(loc='upper left')
plt.show()
该代码生成了一个随机数据集,然后使用梯度下降算法拟合一条直线来拟合数据。最终输出拟合直线的参数,并绘制数据散点图和拟合直线。
接下来我会逐行解释这段代码的含义和作用。
import numpy as np
import matplotlib.pyplot as plt
首先导入了NumPy和Matplotlib库,用于数学计算和绘图。
np.random.seed(0)
X = np.random.rand(100, 1)
y = 2 + 3 * X + np.random.rand(100, 1)
使用NumPy的随机数生成器生成了一个包含100个样本的随机数据集,其中X是一个100行1列的矩阵,y是一个100行1列的矩阵。这里的y是根据X生成的,其中包含了一些随机噪声。
plt.scatter(X, y, s=10)
plt.xlabel('X')
plt.ylabel('y')
plt.show()
使用Matplotlib绘制了数据散点图,其中X轴表示自变量X,Y轴表示因变量y。
theta = np.random.randn(2, 1)
初始化了模型参数theta,这里的theta是一个2行1列的矩阵,包含了截距和斜率两个参数。
X_b = np.c_[np.ones((100, 1)), X]
将X矩阵添加了一列全为1的列,用于表示截距项。
learning_rate = 0.1
n_iterations = 1000
定义了学习率和迭代次数,用于控制梯度下降算法的收敛速度和精度。
for iteration in range(n_iterations):
gradients = 2 / 100 * X_b.T.dot(X_b.dot(theta) - y)
theta = theta - learning_rate * gradients
使用梯度下降算法更新模型参数theta,使得模型能够更好地拟合数据。这里的gradients是损失函数的梯度,用于指导参数的更新。每次迭代都会更新一次参数theta,直到达到指定的迭代次数。
print(theta)
输出最终的模型参数theta,用于评估模型的拟合效果。
X_new = np.array([[0], [1]])
X_new_b = np.c_[np.ones((2, 1)), X_new]
y_predict = X_new_b.dot(theta)
plt.plot(X_new, y_predict, 'r-', linewidth=2, label='Predictions')
plt.scatter(X, y, s=10, label='Data')
plt.xlabel('X')
plt.ylabel('y')
plt.legend(loc='upper left')
plt.show()
使用拟合的模型参数theta绘制了拟合直线,并将其与原始数据散点图一起绘制在同一张图上,用于直观地观察模型的拟合效果。