线性回归中的最小二乘法:直接法与梯度下降的比较

news/2025/3/17 15:48:36

最小二乘法(Least Squares Method)学习博客

0. 直观理解最小二乘法

最小二乘法(Least Squares Method)是一种用于数据拟合的方法,它的核心思想是“最小化误差的平方和”。

假设我们有一组数据点,并希望找到一条最优的直线或曲线来尽可能贴合这些点。由于数据通常存在噪声或者误差,无法完美拟合所有点,因此最小二乘法的目标是找到一个最佳拟合,使得所有点到拟合曲线的垂直距离的平方和最小。

通俗地说,就像是在一堆散落的数据点中找一根“最合理”的线,使得数据点到这条线的总体偏差最小。

1. 最小二乘法解决的问题

在数据拟合或机器学习任务中,我们经常需要找到一个最优的模型,使其能够最好地描述数据的规律。例如,给定一组数据点 ( x i , y i ) (x_i, y_i) (xi,yi),希望找到一个线性模型:

y = w x + b y = w x + b y=wx+b

或者更一般的线性回归模型:

y = w 1 x 1 + w 2 x 2 + . . . + w n x n + b y = w_1 x_1 + w_2 x_2 + ... + w_n x_n + b y=w1x1+w2x2+...+wnxn+b

最小二乘法的目标是找到参数 w \mathbf{w} w b b b,使得模型预测值与真实值之间的误差平方和最小,即:

min ⁡ w , b ∑ i = 1 m ( y i − ( w 1 x i 1 + w 2 x i 2 + . . . + w n x i n + b ) ) 2 \min_{\mathbf{w}, b} \sum_{i=1}^{m} (y_i - (w_1 x_{i1} + w_2 x_{i2} + ... + w_n x_{in} + b))^2 w,bmini=1m(yi(w1xi1+w2xi2+...+wnxin+b))2

这里, m m m 是样本数, n n n 是特征数。

2. 最小二乘法的求解方法

2.1 直接法(正规方程)

假设我们用矩阵形式表示线性回归模型:

y = X w + ε \mathbf{y} = X \mathbf{w} + \varepsilon y=Xw+ε

其中,

  • y ∈ R m × 1 \mathbf{y} \in \mathbb{R}^{m \times 1} yRm×1 是目标值向量。
  • X ∈ R m × ( n + 1 ) X \in \mathbb{R}^{m \times (n+1)} XRm×(n+1) 是输入数据矩阵(包括一个全 1 的列表示偏置项)。
  • w ∈ R ( n + 1 ) × 1 \mathbf{w} \in \mathbb{R}^{(n+1) \times 1} wR(n+1)×1 是待求参数向量。
  • ε \varepsilon ε 是误差项。

最小二乘法的目标是最小化误差平方和,即最小化:

J ( w ) = ∣ ∣ X w − y ∣ ∣ 2 J(\mathbf{w}) = ||X\mathbf{w} - \mathbf{y}||^2 J(w)=∣∣Xwy2

通过求导并设导数为 0,可以推导出最优解的封闭形式:

w = ( X T X ) − 1 X T y \mathbf{w} = (X^T X)^{-1} X^T \mathbf{y} w=(XTX)1XTy

2.2 迭代法(梯度下降)

当数据规模很大时,直接求解 w = ( X T X ) − 1 X T y \mathbf{w} = (X^T X)^{-1} X^T \mathbf{y} w=(XTX)1XTy 可能会遇到计算问题:

  • 计算 X T X X^T X XTX 需要 O ( n 2 m ) O(n^2m) O(n2m) 的时间复杂度,求逆 O ( n 3 ) O(n^3) O(n3),当 n n n 很大时计算成本极高。
  • X T X X^T X XTX 可能是病态矩阵(接近奇异矩阵),导致数值计算不稳定。

梯度下降是一种优化方法,通过迭代更新参数来逐步找到最优解。其基本思想是计算损失函数 J ( w ) J(\mathbf{w}) J(w) w \mathbf{w} w 的梯度,并沿着梯度的负方向更新参数:

w : = w − α ∇ J ( w ) \mathbf{w} := \mathbf{w} - \alpha \nabla J(\mathbf{w}) w:=wαJ(w)

其中,学习率 α \alpha α 控制每次更新的步长。

梯度计算如下:

∇ J ( w ) = 1 m X T ( X w − y ) \nabla J(\mathbf{w}) = \frac{1}{m} X^T (X \mathbf{w} - \mathbf{y}) J(w)=m1XT(Xwy)

因此,更新规则为:

w : = w − α m X T ( X w − y ) \mathbf{w} := \mathbf{w} - \frac{\alpha}{m} X^T (X \mathbf{w} - \mathbf{y}) w:=wmαXT(Xwy)

3. 直接法 vs 迭代法

