当然,以下是重新整理后的关于 M-Estimation 产生权重的方法 的完整解释:
✅ M-估计中的权重是如何产生的?
M-estimation 是一种稳健回归方法,它通过更换损失函数来减少异常值的影响。其本质是对每个观测点根据其残差(residual)给予不同的权重。
一、M-估计的基本形式
我们最小化以下目标函数:
$$
\min_\beta \sum_{i=1}^n \rho\left(\frac{r_i}{\hat{\sigma}}\right)
$$
$r_i = y_i - x_i^\top \beta$:残差
$\rho(u)$:对残差的稳健损失函数
$\hat{\sigma}$:尺度估计,用于标准化残差
二、权重是怎么来的?
权重是通过残差的导函数(影响函数)间接定义的:
$$
w_i = \frac{\psi(u_i)}{u_i}, \quad u_i = \frac{r_i}{\hat{\sigma}}, \quad \psi(u) = \frac{d\rho(u)}{du}
$$
$\psi(u)$:称为 ψ 函数(影响函数),是损失函数 $\rho(u)$ 的导数
$w_i$:就是 M-估计中每个样本点的权重
三、常见的 M-估计损失函数与权重函数
名称 | 损失函数 | ψ函数 | 权重函数 |
---|---|---|---|
Huber | 类似平方损失,但对大残差变为线性增长 | if ( | u |
Tukey Biweight | 有界损失,仅对小残差赋予非零权重 | for ( | u |
Hampel | 分段损失函数,对中等残差保留部分权重 | 分段定义(线性下降至0) | 分段函数 |
四、在 Python 中获取 M-估计的权重
使用 statsmodels
中的 RLM
类可以直接获取每个样本点的权重:
import statsmodels.api as sm # 构造数据 X = sm.add_constant(X_data) model = sm.RLM(y_data, X, M=sm.robust.norms.HuberT()) results = model.fit() # 获取 M-估计生成的权重 weights = results.weights
你也可以选择不同的 M-estimator,例如:
sm.robust.norms.TukeyBiweight() sm.robust.norms.Hampel()
五、这些权重有什么意义?
权重接近 1:说明该样本点残差较小,可信度高
权重接近 0:说明该点可能是异常值,对最终结果影响被减小
系统当前共有 468 篇文章