梯度提升树(GBDT)
梯度提升树(Gradient Boosting Decision Tree, GBDT)是一类基于加性模型与梯度提升思想的集成学习方法,可用于分类与回归。它通过逐步拟合损失函数的负梯度(伪残差),不断叠加弱学习器(通常为 CART 回归树),最终得到高精度模型。
梯度提升树(GBDT)
1. 方法概述
梯度提升树(Gradient Boosting Decision Tree, GBDT)是一类基于加性模型与梯度提升思想的集成学习方法,可用于分类与回归。它通过逐步拟合损失函数的负梯度(伪残差),不断叠加弱学习器(通常为 CART 回归树),最终得到高精度模型。
设共有 \(n\) 个样本、\(d\) 个特征,数据集为
$$ \mathcal{D}=\{(x_i,y_i)\}_{i=1}^{n},\quad x_i\in\mathbb{R}^d \tag{1} $$
其中 \(y_i\) 为类别标签(分类)或连续值(回归)。
2. 公共部分(预处理与 GBDT 机制)
系统在模型训练前支持缺失处理、编码、缩放、特征构造、特征选择与降维等步骤(均在训练集上拟合,再作用于测试集或交叉验证折内,避免数据泄漏)。
2.1 标准化与归一化
Z-score 标准化: $$ z_{ij}=\frac{x_{ij}-\mu_j}{\sigma_j} \tag{2} $$
Min-Max 归一化: $$ z_{ij}=\frac{x_{ij}-\min x_j}{\max x_j-\min x_j+\varepsilon} \tag{3} $$
2.2 One-Hot 编码(类别型变量)
$$ x^{(k)}_{ij}= \begin{cases} 1,& x_{ij}=\text{cat}_k\\ 0,& \text{otherwise} \end{cases} \tag{4} $$
2.3 多项式特征(可选)
$$ \phi(x)=\{x_1^{a_1}x_2^{a_2}\cdots x_d^{a_d}\mid a_1+\cdots+a_d\le d_p\} \tag{5} $$
2.4 特征选择(方差阈值 / 互信息)
方差阈值: $$ \operatorname{Var}(x_j)=\frac{1}{n-1}\sum_{i=1}^{n}(x_{ij}-\mu_j)^2 \tag{6} $$
互信息: $$ I(X;Y)=\sum_{x\in X}\sum_{y\in Y}p(x,y)\log\frac{p(x,y)}{p(x)p(y)} \tag{7} $$
2.5 降维(PCA / KPCA)
协方差矩阵: $$ \Sigma=\frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})(x_i-\bar{x})^\top \tag{8} $$
主成分解释率: $$ \eta_k=\frac{\lambda_k}{\sum_{j=1}^{d}\lambda_j} \tag{9} $$
2.6 IQR 异常值截断(可选)
$$ \text{IQR}=Q_3-Q_1,\quad x\leftarrow \min(\max(x,Q_1-k\cdot\text{IQR}),\,Q_3+k\cdot\text{IQR}) \tag{10} $$
2.7 GBDT 加性模型与提升机制
GBDT 的模型为加性形式:
$$ F_M(x)=F_0(x)+\sum_{m=1}^{M}\nu\,h_m(x) \tag{11} $$
其中 \(h_m(x)\) 为第 \(m\) 轮拟合得到的回归树,\(\nu\in(0,1]\) 为学习率。
对任意损失函数 \(L(y,F(x))\),第 \(m\) 轮的伪残差定义为
$$ r_{im}=-\left[\frac{\partial L\big(y_i,F(x_i)\big)}{\partial F(x_i)}\right]_{F=F_{m-1}} \tag{12} $$
拟合回归树 \(h_m(x)\) 使其逼近 \(r_{im}\),并计算最优步长
$$ \rho_m=\arg\min_{\rho}\sum_{i=1}^{n}L\big(y_i,\,F_{m-1}(x_i)+\rho\,h_m(x_i)\big) \tag{13} $$
模型更新为
$$ F_m(x)=F_{m-1}(x)+\nu\,\rho_m\,h_m(x) \tag{14} $$
当使用子采样比例 \(0<\text{subsample}\le 1\) 时,可形成随机梯度提升(Stochastic Gradient Boosting),提升泛化能力。
2.8 特征重要性(基于损失下降)
若第 \(j\) 个特征在所有树的分裂中带来损失下降 \(\Delta I_{t,j}\),则其重要性可表示为
$$ I_j=\sum_{m=1}^{M}\sum_{t\in T_m}\Delta I_{t,j} \tag{15} $$
其中 \(T_m\) 为第 \(m\) 棵树的分裂节点集合。
2.9 符号说明
| 符号 | 含义 |
|---|---|
| \(n\) | 样本数量 |
| \(d\) | 特征维度 |
| \(M\) | 树的数量(n_estimators) |
| \(\nu\) | 学习率(learning_rate) |
| \(h_m(x)\) | 第 \(m\) 棵回归树 |
| \(F_m(x)\) | 第 \(m\) 轮加性模型 |
| \(r_{im}\) | 伪残差 |
| \(\rho_m\) | 步长 |
| \(\hat{y}_i\) | 预测值 |
| \(TP,FP,TN,FN\) | 混淆矩阵四要素 |
| \(B\) | 直方图分箱数(HistGradientBoosting) |
| \(w_i\) | 样本权重 |
| \(m^*\) | 最佳迭代轮数 |
| \(P\) | 早停耐心值(patience) |
| \(c_j\) | 单调约束方向(\(-1,0,+1\)) |
| \(q\) | 分位数水平(\(0<q<1\)) |
| \(\phi_j\) | SHAP 特征贡献值 |
| \(f(x)\) | 模型输出(GBDT 预测函数) |
| \(\varepsilon\) | 极小正数(防止除零) |
3. 分类版(GBDTClassifier)
3.1 概率输出与逻辑损失(Binary)
对二分类任务,模型输出经 Sigmoid 转为概率:
$$ P(y=1\mid x)=\sigma(F(x))=\frac{1}{1+e^{-F(x)}} \tag{16} $$
逻辑损失(对数似然)为
$$ L=-\sum_{i=1}^{n}\Big[y_i\log p_i+(1-y_i)\log(1-p_i)\Big] \tag{17} $$
对应的伪残差近似为
$$ r_{im}=y_i-p_i \tag{18} $$
3.2 多分类(Softmax / Multinomial Loss)
设类别数为 \(K\),模型输出对每一类给出一个得分函数 \(F_k(x)\)。Softmax 概率为
$$ P(y=k\mid x)=\frac{\exp(F_k(x))}{\sum_{j=1}^{K}\exp(F_j(x))} \tag{19} $$
多分类交叉熵损失为
$$ L=-\sum_{i=1}^{n}\sum_{k=1}^{K}\mathbb{I}(y_i=k)\log P(y_i=k\mid x_i) \tag{20} $$
其对第 \(k\) 类的伪残差为
$$ r_{im}^{(k)}=\mathbb{I}(y_i=k)-P(y_i=k\mid x_i) \tag{21} $$
GBDT 以“一类一棵树”的方式迭代拟合上述伪残差,即每轮为每个类别训练一棵回归树并更新 \(F_k(x)\)。
3.3 分类评价指标
准确率 $$ \text{Accuracy}=\frac{TP+TN}{TP+TN+FP+FN} \tag{22} $$
精确率 / 召回率 $$ \text{Precision}=\frac{TP}{TP+FP} \tag{23} $$
$$ \text{Recall}=\frac{TP}{TP+FN} \tag{24} $$
F1 值 $$ F1=\frac{2\cdot \text{Precision}\cdot \text{Recall}}{\text{Precision}+\text{Recall}} \tag{25} $$
ROC-AUC(曲线下面积) $$ \text{AUC}=\int_0^1 \text{TPR}(\text{FPR})\,d(\text{FPR}) \tag{26} $$
平均精度(PR-AUC / AP) $$ \text{AP}=\sum_k (R_k-R_{k-1})\,P_k \tag{27} $$
3.4 分类文字说明(可直接用于论文)
- 使用 GBDT 进行分类建模,逐轮拟合负梯度(伪残差),构成加性树模型(式(11)–(14))。
- 二分类输出采用 Sigmoid 概率(式(16)),并使用逻辑损失优化(式(17))。
- 多分类采用 Softmax 交叉熵并对每一类拟合伪残差(式(19)–(21))。
- 模型评估使用 Accuracy、Precision、Recall、F1 与 ROC/PR 指标(式(22)–(27))。
- 提供混淆矩阵、ROC/PR 曲线、阈值曲线、学习曲线与特征重要性图用于可视化解释。
4. 回归版(GBDTRegressor)
4.1 平方损失与伪残差
回归任务通常采用平方损失:
$$ L=\frac{1}{2}\sum_{i=1}^{n}\big(y_i-F(x_i)\big)^2 \tag{28} $$
其伪残差为
$$ r_{im}=y_i-F_{m-1}(x_i) \tag{29} $$
4.2 回归评价指标
MAE $$ \text{MAE}=\frac{1}{n}\sum_{i=1}^{n}|y_i-\hat{y}_i| \tag{30} $$
MSE / RMSE $$ \text{MSE}=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2 \tag{31} $$
$$ \text{RMSE}=\sqrt{\text{MSE}} \tag{32} $$
决定系数 $$ R^2=1-\frac{\sum_{i=1}^{n}(y_i-\hat{y}_i)^2}{\sum_{i=1}^{n}(y_i-\bar{y})^2} \tag{33} $$
4.3 回归文字说明(可直接用于论文)
- 使用 GBDT 回归模型,逐轮拟合残差,形成加性树预测函数(式(11)–(14))。
- 采用平方损失进行优化(式(28)),并使用 MAE、RMSE 与 \(R^2\) 评估预测性能(式(30)–(33))。
- 输出预测–真实散点图、残差直方图、残差–拟合图与 Q-Q 图用于诊断残差分布与模型稳定性。
5. 交叉验证与学习曲线(可选)
交叉验证用于评估模型的泛化稳定性。若采用 \(K\) 折交叉验证,可计算每折的性能指标并汇总。学习曲线通过不同训练集规模下的训练/验证得分,判断欠拟合或过拟合趋势。
6. 结果解释与论文写作建议
论文中建议按“表—图—解释”顺序组织结果:
- 参数与指标表:展示主要超参数与分类/回归指标;
- 交叉验证结果:说明模型在不同折上的稳定性;
- 图表:分类给出混淆矩阵、ROC/PR、阈值曲线;回归给出散点图与残差诊断图;
- 特征重要性解释:分析影响输出的关键特征。
7. 实现说明与注意事项
就本项目当前可运行版本而言,GBDT 的真实核心并不在通用名 calculator.py,而在:
具体的算法/梯度提升树(GBDT)/core/critic_calculator.py具体的算法/梯度提升树(GBDT)/ui/results_widget.py具体的算法/梯度提升树(GBDT)/ui/feature_engineering_panel.py
这意味着该模块不是“只训练一个 GBDT 模型”,而是“特征工程 + GBDT 训练/验证 + 图表导出 + repro”的完整工程页面。
7.1 当前结果目录与文件结构
core/critic_calculator.py::_prepare_output() 会把输出统一写到:
results/梯度提升树(GBDT)分析结果_<YYYYMMDD_HHMMSS>/
主结果文件名固定为:
梯度提升树(GBDT)分析结果_<时间戳>.xlsx
结果页 ui/results_widget.py 还会在同目录下导出:
repro_template_<时间戳>.py- 原始输入副本,例如
gbdt_window1_input.csv
7.2 当前 Excel 工作簿的真实内容
根据 core/critic_calculator.py::_export_excel(),当前 Excel 结果并不是只输出一个“指标汇总表”,而是按任务类型和可用结果写入多个工作表。核心页签包括:
概要训练集测试集预测CV汇总混淆矩阵特征重要性图表清单参数
因此,论文撰写时不应把该模块误写成“只给出 Accuracy 或 RMSE”。当前实现会把数据划分、预测明细、交叉验证摘要和图表索引一起导出。
7.3 当前图表导出的真实口径
分类任务下,当前代码会按实际可用结果导出:
confusion_matrix.pngroc.pngpr.pngthreshold_f1.pngthreshold_tpr_fpr.pngfeature_importances.pnglearning_curve.png
回归任务下,当前代码会导出:
pred_vs_true.pngtrue_vs_pred_line.pngresiduals_hist.pngresiduals_qq.pngresiduals_vs_pred.pngfeature_importances.pnglearning_curve.png
图表清单 工作表会登记这些图表路径;若环境缺少 xlsxwriter,程序仍会保留 Excel 主结果,并以图表索引表代替嵌图展示。
7.4 当前 repro 链路的真实行为
结果页点击“导出复现代码”后,ui/results_widget.py 会生成 repro_template_<时间戳>.py。该脚本会:
- 记录本次任务类型、目标列和参数;
- 复用本次
preprocess配置; - 重新调用
GBDTCriticCalculator.run_analysis(); - 输出新的结果文件并在标准输出中打印
OK或FAIL。
因此,当前项目已经形成“原始输入副本 + 参数快照 + 结果工作簿 + 图表 + 可执行 repro 脚本”的完整复现实验链。
7.5 当前项目实现需要特别说明的工程口径
- GBDT 适用于中小规模表格数据,具备较强的非线性拟合能力;
- 学习率与树数量需配合调整,过大易过拟合,过小训练时间增加;
- 若数据量很大可启用 HistGradientBoosting(直方图加速版);
- 对类别不平衡问题,可考虑样本权重或阈值调整策略;
- 论文若要与程序输出保持一致,应把特征工程、交叉验证与图表导出也写进方法实现部分,而不是只写 GBDT 主公式。
8. 扩展机制(HistGradientBoosting / 早停 / 样本权重)
8.1 直方图加速(HistGradientBoosting)
直方图梯度提升通过将连续特征分箱,从而以更低的计算复杂度近似最优分裂。设第 \(j\) 个特征的分箱边界为 \(q_{j,0}<q_{j,1}<\cdots<q_{j,B}\),则样本 \(x_{ij}\) 的箱编号可写为
$$ b_{ij}=\max\{k \mid q_{j,k}\le x_{ij}\},\quad k\in\{0,\ldots,B-1\} \tag{34} $$
随后在各箱内累计梯度与二阶梯度(或残差统计量),以近似最优划分点。
8.2 早停机制(Early Stopping)
在训练过程中用验证集损失 \(L_{\text{val}}(m)\) 监控泛化性能,最佳轮数可定义为
$$ m^*=\arg\min_{1\le m\le M} L_{\text{val}}(m) \tag{35} $$
若连续 \(P\) 轮验证损失没有改进,则停止训练:
$$ L_{\text{val}}(m) > L_{\text{val}}(m^*),\quad \text{for } P \text{ consecutive rounds} \tag{36} $$
该机制能有效缓解过拟合,并缩短训练时间。
8.3 样本权重(Class/Instance Weight)
当样本重要性不同或类别不均衡时,可引入样本权重 \(w_i\) 加权损失:
$$ L_w=\frac{\sum_{i=1}^{n} w_i\,L\big(y_i,F(x_i)\big)}{\sum_{i=1}^{n} w_i} \tag{37} $$
对应的加权伪残差为
$$ r_{im}=-w_i\left[\frac{\partial L\big(y_i,F(x_i)\big)}{\partial F(x_i)}\right]_{F=F_{m-1}} \tag{38} $$
在分类任务中,常用“类别权重”按类别频率的倒数或比例进行设置,以缓解类别不平衡问题。
8.4 单调约束(Monotonic Constraints)
当业务先验要求模型输出随某些特征单调变化时,可设置单调约束。设第 \(j\) 个特征的约束方向为
$$ c_j\in\{-1,0,+1\} \tag{39} $$
其中 \(+1\) 表示单调递增,\(-1\) 表示单调递减,\(0\) 表示无约束。单调约束在树的分裂与叶子值拟合时施加限制,以保证预测函数对该特征的整体单调性。
8.5 分位数损失(Quantile / Pinball Loss)
当需要预测条件分位数时,可采用分位数损失(Pinball Loss):
$$ L_q(y,\hat{y})= \begin{cases} q\,(y-\hat{y}), & y\ge \hat{y} \\ (1-q)\,(\hat{y}-y), & y<\hat{y} \end{cases} \tag{40} $$
其中 \(q\in(0,1)\) 表示分位数水平。通过分别训练多个 \(q\)(如 0.1/0.5/0.9)可得到预测区间。
8.6 SHAP 解释(特征贡献分解)
SHAP 值用于解释单个样本的特征贡献,满足加性分解:
$$ f(x)=\mathbb{E}[f(x)]+\sum_{j=1}^{d}\phi_j \tag{41} $$
其中 \(\phi_j\) 为第 \(j\) 个特征对预测的贡献值。TreeSHAP 可高效计算树模型的 SHAP 值,支持全局重要性(\(|\phi_j|\) 均值)与局部解释(单样本贡献)。
9. 单篇终审补充
9.1 图题与表题对齐建议
概要表可写为:表X GBDT 结果概要表。训练集表可写为:表X GBDT 训练集数据表。测试集表可写为:表X GBDT 测试集数据表。预测表可写为:表X GBDT 逐样本预测结果表。CV汇总表可写为:表X GBDT 交叉验证汇总表。混淆矩阵表可写为:表X GBDT 混淆矩阵表。特征重要性表可写为:表X GBDT 特征重要性表。图表清单表可写为:表X GBDT 图表索引表。参数表可写为:表X GBDT 参数设置表。
9.2 终审说明
- 当前最适合作为终审证据的代表性目录可采用
具体的算法/梯度提升树(GBDT)/results/梯度提升树(GBDT)分析结果_20260329_163727。该目录同时具备结果簿、输入快照和 repro 脚本。 - 真实工作表为
概要/训练集/测试集/预测/CV汇总/混淆矩阵/特征重要性/图表清单/参数。这说明当前代表性目录的结果簿比文档自述更精简,没有单独的分类报告或 ROC/PR sheet,终审说明必须以真实结果簿为准。 - 该目录除主结果簿、输入快照和 repro 脚本外,还存在
charts/子目录,内含confusion_matrix.png、feature_importances.png、roc.png、pr.png、threshold_f1.png、threshold_tpr_fpr.png等实体图文件。因此,这一条终审证据既能支撑“结果簿 + repro 链路”,也能支撑“分类图集引用”。 - 当前复现脚本为
repro_template_20260329_163727.py,采用脚本同目录输入快照SRC_FILE = 'gbdt_window1_input.csv',不是repro_inputs/...。因此这篇文档应明确写成“脚本同目录 CSV 快照复现”。 - 如果后续要把 GBDT 做成更强的论文插图型终稿,建议再补一套实际落地了 ROC/PR 或残差图的结果目录;当前这版先以真实 xlsx 与 repro 证据为主。
9.3 全量强化补充
- 本轮按真实磁盘再次核对,算法目录为
具体的算法/梯度提升树(GBDT),代表性结果目录为具体的算法/梯度提升树(GBDT)/results/梯度提升树(GBDT)分析结果_20260329_163727。 - 该目录主工作簿为
梯度提升树(GBDT)分析结果_20260329_163727.xlsx,真实工作表为概要、训练集、测试集、预测、CV汇总、混淆矩阵、特征重要性、图表清单、参数。 - 当前目录根部除主工作簿外,还包含输入快照
gbdt_window1_input.csv与repro_template_20260329_163727.py;图文件位于charts/子目录,实际文件为confusion_matrix.png、feature_importances.png、roc.png、pr.png、threshold_f1.png、threshold_tpr_fpr.png。 - 当前 repro 口径不是
repro_inputs/...,而是脚本同目录 CSV 快照:repro_template_20260329_163727.py中明确写有SRC_FILE = 'gbdt_window1_input.csv'。因此这篇应归类为“脚本同目录快照复现”案例。 - 这份结果工作簿没有单独的
分类报告、ROC数据或PR数据sheet,相关信息主要通过图表清单和charts/子目录承载。论文中若要引用 ROC/PR,应对应实体 png,而不是声称工作簿里有专门数据表。 - 旧文档里关于“没有实体图文件”的描述已经不再符合当前磁盘事实,后续应统一以
charts/子目录中的真实图集为准。
9.4 软件实现核查补充(2026-07)
- 当前实现以
core/critic_calculator.py和core/fe_pipeline.py为核心,支持分类/回归两条分支,并可选 HistGradientBoosting;文档里的 GBDT 理论可以保留,但结果解释必须落回实际导出的表和图。 - 当前最新结果目录
results/梯度提升树(GBDT)分析结果_20260411_200543_285196只有主工作簿和charts/子目录,图主要是charts/feature_importances.png、charts/learning_curve.png、charts/pred_vs_true.png、charts/residuals_hist.png、charts/residuals_qq.png、charts/residuals_vs_pred.png、charts/true_vs_pred_line.png。 - 当前这一版结果更偏回归证据集,不要把旧目录里的
混淆矩阵写进最新目录。 - 复现脚本出现在较早时间戳目录中,例如
repro_template_20260411_200349.py和repro_template_20260411_200411.py;文中写复现时要按对应时间戳目录描述,不要把最新目录写成自带 repro。 - 结果簿当前以
概要、训练集、测试集、预测、CV汇总、特征重要性、图表清单、参数为主,论文写作应按这一组实际工作表引用。