IRLS(迭代加权最小二乘)详解:基于 Huber Loss 的鲁棒回归
一、问题背景
在数据拟合中,最常见的方法是最小二乘法:
min∑i=1n(yi−f(xi))2 \min \sum_{i=1}^n (y_i - f(x_i))^2 mini=1∑n(yi−f(xi))2
这种方法的核心问题是:
对异常值非常敏感
二、异常值带来的问题
考虑如下数据:
(1,1),(2,2),(3,3),(4,4),(5,100) (1,1), (2,2), (3,3), (4,4), (5,100) (1,1),(2,2),(3,3),(4,4),(5,100)
最后一个点明显是异常值。
最小二乘会平方放大误差:
(100−5)2=9025 (100 - 5)^2 = 9025 (100−5)2=9025
导致模型严重偏移。
三、Huber Loss:鲁棒损失函数
Huber Loss 结合了 L2 和 L1 的优点:
ρ(r)={12r2∣r∣≤δδ(∣r∣−12δ)∣r∣>δ \rho(r) = \begin{cases} \frac{1}{2}r^2 & |r| \le \delta \\ \delta(|r| - \frac{1}{2}\delta) & |r| > \delta \end{cases} ρ(r)={21r2δ(∣r∣−21δ)∣r∣≤δ∣r∣>δ
解释:
- 小误差:使用平方损失(精确拟合)
- 大误差:线性增长(降低异常点影响)
四、IRLS 的核心思想
目标函数:
min∑ρ(ri) \min \sum \rho(r_i) min∑ρ(ri)
其中:
ri=yi−f(xi) r_i = y_i - f(x_i) ri=yi−f(xi)
通过推导可得权重更新公式:
wi=ψ(ri)ri w_i = \frac{\psi(r_i)}{r_i} wi=riψ(ri)
其中:
ψ(r)=dρdr \psi(r) = \frac{d\rho}{dr} ψ(r)=drdρ
五、Huber Loss 对应权重
wi={1∣ri∣≤δδ∣ri∣∣ri∣>δ w_i = \begin{cases} 1 & |r_i| \le \delta \\ \frac{\delta}{|r_i|} & |r_i| > \delta \end{cases} wi={1∣ri∣δ∣ri∣≤δ∣ri∣>δ
含义:
- 小误差:权重为 1
- 大误差:权重减小
六、IRLS 算法流程
步骤如下:
- 初始化权重:
wi=1 w_i = 1 wi=1
- 求解加权最小二乘:
β=(XTWX)−1XTWy \beta = (X^T W X)^{-1} X^T W y β=(XTWX)−1XTWy
- 计算残差:
r=y−Xβ r = y - X\beta r=y−Xβ
- 更新权重:
wi=ψ(ri)ri w_i = \frac{\psi(r_i)}{r_i} wi=riψ(ri)
- 重复直到收敛
七、直观理解
IRLS 可以理解为:
不断降低异常点的影响
过程如下:
- 第一轮:所有点一样重要
- 第二轮:发现异常点,降低其权重
- 后续:逐步忽略异常点
八、Python 示例代码
python
import numpy as np
def huber_weights(r, delta):
w = np.ones_like(r)
mask = np.abs(r) > delta
w[mask] = delta / np.abs(r[mask])
return w
def irls(X, y, delta=1.0, max_iter=20):
n, d = X.shape
w = np.ones(n)
for _ in range(max_iter):
W = np.diag(w)
beta = np.linalg.inv(X.T @ W @ X) @ (X.T @ W @ y)
r = y - X @ beta
w = huber_weights(r, delta)
return beta
九、应用场景
IRLS 常用于:
- 鲁棒回归
- Logistic 回归
- 信号处理
- 计算机视觉
十、总结
IRLS 的本质是:
将复杂的鲁棒优化问题,转化为一系列加权最小二乘问题
结合 Huber Loss,可以有效降低异常值影响,提高模型稳定性。