线性回归用正规方程还是梯度下降?两者怎么选?
简化版
普通最小二乘可直接解线性方程组:满列秩时常写作 w=(XᵀX)⁻¹Xᵀy,但工程实现优先使用 QR、SVD 或伪逆,避免显式求逆。形成正规方程约需 O(md²),分解 d×d 系统约需 O(d³);梯度法每轮约 O(md),可用 mini-batch/SGD 扩展,但需要选择学习率和停止条件,通常还要缩放改善条件数。秩亏时不是“最小二乘失效”,而是系数解可能不唯一,应使用伪逆、稳定分解或正则化。选择依据是 m、d、稀疏性、精度和硬件,不能用“几千维”作为固定边界。
详细版
两者对比:
| 正规方程 | 梯度下降 | |
|---|---|---|
| 形式 | 闭式解,一步到位 | 迭代逼近 |
| 学习率 | 不需要 | 需要调 η |
| 特征缩放 | 不需要 | 需要(否则收敛慢) |
| 复杂度 | 约 O(n³)(矩阵求逆) | 每轮约 O(m·n),迭代 k 轮 |
| 特征数多时 | 慢、内存大 | 依然可行 |
| 样本量大时 | 一次性载入,压力大 | 可用 SGD/mini-batch 分批 |
| XᵀX 不可逆 | 显式逆写法失效,改用伪逆/QR/SVD/正则 | 不受影响 |
| 适用 | 特征少、中小数据 | 高维、大规模、在线学习 |
正规方程由来: 令 MSE 对 w 的导数为 0,解出 XᵀXw = Xᵀy → w = (XᵀX)⁻¹Xᵀy。
XᵀX 不可逆怎么办: 特征共线或特征数 > 样本数时奇异 → 用伪逆,或加 L2 正则变 (XᵀX+λI)⁻¹(一定可逆)。
完整版教学
一、同一个目标,两条求解路
线性回归要最小化的目标是均方误差(凸函数):
L(w) = ‖Xw - y‖²
因为 L 是凸的,任一局部最优都是全局最优;只有在设计矩阵满列秩时,系数解才唯一。求这个最优有两条路:直接解方程(正规方程) 或 迭代逼近(梯度下降)。两者最终都逼近同一个最优解,区别在「怎么到达」和「代价」。
二、正规方程:一步求出闭式解
对 L(w) = ‖Xw - y‖² 求关于 w 的梯度并令其为 0:
∇L = 2Xᵀ(Xw - y) = 0
⟹ XᵀX w = Xᵀy
⟹ w = (XᵀX)⁻¹ Xᵀy ← 正规方程
优点:
- 一步到位:套公式直接算出全局最优,不用迭代。
- 无超参数:不用选学习率、不用定迭代次数。
- 不用特征缩放:解析解和特征尺度无关。
缺点:
- 矩阵求逆昂贵:
XᵀX是 n×n(n=特征数),求逆约 O(n³)。特征上万时几乎不可行。 - 内存压力:要构造并存储
XᵀX,高维时很大。 - XᵀX 可能不可逆:这会让显式逆写法失效,但最小二乘问题仍可用伪逆、QR 或 SVD 求解,见第四节。
所以正规方程适合特征数不多(经验上几千以内)的中小问题,胜在简单精确。
三、梯度下降:迭代逼近,扛得住大规模
梯度下降不解方程,而是从初始 w 出发,反复沿梯度反方向走一小步:
w ← w - η · ∇L(w) = w - η · (2/m) Xᵀ(Xw - y)
- η(学习率):步长。太大震荡/发散,太小收敛慢,需要调。
- 迭代直到收敛(梯度接近 0 或损失不再下降)。
变体:
- 批量梯度下降(BGD):每步用全部样本算梯度,稳但每步贵。
- 随机梯度下降(SGD):每步用一个样本,快、可在线学习,但噪声大。
- 小批量(Mini-batch):每步用一小批,兼顾稳定和效率,最常用。
优点:
- 对特征数近似线性,高维依然可行。
- 样本海量时可用 SGD/mini-batch 分批处理,不必一次性载入全部数据、也不做大矩阵求逆。
- 通用——同一套框架能优化各种模型(逻辑回归、神经网络)。
缺点:
- 要调学习率、要迭代多轮。
- 通常应做特征缩放:尺度不一时条件数可能变差,梯度来回横跳、收敛慢;若使用自适应预条件或特殊数据表示,仍应以收敛诊断为准。
- 只逼近最优(到一定精度停),不是精确解。
四、正规方程的软肋:XᵀX 不可逆怎么办
w = (XᵀX)⁻¹Xᵀy 要求 XᵀX 可逆。两种常见情形会让它奇异(不可逆):
- 特征间多重共线性:某特征是其他特征的线性组合,矩阵秩亏。
- 特征数 > 样本数(n > m):矩阵必然不满秩。
解决:
- 用伪逆(Moore-Penrose):
w = X⁺y,即使奇异也能给出一个(最小范数)解,numpy 的pinv就干这个。 - 加 L2 正则(岭回归):
w = (XᵀX + λI)⁻¹Xᵀy。加了λI后矩阵一定可逆(正定),既解决了不可逆,又缓解共线性、防过拟合——一举多得。梯度下降则天然不受此问题困扰。
五、怎么选——决策清单
特征数 n 大不大?
├─ n 小(几百~几千)→ 正规方程(省心、精确、无需调参)
└─ n 大(上万~更多)→ 梯度下降(O(n³) 求逆吃不消)
样本量 m 大不大?
├─ m 适中、能整体载入 → 两者都行
└─ m 海量 / 流式数据 → SGD / mini-batch 梯度下降(分批、可在线)
存在共线性 / n>m?
├─ 正规方程会失效 → 用伪逆或岭回归
└─ 梯度下降不受影响
补充:普通最小二乘可直接转成线性方程组;标准逻辑回归和神经网络没有这种对应闭式解,通常用梯度法、牛顿法、L-BFGS 等迭代算法。不要把“无正规方程”误记为“只能使用某一种梯度下降”。
六、常见追问
- 正规方程为什么不用特征缩放,梯度下降却要? 正规方程是解析解,与尺度无关;梯度下降靠梯度方向,尺度不一会让损失面扁长、收敛慢。
- 牛顿法算哪种? 也是迭代法,用到二阶导(Hessian),收敛快但每步求 Hessian 逆很贵,适合中小规模。
- O(n³) 的 n 是样本还是特征? 是特征数(
XᵀX是 n×n)。样本多主要影响构造XᵀX的 O(m·n²) 部分。 - 梯度下降会不会陷入次优局部极小值? 不会,因为最小二乘目标是凸的;但学习率、停止条件与数值精度仍可能导致未充分收敛,秩亏时参数最优解也可能不唯一。
七、用算例与工程边界复核
正规方程直接求 β=(XᵀX)^+Xᵀy,其中 + 表示可用伪逆。若特征数 d=100,分解约为 d³ 量级尚可;d=100000 时立方级计算和 d² 存储不可接受,迭代法更现实。
| 对象/方案 | 核心机制 | 选择或风险 |
|---|---|---|
| 正规方程/分解 | 直接线性代数求解 | 中小 d、无需学习率 |
| 梯度下降 | 按批迭代更新 | 大 n/d、可流式与分布式 |
| QR/SVD | 避免显式求逆更稳定 | 生产数值计算优先 |
把推导和选择压缩成执行路径:
check n, d and sparsity
small/medium dense -> QR/SVD solver
large sparse -> SGD/LSQR/coordinate methods
validate convergence and conditioning
工程上不要显式计算矩阵逆;
solve、QR、SVD 或专用最小二乘算法通常更稳定。
八、常见误区与追问
- 误区:正规方程只要写出逆矩阵就一定可解。 XᵀX 可能奇异或病态,应使用伪逆、分解或正则化。
- 误区:梯度下降结果一定比闭式解差。 迭代充分且数值设置正确时可逼近同一最优解,误差来自停止与优化。
- 追问:为什么特征缩放影响梯度下降? 尺度差异让等高线狭长、条件数变差,导致震荡和慢收敛。
- 追问:Ridge 的闭式解是什么? 常写为
(XᵀX+λI)^{-1}Xᵀy,截距是否惩罚需按实现处理。 - 追问:n 很大但 d 很小怎么选? 可通过累积 XᵀX 与 Xᵀy 或分解求解;还要权衡流式数据和数值稳定性。
九、加强记忆
记忆时抓住两类计算路径:普通最小二乘可以直接解线性系统,满列秩时可写成 (XᵀX)⁻¹Xᵀy,但实际优先 QR、SVD 或伪逆;形成系统约 O(md²),分解约 O(d³),秩亏意味着系数可能不唯一而非问题无解。梯度法每轮约 O(md),mini-batch/SGD 可服务大规模与在线数据,但要管理学习率、尺度、停止误差和迭代轮数。损失凸只保证没有次优局部极小值,不保证任意配置自动收敛。标准逻辑回归与神经网络没有 OLS 这种线性系统解,却可使用多种迭代求解器,并非只能用某一种梯度下降。