牛客题解 | 使用正规方程的线性回归

题目## 题目

题目链接

线性回归是一类回归问题,其目标是通过找到一组参数,使得输入数据和输出数据之间的线性关系尽可能地接近。其数学表达式为:
y = X × w y = X \times w y=X×w
其中, X X X 是输入矩阵, w w w 是回归系数, y y y 是输出矩阵。
而正规方程是一种求解线性回归问题的方法,它通过求解矩阵的逆来得到回归系数。其具体步骤如下:

1. 初始化矩阵

  • 创建一个与输入矩阵 X X X 和输出矩阵 y y y 相关的矩阵 A A A
  • 数学表达式为:
    A = X T × X A = X^T \times X A=XT×X

2. 求解回归系数

  • 通过求解矩阵 A A A 的逆来得到回归系数。
  • 数学表达式为:
    w = A − 1 × X T × y w = A^{-1} \times X^T \times y w=A1×XT×y

3. 返回回归系数

  • 将计算得到的回归系数返回。

标准代码如下

def linear_regression_normal_equation(X: list[list[float]], y: list[float]) -> list[float]:
    X = np.array(X)
    # 将y转换为列向量
    y = np.array(y).reshape(-1, 1)
    X_transpose = X.T
    # 计算正规方程的解
    theta = np.linalg.inv(X_transpose.dot(X)).dot(X_transpose).dot(y)
    theta = np.round(theta, 4).flatten().tolist()
    return theta

题目链接

梯度下降在机器学习中是一种常用的优化算法,用于求解最小化损失函数的问题。其具体步骤如下:

1. 初始化参数

  • 创建一个与输入矩阵 X X X 和输出矩阵 y y y 相关的矩阵 w w w
  • 数学表达式为:
    w = 0 w = 0 w=0
本题初始化参数为0,但在实际使用中更常见的是使用随机初始化。

2. 计算梯度

  • 计算损失函数 L L L 对参数 w w w 的梯度 g g g
  • 数学表达式为:
    g = ∇ L ( w ) g = \nabla L(w) g=L(w)
本题使用的损失函数为均方误差,即:

L ( w ) = 1 2 m ∑ i = 1 m ( h ( x i ) − y i ) 2 L(w) = \frac{1}{2m} \sum_{i=1}^{m} (h(x_i) - y_i)^2 L(w)=2m1i=1m(h(xi)yi)2
其中, h ( x i ) h(x_i) h(xi) 是预测值, y i y_i yi 是真实值, m m m 是样本数量。
因此,梯度为:
g = 1 m ∑ i = 1 m ( h ( x i ) − y i ) × x i g = \frac{1}{m} \sum_{i=1}^{m} (h(x_i) - y_i) \times x_i g=m1i=1m(h(xi)yi)×xi
值得注意是,均方误差有两种形式,区别在于是否乘以1/2,本题使用的是乘以1/2的形式,这种形式的好处在于求梯度时可以消去1/2,使得计算更加简洁。

3. 更新参数

  • 更新参数 w w w
  • 数学表达式为:
    w = w − η × g w = w - \eta \times g w=wη×g
值得注意的是,梯度下降有三种形式,分别是批量梯度下降、随机梯度下降和mini-batch梯度下降。

标准代码如下

def linear_regression_gradient_descent(X, y, alpha, iterations):
    m, n = X.shape
    # 初始化权重
    theta = np.zeros((n, 1))
    for _ in range(iterations):
        predictions = X @ theta
        errors = predictions - y.reshape(-1, 1)
        updates = X.T @ errors / m
        theta -= alpha * updates
    return np.round(theta.flatten(), 4)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值