import numpy as np import matplotlib.pyplot as plt # 生成随机数据集 np.random.seed(0) X = 2 * np.random.rand(100, 1) y = 4 + 3 * X + np.random.randn(100, 1) # 定义梯度下降函数 def gradient_descent(X, y, learning_rate=0.1, n_iterations=1000): m = len(X) theta = np.random.randn(2, 1) # 初始化参数 for iteration in range(n_iterations): gradients = np.zeros((2, 1)) for i in range(m): gradients[0] += (theta[0] + theta[1]*X[i] - y[i]) # 计算偏导数关于theta_0的梯度 b gradients[1] += (theta[0] + theta[1]*X[i] - y[i]) * X[i] # 计算偏导数关于theta_1的梯度 w gradients *= 2 / m # 计算均值梯度 theta -= learning_rate * gradients # 更新参数 return theta #最终的w,b,0位置是b,1位置是w # 运行梯度下降算法 theta = gradient_descent(X, y) # 输出误差结果 mse = np.mean((X.dot(theta[1]) + theta[0] - y) ** 2) print("Mean Squared Error:", mse) # 绘制数据及线性回归结果 plt.plot(X, y, "b.") plt.plot(X, X.dot(theta[1]) + theta[0], "r-") plt.xlabel("X") plt.ylabel("y") plt.title("Linear Regression with Gradient Descent") plt.show()
可视化结果: