基于Numpy代码实现-线性回归模型主体(回归模型公式 均方损失函数 参数求偏导)

### 定义模型主体部分
### 包括线性回归公式、均方损失和参数偏导三部分
def linear_loss(X, y, w, b):
    '''
    输入:
    X:输入变量矩阵
    y:输出标签向量
    w:变量参数权重矩阵
    b:偏置
    输出:
    y_hat:线性模型预测值
    loss:均方损失
    dw:权重参数一阶偏导
    db:偏差项一阶偏导
    '''
    # 训练样本数量
    num_train = X.shape[0]
    # 训练特征数量
    num_feature = X.shape[1]
    # 线性回归预测值
    y_hat = np.dot(X, w) + b
    # 计算预测输出与实际标签之间的均方损失
    loss = np.sum((y_hat-y)**2)/num_train
    # 基于均方损失对权重参数的一阶梯度
    dw = np.dot(X.T, (y_hat-y)) /num_train
    # 基于均方损失对偏差项的一阶梯度
    db = np.sum((y_hat-y)) /num_train
    return y_hat, loss, dw, db

在给定模型初始参数的情况下,线性回归模型根据训练数据和参数计算出当前均方损失和参数一阶梯度。


 理解代码 

  dw = np.dot(X.T, (y_hat-y)) /num_train

通过一个简单的例子来说明:

  1. 矩阵 X:假设我们有3个样本,每个样本有2个特征,表示为一个 3x2 的矩阵。
  2. 向量 y_haty:分别为预测值和真实值,都是长度为3的一维向量。

具体示例:

  • X = [[1, 2], [3, 4], [5, 6]]
  • y_hat = [0.9, 0.8, 0.7]
  • y = [1, 0, 0]
  • num_train = 3

计算过程:

  • (y_hat - y) = [-0.1, 0.8, 0.7]
  • X.T = [[1, 3, 5], [2, 4, 6]]
  • np.dot(X.T, (y_hat - y)) = [[5.8, 7.2]]
  • dw = [[5.8, 7.2]] / 3 = [[1.9333, 2.4]]

结果 dw 是每个特征对应的梯度平均值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值