语言:中文
最后更新:2026-07-27
页面定位:模型文档
切换:English
LossBase 是 statgpu 中所有损失函数的通用基类。它为优化求解器和惩罚函数提供统一接口。
求解器算法详见:求解器算法
各损失详细文档参见:
五种新损失类型扩展了 LossBase(在已有 7 种 GLM 家族之外):
| 损失 | 类 | R 等价 | 用途 |
|---|---|---|---|
| 分位数 | QuantileLoss |
quantreg::rq() |
条件分位数、中位数回归 |
| Huber | HuberLoss |
MASS::rlm() |
稳健回归(M-估计器) |
| Bisquare | BisquareLoss |
MASS::rlm(psi="bisquare") |
重降 M-估计器 |
| Fair | FairLoss |
MASS::rlm(psi="fair") |
Fair M-估计器 |
| Cox PH | CoxPartialLikelihoodLoss |
survival::coxph() |
生存分析 |
LossBase 提供统一接口,但可用组合仍由各损失和公开 estimator 的能力约束,不应理解为
每个损失都自动支持全部惩罚和求解器。惩罚封装器包括
PenalizedQuantileRegression、PenalizedRobustRegression 和
PenalizedCoxPHModel;其中 Cox 封装器当前验证 L1、L2、Elastic Net、SCAD、MCP 五类惩罚。
statgpu.losses.LossBase
statgpu.losses.QuantileLoss
statgpu.losses.HuberLoss
statgpu.losses.BisquareLoss
statgpu.losses.FairLoss
statgpu.losses.CoxPartialLikelihoodLoss
LossBase (statgpu/losses/_base.py)
├── GLMLoss (statgpu/glm_core/_base.py) — 添加 _mu_from_eta、IRLS 提示
│ ├── SquaredErrorLoss、LogisticLoss、PoissonLoss 等
├── QuantileLoss — pinball 损失,非光滑
├── HuberLoss — 稳健,光滑
├── BisquareLoss — 重降,光滑
├── FairLoss — Fair 损失,光滑
└── CoxPartialLikelihoodLoss — 生存分析,有 Hessian
所有损失最小化: $$ \min_{\beta} \frac{1}{n} \sum_{i=1}^n \ell(X_i \beta, y_i) + \text{penalty}(\beta) $$
当
CoxPartialLikelihoodLoss 接收 [time, event] 二列响应,$L(\beta)$ 为 Breslow 或
Efron 部分似然。它是 PenalizedCoxPHModel 的标准右删失损失。需要 Exact ties、
strata 或 subject_id 时,应使用
CoxPH/CoxPHCV 的计数过程实现。
| 求解器 | Quantile | Huber | Bisquare | Fair | Cox PH |
|---|---|---|---|---|---|
| FISTA | ✅ | ✅ | ✅ | ✅ | ✅ |
| FISTA-BB | ✅ | ✅ | ✅ | ✅ | ✅ |
| FISTA-LLA | ✅ (SCAD/MCP) | ✅ | ✅ | ✅ | ✅ (SCAD/MCP) |
| Proximal IRLS-CD | ✅ (SCAD/MCP) | ❌ | ❌ | ❌ | ❌ |
| Proximal Newton | ❌ (无 Hessian) | ✅ (5-10 iter) | ✅ (5-10 iter) | ✅ | ❌(Cox 当前走 FISTA-LLA) |
| Newton | ❌ (无 Hessian) | ✅ | ✅ | ✅ | ✅ |
| L-BFGS | ✅ | ✅ | ✅ | ✅ | ✅ |
| ADMM | ✅ | ✅ | ✅ | ✅ | ✅ |
| IRLS | ✅ (仅 L2) | ❌ | ❌ | ❌ | ❌ |
| 参数 | 默认值 | 说明 |
|---|---|---|
quantile |
0.5 |
目标分位数,取值范围 (0, 1) |
| 参数 | 默认值 | 说明 |
|---|---|---|
delta |
1.0 |
阈值:|u| ≤ delta 时二次,否则线性 |
epsilon |
1.345 |
稳健性调节(95% 高斯效率) |
method |
"MAD" |
尺度估计方法:"MAD" 或 "huber_prop2" |
| 参数 | 默认值 | 说明 |
|---|---|---|
epsilon |
4.685 |
稳健性调节(95% 高斯效率) |
method |
"MAD" |
尺度估计方法 |
| 参数 | 默认值 | 说明 |
|---|---|---|
c |
1.4 |
调节常数 |
| 参数 | 默认值 | 说明 |
|---|---|---|
ties |
"breslow" |
ties 处理方法:"breslow" 或 "efron" |
此处的 loss 对象不接受 ties="exact"。Exact 是 statgpu.survival.CoxPH 和
CoxPHCV 的 estimator 级能力。
import numpy as np
from statgpu.losses import QuantileLoss, HuberLoss
from statgpu.solvers import lbfgs_solver
n, p = 200, 10
X = np.random.randn(n, p)
y = X @ np.array([1.0, 0, -0.5, 0, 0.3, 0, 0, 0, 0, 0]) + np.random.randn(n) * 0.5
# Quantile 回归(中位数)
loss = QuantileLoss(quantile=0.5)
coef, n_iter = lbfgs_solver(loss, None, X, y)
# 稳健回归
loss = HuberLoss(epsilon=1.345)
coef, n_iter = lbfgs_solver(loss, None, X, y)import torch
X_t = torch.tensor(X, dtype=torch.float64).cuda()
y_t = torch.tensor(y, dtype=torch.float64).cuda()
from statgpu.losses import HuberLoss
from statgpu.penalties import SCADPenalty
from statgpu.solvers import fista_solver
loss = HuberLoss(epsilon=1.345)
coef, n_iter = fista_solver(loss, SCADPenalty(alpha=0.1), X_t, y_t)from statgpu.linear_model.penalized import PenalizedQuantileRegression
# CPU
model = PenalizedQuantileRegression(quantile=0.5, penalty='scad', alpha=0.1)
model.fit(X, y)
# GPU
model = PenalizedQuantileRegression(quantile=0.5, penalty='scad', alpha=0.1)
model.fit(X_t, y_t)- QuantileLoss: 与 R
quantreg::rq()(Frisch-Newton IRLS)和 sklearnQuantileRegressor(HiGHS LP 求解器)对齐。系数精度 1e-6。 - HuberLoss: 与 R
MASS::rlm()Huber psi 函数对齐。 - BisquareLoss: 与 R
MASS::rlm(psi="bisquare")对齐。支持 SCAD/MCP 通过 proximal Newton(5-10 次迭代收敛)。 - CoxPartialLikelihoodLoss / CoxPH:Breslow/Efron 与 statsmodels PHReg 对齐;Exact
由小规模暴力枚举验证。2026-07-12 的
quick与full产物覆盖 NumPy、CuPy、 Torch 的 delayed-entry、Exact、重 ties、stratified start-stop 兼容性与精度矩阵。
CoxPartialLikelihoodLoss的 Breslow/Efron 路径在 NumPy、CuPy CUDA 和 Torch CUDA 后端执行;Torch 不依赖 CuPy 桥接。预处理阶段会把排序后的time与event一次性复制到主机以构造确定性的失败组元数据,再把索引缓存到所选设备;设计矩阵、 predictor、目标函数、梯度和 Hessian 在迭代中不会转到 CPU。显式 GPU 输入在对应 路径失败时raise RuntimeError,不会回退 NumPy。- SCAD/MCP 的 trusted-gradient 路径会跳过重复的 finite-state 检查,但每次计算仍保留 自适应 predictor-range 分段;求解器快速路径不会关闭稳定的风险集缩放。
PenalizedCoxPHModel无可识别截距,且当前仅提供估计:fit_intercept=True会报错,compute_inference=True会抛出NotImplementedError。SCAD/MCP 使用 FISTA-LLA; 需要标准误和基线风险时使用CoxPH。QuantileLoss的smooth_gradient=False且has_hessian=False;对 SCAD/MCP 使用 FISTA 或 proximal IRLS-CD。HuberLoss和BisquareLoss的has_hessian=True;proximal Newton 对 SCAD/MCP 5-10 次迭代收敛。- 所有损失接受
sample_weight(CoxPartialLikelihoodLoss除外,会raise NotImplementedError)。 - 详见 Loss × Penalty × Solver 框架。
- Koenker, R. & Bassett, G. (1978). Regression Quantiles. Econometrica, 46(1), 33-50.
- Huber, P. J. (1964). Robust Estimation of a Location Parameter. Annals of Mathematical Statistics, 35(1), 73-101.
- Beaton, A. E. & Tukey, J. W. (1974). The Fitting of Power Series. Technometrics, 16(2), 147-185. (Bisquare)
- Cox, D. R. (1972). Regression Models and Life-Tables. Journal of the Royal Statistical Society, B34, 187-220.
- Wu, Y. & Liu, Y. (2009). Variable Selection in Quantile Regression. Statistica Sinica, 19, 801-817.
- Fan, J. & Li, R. (2001). Variable Selection via Nonconcave Penalized Likelihood. JASA, 96, 1348-1360. (SCAD)