基于梯度提升的序数回归(Gradient Boosting for Ordinal Regression)的原理与实现过程
题目描述
我们面对一个序数回归(Ordinal Regression)任务。与标准分类(类别无序)不同,序数回归的目标变量是有序的离散类别(如评分等级1-5、疾病严重程度轻度/中度/重度)。现需使用梯度提升(Gradient Boosting)框架解决此问题,请详细解释其原理、建模策略、损失函数设计及优化过程。
解题过程
-
问题形式化
设有训练集 \(\{ (\mathbf{x}_i, y_i) \}_{i=1}^N\),其中 \(y_i \in \{C_1, C_2, \dots, C_K\}\) 为有序类别,且 \(C_1 \prec C_2 \prec \dots \prec C_K\)。目标:学习映射 \(f: \mathcal{X} \to \{C_1, \dots, C_K\}\),使预测顺序与真实顺序一致。 -
核心挑战与解决思路
- 直接使用分类损失(如交叉熵)会忽略类别间的顺序关系。
- 常见方法:将序数回归转化为一系列二元分类问题,或使用阈值模型(Threshold Model)。
- 梯度提升框架中,通常采用阈值模型结合可微损失函数,通过梯度下降优化。
-
阈值模型(Threshold Model)设定
- 假设存在一个隐函数 \(F(\mathbf{x})\)(由提升树等基学习器拟合)和一组阈值参数 \(\theta_1 < \theta_2 < \dots < \theta_{K-1}\)。
- 决策规则为:
\[ \hat{y} = C_k \quad \text{若} \quad \theta_{k-1} < F(\mathbf{x}) \le \theta_k \]
其中定义 $ \theta_0 = -\infty, \theta_K = +\infty $。
- 直观解释:隐函数 \(F(\mathbf{x})\) 输出一个连续“得分”,通过阈值划分到有序类别。
- 损失函数设计
常用序数损失包括:- 序数逻辑损失(Ordinal Logistic Loss):
对样本 \((\mathbf{x}, y=C_k)\),定义概率模型:
- 序数逻辑损失(Ordinal Logistic Loss):
\[ P(y \preceq C_k \mid \mathbf{x}) = \sigma(\theta_k - F(\mathbf{x})) \]
其中 $ \sigma $ 是sigmoid函数。则样本的负对数似然为:
\[ L = -\sum_{k=1}^{K-1} [ \mathbb{I}(y \preceq C_k) \log \sigma(\theta_k - F) + \mathbb{I}(y \succ C_k) \log (1 - \sigma(\theta_k - F)) ] \]
实际上只需计算两项:对真实类别 $ k $ 计算 $ \sigma(\theta_k - F) - \sigma(\theta_{k-1} - F) $ 的负对数。
- 均方误差损失(适用于序数得分):
将类别编码为连续值(如1,2,…,K),用回归损失拟合,但需后处理四舍五入到最近整数类别。
-
梯度提升优化步骤
以序数逻辑损失为例,采用梯度提升树(如XGBoost、LightGBM)框架:a. 初始化
初始化隐函数 \(F_0(\mathbf{x}) = 0\) 和阈值 \(\{\theta_k\}\)(如均匀间隔初始化)。b. 循环迭代 \(t=1 \text{ to } T\)
- 计算损失关于 \(F(\mathbf{x}_i)\) 的负梯度(伪残差):
\[ r_{it} = -\frac{\partial L(y_i, F(\mathbf{x}_i))}{\partial F(\mathbf{x}_i)} \bigg|_{F=F_{t-1}} \]
对序数逻辑损失,推导可得:
\[ r_i = \sigma(\theta_{k} - F) - \sigma(\theta_{k-1} - F) - \mathbb{I}(y_i = C_k) \]
其中 $ k $ 为真实类别索引。
2. 拟合一棵回归树 $ h_t(\mathbf{x}) $ 来近似伪残差 $ r_i $,即用特征 $ \mathbf{x}_i $ 预测 $ r_i $。
3. 更新隐函数:
\[ F_t(\mathbf{x}) = F_{t-1}(\mathbf{x}) + \eta h_t(\mathbf{x}) \]
其中 $ \eta $ 为学习率。
4. 更新阈值参数 $ \theta_k $(可选):
在每轮或若干轮后,通过优化序数损失固定 $ F_t $ 重新估计 $ \theta_k $(例如用牛顿法)。
c. 预测时
对新样本 \(\mathbf{x}\),计算 \(F_T(\mathbf{x})\),找到满足 \(\theta_{k-1} < F_T(\mathbf{x}) \le \theta_k\) 的 \(k\),输出类别 \(C_k\)。
-
实现注意事项
- 阈值单调性约束:优化时强制 \(\theta_1 < \dots < \theta_{K-1}\)(如用差分参数化 \(\theta_k = \theta_1 + \sum_{j
)。 - 基学习器选择:常用回归树,因其能捕捉非线性交互。
- 正则化:通过树的最大深度、学习率、子采样等控制过拟合。
- 阈值单调性约束:优化时强制 \(\theta_1 < \dots < \theta_{K-1}\)(如用差分参数化 \(\theta_k = \theta_1 + \sum_{j
-
扩展与变体
- 可将阈值建模为输入相关的函数(如用神经网络参数化),但会提高复杂度。
- 使用其他序数损失,如铰链损失(Ordinal Hinge Loss)或绝对误差损失。
总结
该方法核心是将序数回归建模为“隐连续得分 + 阈值划分”,在梯度提升中同时学习得分函数 \(F(\mathbf{x})\) 和阈值参数,通过序数专用损失函数确保顺序一致性,兼具灵活性与预测性能。