学习笔记 | 线性回归模型代码

代码

#线性回归模型 损失函数使用均方计算 优化算法采用梯度下降

import numpy as np
m,n=100,3
X=np.random.rand(m,n)
w0=np.array([[3.1415926],[3.1415927],[3.1415928]])
noise=0.05*np.random.rand(m,1)
y=X@w0+1.142857+noise


#设置线性参数 w,b
w=np.zeros((n,1))
b=0.0

#设置学习率、循环次数
lr=0.01
epochs=5000

#计算误差
for i in range(epochs):
    y_pred=X@w+b

    loss=np.mean((y_pred-y)**2)
#计算梯度
    w_grad=1/m*X.T@(y_pred-y)
    b_grad=1/m*np.sum(y_pred-y)
#更新
    w=w-lr*w_grad
    b=b-lr*b_grad

    if i % 50 == 0:
        print(f"Epoch {i}, Loss: {loss:.4f}")

print(f"Final w: {w.ravel()}, b: {b}")   # .ravel() 展平打印

一些疑惑

1.维度问题(特别是矩阵微积分的维度问题、前后问题)

· 为什么是y_pred=Xw+b而不是反过来:
——X为mxn矩阵,w作为权重是mx1向量(机器学习列向量信仰!!!),所以为了权重匹配写作Xw

· 为什么梯度计算过程中矩阵求导的时候是w_grad=1/mX.T@(y_pred-y)而不是w_grad=1/m(y_pred-y)@X.T:
——以维度适配角度,w的梯度必须与w自身保持一致,并且y_pred-y与y一致为mx1,且不能转置,而X.T是nxm,所以要在前
矩阵微积分角度看,当对向量求导时,雅可比矩阵(Jacobian)的转置会自然出现在链式法则中,这就导致了X.T的出现。

posted @ 2026-07-04 15:21  Ihsinchao  阅读(2)  评论(0)    收藏  举报