方法计算复杂度适用情况
直接法(正规方程) O ( n 2 m + n 3 ) O(n^2 m + n^3) O(n2m+n3)适用于特征维度较小的数据集(如 n < 1 0 3 n < 10^3 n<103
迭代法(梯度下降)每次迭代 O ( n m ) O(nm) O(nm)适用于大规模数据集(如 n > 1 0 4 n > 10^4 n>104

n n n 很大时,直接求逆是不可行的,因此我们使用梯度下降等迭代方法来近似求解。

4. 代码实现

4.1 直接法(正规方程)

import numpy as np

def least_squares_normal_eq(X, y):
    return np.linalg.inv(X.T @ X) @ X.T @ y

# 示例数据
X = np.array([[1, 1], [1, 2], [1, 3]])  # 增加一列1表示偏置项
y = np.array([[1], [2], [3]])

w = least_squares_normal_eq(X, y)
print("最优参数:", w)

4.2 迭代法(梯度下降)

import numpy as np

def gradient_descent(X, y, lr=0.01, epochs=1000):
    m, n = X.shape
    w = np.zeros((n, 1))  # 初始化权重
    for _ in range(epochs):
        gradient = (1/m) * X.T @ (X @ w - y)
        w -= lr * gradient
    return w

# 示例数据
X = np.array([[1, 1], [1, 2], [1, 3]])
y = np.array([[1], [2], [3]])

w = gradient_descent(X, y)
print("最优参数:", w)

5. 结论

最小二乘法是解决回归问题的一种基本方法,正规方程适用于小规模数据,梯度下降适用于大规模数据。在实际应用中,需要根据数据规模选择合适的求解方法,以实现高效、稳定的计算。


http://www.niftyadmin.cn/n/5890650.html

相关文章

通义万相 2.1 与蓝耘智算平台的深度协同,挖掘 AIGC 无限潜力并释放巨大未来价值

我的个人主页 我的专栏&#xff1a; 人工智能领域、java-数据结构、Javase、C语言&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01; 点赞&#x1f44d;收藏❤ 引言&#xff1a;AIGC 浪潮下的新机遇 在当今数字化飞速发展的时代&#xff0c;人工智能生成内容&…

ASP.NET Webform和ASP.NET MVC 后台开发 大概80%常用技术

本文涉及ASP.NET Webform和ASP.NET MVC 后台开发大概80%技术 2019年以前对标 深圳22K左右 广州18K左右 武汉16K左右 那么有人问了2019年以后的呢&#xff1f; 答&#xff1a;吉祥三宝。。。 So 想继续看下文的 得有自己的独立判断能力。 C#.NET高级笔试题 架构 优化 性能提…

Pytorch torch.atan函数介绍

torch.atan 是 PyTorch 中的一个数学函数&#xff0c;用于计算输入张量中每个元素的反正切&#xff08;arctangent&#xff09;。反正切函数是正切函数的逆函数&#xff0c;其输出范围是 [−π/2,π/2]。在深度学习中&#xff0c;torch.atan 通常用于归一化数据、处理角度信息或…

聚划算!三个模型对比预测!CNN-GRU、GRU、CNN三模型多变量时序光伏功率预测

聚划算&#xff01;三个模型对比预测&#xff01;CNN-GRU、GRU、CNN三模型多变量时序光伏功率预测 目录 聚划算&#xff01;三个模型对比预测&#xff01;CNN-GRU、GRU、CNN三模型多变量时序光伏功率预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 CNN-GRU、GRU、CN…

【Linux篇】进程状态(僵尸进程,孤儿进程),优先级与调度机制

&#x1f4cc; 个人主页&#xff1a; 孙同学_ &#x1f527; 文章专栏&#xff1a;Liunx &#x1f4a1; 关注我&#xff0c;分享经验&#xff0c;助你少走弯路&#xff01; 文章目录 1. 前文铺垫理解内核链表 2. 进程状态2.1 进程状态查看2.2 僵尸进程2.3 僵尸进程危害2.4 孤儿…

微信小程序:实现多功能表格效果,例如滚动效果、宽度自定义、多选、行内编辑等功能

一、表格效果 1、实现功能 表格实现可横向水平滚动表格、宽度自定义、文本编辑、数字加减、多选&#xff0c;行选中效果&#xff0c;获取选中行数据等功能 2、图片效果 二、代码 1、wxml 根据头循环将表格头进行循环&#xff0c;再通过昂循环展示行内的全部信息&#xff0…

使用自动导入后,eslint报错 eslint9

前提&#xff1a;使用pnpm create vuelatest创建vue应用&#xff0c;并且在创建项目时就勾选eslint和prettier&#xff0c;不然有些配置还需要手动配&#xff0c;比如解决eslint和prettier的冲突问题 1. 解决使用自动导入后Eslint报错问题 配置vite.config.ts // 自动导入api…

C# 事件使用详解

总目录 前言 在C#中&#xff0c;事件&#xff08;Events&#xff09;是一种基于委托的重要机制&#xff0c;用于实现对象之间的松耦合通信。它通过发布-订阅模式&#xff08;Publisher-Subscriber Pattern&#xff09;&#xff0c;允许一个对象&#xff08;发布者&#xff09;…