Gredient Boosting
GB:(利用)梯度提升,将提升问题视为优化问题,前向分步算法
利用最速下降思想实现
一阶展开拟合损失函数,沿负梯度方向迭代更新
- 损失函数中,模型的样本预测值$f(x)$是因变量
- 即$f(x)$应该沿着损失函数负梯度方向变化
- 即下个基学习器应该以负梯度方向作为优化目标,即负梯度
作为伪残差
对基学习器预测值求解最优加权系数
- 最速下降法中求解更新步长体现
- 前向分布算法中求解基学习器权重
损失函数
基学习器拟合目标:损失函数的负梯度在当前模型的值
平方损失
平方损失:$L(y, f(x)) = \frac 1 2 (y - f(x))^2$(回归)
第m-1个基学习器伪残差为
第m个基学习器为
第m轮学习器组合为
- $\alpha_m$:学习率,留给之后基模型学习空间
- 这里只是形式上表示模型叠加,实际上树模型等不可加,
应该是模型预测结果叠加
指数损失
指数损失:$L(y, f(x)) = e^{-y f(x)}$(分类)
第m-1个基学习器伪残差
基学习器、权重为
第m轮学习器组合为
步骤
- 输入:训练数据集$T={(x_1, y_1), \cdots, (x_N, y_N)}$,
损失函数$L(y, f(x))$
- $x_i \in \mathcal{X \subset R^n}$
- $y_i \in \mathcal{Y} = {-1, +1 }$
- 输出:回归树$\hat f(x)$
Gradient Boosted Desicion Tree
GBDT:梯度提升树,以回归树为基学习器的梯度提升方法
特点
- 准确率、效率相较于RF有一定提升
- 能够灵活的处理多类型数据
- Boosting类算法固有的基学习器之间存在依赖,难以并行训练
数据,比较可行的并行方案是在每轮选取最优特征切分时,并行
处理特征
XGBoost
Extreme Gradient Boost/Newton Boosting:前向分步算法利用
Newton法思想实现
二阶展开拟合损失函数
- 损失函数中,模型的样本预测值$\hat y_i$是因变量
- 将损失函数对$\hat y_i$二阶展开拟合
- 求解使得损失函数最小参数
对基学习器预测值求解最优加权系数
- 阻尼Newton法求解更新步长体现
- 前向分布算法中求解基学习器权重
- 削弱单个基学习器影响,让后续基学习器有更大学习空间
损失函数
树基学习器
XGBoost Tree:以回归树为基学习器的XGBoost模型
模型结构说明
- 基学习器类型:CART
- 叶子节点取值作惩罚:各叶子节点取值差别不应过大,否则
说明模型不稳定,稍微改变输入值即导致输出剧烈变化
- 树复杂度惩罚:叶子结点数量
XGBoost最终损失(结构风险)有
- $N, M$:样本量、基学习器数量
- $\hat y_i$:样本$i$最终预测结果
损失函数
以树作基学习器时,第$t$基学习器损失函数为
- $f_t, T_t$:第t棵回归树、树叶子节点
- $f_t(x_i)$:第t棵回归树对样本$x_i$的预测得分
- $w_j^{(t)} = f_t(x)$:第t棵树中第j叶子节点预测得分
- $gi = \partial{\hat y} l(y_i, \hat y^{t-1})$
- $hi = \partial^2{\hat y} l(y_i, \hat y^{t-1})$
- $I_j$:第j个叶结点集合
- $Gj = \sum{i \in I_j} g_i$
- $Hj = \sum{i \in I_j} h_i$
第t棵树的整体损失等于其各叶子结点损失加和,且
各叶子结点取值之间独立
则最后应根据树损失变化量确定分裂节点、完成树的分裂,精确
贪心分裂算法如下
!xgb_exact_greedy_algorithm_for_split_finding
对于连续型特征需遍历所有可能切分点
- 对特征排序
- 遍历数据,计算上式给出的梯度统计量、损失变化
不适合数据量非常大、或分布式场景
模型细节
XGB树分裂算法
- 线性回归作为基学习器时,XGB相当于L0、L2正则化的
Logistic回归、线性回归
近似分割算法
XGB近似分割算法:根据特征分布选取分位数作为候选集,将连续
特征映射至候选点划分桶中,统计其中梯度值、计算最优分割点
!xgb_approximate_algorithm_for_split_finding
- 分位点采样算法参见
ml_model/model_enhancement/gradient_boost
Sparsity-aware Split Finding
稀疏特点分裂算法:为每个树节点指定默认分裂方向,缺失值对应
样本归为该方向
XGB系统设计
Column Block for Parallel Learning
- 建树过程中最耗时的部分为寻找最优切分点,而其中最耗时部分
为数据排序
XGB对每列使用block结构存储数据
Cache-aware Access
- 列block结构通过索引获取数据、计算梯度,会导致非连续内存
访问,降低CPU cache命中率
Blocks for Out-of-core Computation
分位点采样算法—XGB
Quantile Sketch
样本点权重
- 根据已经建立的$t-1$棵树可以得到数据集在已有模型上误差,
采样时根据误差对样本分配权重,对误差大样本采样粒度更大
Rank函数
记集合$D={(x_1, h_1), \cdots, (x_n, h_n)}$
定义rank函数$r_D: R \rightarrow [0, +\infty)$如下
- 即集合$D$中权重分布中给定取值分位数
- 即取值小于给定值样本加权占比,可视为加权秩
分位点抽样序列
Weighted Quantile Sketch
记$Dk={(x{1,k}, h1), \cdots, (x{n,k}, h_n)}$为各
训练样本第$k$维特征、对应二阶导数
- 考虑到数据点可能具有相同$x, h$取值,$D_k$为可能包含
重复值的multi-set
对于多重集$D$,额外定义两个rank函数
定义相应权重函数为
多重集$D$上全部权重和定义为
Quantile Summary of Weighted Data
定义加权数据上的quantile summary为
$Q(D)=(S, \tilde r_D^{+}, \tilde r_D^{-}, \tilde w_D)$
$S$为$D$中特征取值抽样升序序列,其最小、最大值分别
为$D$中特征最小、最大值
$\tilde r_D^{+}, \tilde r_D^{-}, \tilde w_D$为定义在
$S$上的函数,满足
$Q(D)$满足如下条件时,称为
$\epsilon$-approximate quantile summary
- 即对任意$y$的秩估计误差在$\epslion$之内
- $\phi-quantile$:秩位于$\phi * N$的元素(一般向下取整)
- $\epsilon-\phi-quantile$:秩位于区间
$[(\phi-\epsilon)N, (\phi+\epsilon)N]$的元素
构建$\epsilon$-Approximate Qunatile Summary
初始化:在小规模数据集
$D={(x_1,h_1), \cdots, (x_n,h_n)}$上构建初始
初始quantile summary
$Q(D)=(S, \tilde r_D^{+}, \tilde r_D^{-}, \tilde w_D)$
满足
- 即初始化$Q(D)$为0-approximate summary
merge operation:记
$Q(D1)=(S_1, \tilde r{D1}^{+}, \tilde r{D1}^{-}, \tilde w{D1})$、
$Q(D_2)=(S_2, \tilde r{D2}^{+}, \tilde r{D2}^{-}, \tilde w{D_2})$、
$D = D_1 \cup D_2$,则归并后的
$Q(D)=(S, \tilde r_D^{+}, \tilde r_D^{-}, \tilde w_D)$
定义为
prune operation:从给定
$Q(D)=(S, \tilde r_D^{+}, \tilde r_D^{-}, \tilde w_D)$,
(其中$S = {x_1, \cdots, x_k }$),构建新的summary
$\acute Q(D)=(\acute S, \tilde r_D^{+}, \tilde r_D^{-}, \tilde w_D)$
仅定义域从$S$按如下操作抽取
$\acute S={\acute x1, \cdots, \acute x{b+1}}$
$g(Q, d)$为查询函数,对给定quantile summary $Q$、
秩$d$返回秩最接近$d$的元素