趋近智
如前所述,标准回归方法通常侧重于预测目标变量的条件均值。然而,分位数回归使我们能够对条件分位数(例如中位数、第10百分位数或第90百分位数)进行建模,对预测变量与目标变量分布之间的关系提供了更全面的认识。为了使用梯度提升进行分位数回归,我们需要定义并实施合适的损失函数 (loss function):即分位数损失,也称作弹珠损失。
针对特定分位数 的分位数损失函数衡量真实值 与预测分位数 之间的误差。其定义为:
这可以使用指示函数 更简洁地表示:
请注意其不对称性:
下图展示了不同 值下的弹珠损失。
该图显示了分位数损失特有的“弹珠”形状。请注意斜率在零误差处如何变化,以及不对称性如何取决于分位数 。对于 ,正误差(低估)受到更重的惩罚,而对于 ,负误差(高估)则受到更大的惩罚。 对正负误差对称处理。
梯度提升算法通过迭代地将基础学习器(通常是树)拟合到损失函数 (loss function)相对于当前预测的负梯度。因此,我们需要 相对于 的一阶导数(梯度)。XGBoost 和 LightGBM 等一些高级实现也使用二阶导数(Hessian)来实现更快的收敛和正则化 (regularization)。
让我们找出梯度:
因此,梯度为:
现在,考虑 Hessian:
梯度是一个阶跃函数,这意味着它的导数在除 点之外的所有地方都为零,而在 点处,导数是未定义的(数学上,它涉及一个狄拉克δ函数)。标准的梯度提升实现,特别是那些使用二阶近似(如 XGBoost)的实现,需要一个明确定义的 Hessian。
我们如何处理这个问题?
objective='quantile')。在这种情况下,库在内部处理 Hessian,可能使用近似值或适用于非平滑目标函数的特定算法。如果可用,使用内置目标函数通常是推荐的方法。让我们看看如何在 Python 中为 XGBoost 或 LightGBM 等库构建自定义分位数损失函数 (loss function)。这些库期望一个函数,该函数接收当前预测值 (preds) 和真实标签 (dtrain,其中包含 y),并为每个样本返回梯度和 Hessian。
以下是自定义分位数目标函数的 Python 函数结构:
import numpy as np
def quantile_objective(alpha):
"""
分位数回归的自定义目标函数。
参数:
alpha (浮点数): 目标分位数,必须在 (0, 1) 之间。
返回值:
可调用对象:一个与 XGBoost/LightGBM 自定义目标函数兼容的函数。
"""
def objective_function(preds, dtrain):
"""
计算分位数损失的梯度和 Hessian。
参数:
preds (np.ndarray): 当前模型预测。
dtrain: 数据容器(例如 xgboost.DMatrix 或 lightgbm.Dataset)
通过 dtrain.get_label() 获取真实标签。
返回值:
grad (np.ndarray): 损失函数相对于 preds 的梯度。
hess (np.ndarray): 损失函数相对于 preds 的 Hessian。
"""
labels = dtrain.get_label()
errors = preds - labels # 注意:使用 preds - labels 与 I(preds > y) 约定一致
# 计算梯度
grad = np.where(errors > 0, 1 - alpha, -alpha)
# 计算 Hessian(使用小的常数近似)
# 一个小的正常量有助于确保算法的稳定性。
# 具体值可能需要调整或实验。
hess = np.full_like(preds, 1.0) # 或者更小的值,如 1e-6
return grad, hess
return objective_function
# 示例用法
# alpha_value = 0.75 # 目标是第75百分位数
# custom_obj = quantile_objective(alpha_value)
# 在 XGBoost 中:
# model = xgb.train(params, dtrain, num_boost_round=100, obj=custom_obj)
# 在 LightGBM 中:
# model = lgb.train(params, dtrain, num_boost_round=100, fobj=custom_obj)
重要考量:
alpha 参数 (parameter)的 objective='quantile'),这些函数通常经过优化,比自定义实现更受青睐。CatBoost 也支持分位数损失函数。通过实施或使用分位数损失函数,您可以使梯度提升模型具备超越均值预测、估计条件分位数的能力,从而为各种特殊任务提供对底层数据分布更丰富、更全面的认识。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•