手动用梯度下降法实现一元线性回归
原文链接:https://www.cnblogs.com/qimoxuan/p/18407823
实验目的
本次实验旨在通过手动实现梯度下降法和随机梯度下降法来解决一元线性回归问题。具体目标包括:
- 生成训练数据集,并使用matplotlib进行可视化。
- 设计一个`LinearModel`类来实现一元线性回归的批量梯度下降法。
- 使用matplotlib显示拟合结果。
- 修改`LinearModel`类来实现随机梯度下降法,并重复上述实验步骤。
实验环境
Python版本:3.x
库:NumPy, Matplotlib
实验步骤
步骤1:准备数据
- 生成100个训练样本,其中自变量X取值服从均值为0,方差为1的正态分布。
- 设定因变量Y的关系式为,其中为误差项,取值服从均值为0,方差为1的正态分布。
- 使用Matplotlib绘制生成的数据点。
import numpy as np
import matplotlib.pyplot as plt
# 设置随机种子以保证结果可复现
np.random.seed(0)
# 生成100个训练样本
X = np.random.normal(loc=0, scale=1, size=100) # X服从N(0,1)
e_r = np.random.normal(loc=0, scale=1, size=100) # 误差项e_r服从N(0,1)
Y = 4 * X + 3 + e_r # Y = 4*X + 3 + e_r
# 使用matplotlib显示生成的数据
plt.figure(figsize=(8, 6))
plt.scatter(X, Y, color='blue', label='Actual Data')
plt.title('Generated Data for Linear Regression')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.grid(True)
plt.show()
步骤2:定义LinearModel类
- 定义一个`LinearModel`类,包含模型初始化、前向传播、损失计算、梯度计算和参数更新等方法。
- 在类中实现批量梯度下降法的训练逻辑,通过设置最大迭代次数或验证集错误率来停止迭代。
class LinearModel:
def __init__(self):
self.w = n