Skip to the content.

Introduction to Boosted Trees(XGBoost PPT Tianqi Chen)

Contact me

本系列博客主页及相关见此处


来自陈天奇xgboost

监督学习

$\because p_i = \frac{1}{1 + e^{-w^T x_i}}
\therefore - y_i ln(p_i) - (1 - y_i) ln(1 - p_i)
= -y_i ln(\frac{1}{1 + e^{-w^T x_i}}) - (1 - y_i) ln(1 - \frac{1}{1 + e^{-w^T x_i}})
= y_iln(1 + e^{-w^T x_i}) - (1 - y_i) ln(\frac{e^{-w^T x_i}}{1 + e^{-w^T x_i}})
= y_iln(1 + e^{-w^T x_i}) - (1 - y_i) ln(\frac{1}{1 + e^{w^T x_i}})
= y_iln(1 + e^{-w^T x_i}) + (1 - y_i) ln(1 + e^{w^T x_i})$

回归树和集成(学什么)

树集成方法

模型和参数

模型: 假设有K棵树

参数:

在一元变量上学习一棵树

如何学习函数? 定义目标函数(损失,正则项),优化它!

例子: 考虑单个输入t(时间)上的回归树,希望预测在时间t我是否喜欢浪漫的音乐。

需要学习的东西是:

一元变量树(step函数)目标:

学习step函数

目标函数

模型: 假设我们有K棵树: $\hat{y}{i}=\sum{k=1}^{K} f_{k}\left(x_{i}\right), \quad f_{k} \in \mathcal{F}$

目标: $O b j=\sum_{i=1}^{n} l\left(y_{i}, \hat{y}{i}\right)+\sum{k=1}^{K} \Omega\left(f_{k}\right)$

定义$\Omega$的可能方法?

目标函数vs启发式

讨论树的时候,通常树是启发式的:

大部分的启发式方法可以对应到目标上:

回归树不仅仅可以用于回归

回归树的集成定义了如何做预测值,它可以用于分类,回归,等级评定…,取决于如何定义目标函数!

使用平方损失 $l\left(y_{i}, \hat{y}{i}\right)=\left(y{i}-\hat{y}_{i}\right)^{2}$ 为通常的梯度提升机。

使用logistic损失$l\left(y_{i}, \hat{y}{i}\right)=y{i} \ln \left(1+e^{-\hat{y}{i}}\right)+\left(1-y{i}\right) \ln \left(1+e^{\hat{y}_{i}}\right)$ 为LogitBoost

梯度提升(怎么学)

怎么学习

递增学习

损失的泰勒展开

目标为

\[O b j^{(t)}=\sum_{i=1}^{n} l\left(y_{i}, \hat{y}_{i}^{(t-1)}+f_{t}\left(x_{i}\right)\right)\\+\Omega\left(f_{t}\right)+ constant\]

由于:

\[f(x+\Delta x) \simeq f(x)+f^{\prime}(x) \Delta x+\frac{1}{2} f^{\prime \prime}(x) \Delta x^{2}\]

我们定义:

\[g_{i}=\partial_{\hat{y}^{(t-1)}} l\left(y_{i}, \hat{y}^{(t-1)}\right), \quad h_{i}=\partial_{\hat{y}^{(t-1)}}^{2} l\left(y_{i}, \hat{y}^{(t-1)}\right)\]

那么目标函数的泰勒展开就是:

\[O b j^{(t)} \simeq \sum_{i=1}^{n}\left[l\left(y_{i}, \hat{y}_{i}^{(t-1)}\right)+g_{i} f_{t}\left(x_{i}\right)+\frac{1}{2} h_{i} f_{t}^{2}\left(x_{i}\right)\right]\\+\Omega\left(f_{t}\right)+constant\]

使用平方损失的话就是:

\[g_{i}=\partial_{\hat{y}^{(t-1)}}\left(\hat{y}^{(t-1)}-y_{i}\right)^{2}=2\left(\hat{y}^{(t-1)}-y_{i}\right) \\ h_{i}=\partial_{\hat{y}^{(t-1)}}^{2}\left(y_{i}-\hat{y}^{(t-1)}\right)^{2}=2\]

新的目标函数

不考虑常数项的话:

\[\sum_{i=1}^{n}\left[g_{i} f_{t}\left(x_{i}\right)+\frac{1}{2} h_{i} f_{t}^{2}\left(x_{i}\right)\right]+\Omega\left(f_{t}\right)\]

其中 $g_{i}=\partial_{\hat{y}^{(t-1)}} l\left(y_{i}, \hat{y}^{(t-1)}\right), \quad h_{i}=\partial_{\hat{y}^{(t-1)}}^{2} l\left(y_{i}, \hat{y}^{(t-1)}\right)$

这里由于t-1轮的结果已经确定,看做常数项移除,所以只有一阶和二阶

为什么花功夫求导,不直接增长树?

优化树的定义

我们通过叶子节点分数的向量来定义树,叶子的索引映射函数把实例映射到叶子上:

定义树的复杂度:

\[\Omega\left(f_{t}\right)=\gamma T+\frac{1}{2} \lambda \sum_{j=1}^{T} w_{j}^{2}\]

两部分为叶子的数量,和叶子分数的L2正则

新的目标函数

原来的目标函数为(移除常数项):

\[\sum_{i=1}^{n}\left[g_{i} f_{t}\left(x_{i}\right)+\frac{1}{2} h_{i} f_{t}^{2}\left(x_{i}\right)\right]+\Omega\left(f_{t}\right) \\ g_{i}=\partial_{\hat{y}^{(t-1)}} l\left(y_{i}, \hat{y}^{(t-1)}\right), \quad h_{i}=\partial_{\hat{y}^{(t-1)}}^{2} l\left(y_{i}, \hat{y}^{(t-1)}\right)\]
定义叶子j内的实例集合为: $I_{j}=\left{i q\left(x_{i}\right)=j\right}$, 那么目标函数可以写为:
\[\begin{aligned} O b j^{(t)} & \simeq \sum_{i=1}^{n}\left[g_{i} f_{t}\left(x_{i}\right)+\frac{1}{2} h_{i} f_{t}^{2}\left(x_{i}\right)\right]+\Omega\left(f_{t}\right) \\ &=\sum_{i=1}^{n}\left[g_{i} w_{q\left(x_{i}\right)}+\frac{1}{2} h_{i} w_{q\left(x_{i}\right)}^{2}\right]+\gamma T+\lambda \frac{1}{2} \sum_{j=1}^{T} w_{j}^{2} \\ &=\sum_{j=1}^{T}\left[\left(\sum_{i \in I_{j}} g_{i}\right) w_{j}+\frac{1}{2}\left(\sum_{i \in I_{j}} h_{i}+\lambda\right) w_{j}^{2}\right]+\gamma T \end{aligned}\]

结构分数

\[\operatorname{argmin}_{x} G x+\frac{1}{2} H x^{2}=-\frac{G}{H}, H>0 \\ \min _{x} \quad G x+\frac{1}{2} H x^{2}=-\frac{1}{2} \frac{G^{2}}{H}\]

就是一元二次方程的极值点

定义 $G_{j}=\sum_{i \in I_{j}} g_{i}, H_{j}=\sum_{i \in I_{j}} h_{i}$ ,那么目标函数:

\[\begin{aligned} O b j^{(t)} &=\sum_{j=1}^{T}\left[\left(\sum_{i \in I_{j}} g_{i}\right) w_{j}+\frac{1}{2}\left(\sum_{i \in I_{j}} h_{i}+\lambda\right) w_{j}^{2}\right]+\gamma T \\ &=\sum_{j=1}^{T}\left[G_{j} w_{j}+\frac{1}{2}\left(H_{j}+\lambda\right) w_{j}^{2}\right]+\gamma T \end{aligned}\]

假设树结构 $q(x)$ 固定,那么每个叶子最优的权重和最后的目标函数值为:

单棵树的搜索算法

树的贪心学习

高效查找最优分割

假设 $x_j$ 是年龄,那么添加分割 $x_{j}<a$ 的增益有多大?

我们需要做的是对每一侧求和g和h,计算:

\[G a i n=\frac{G_{L}^{2}}{H_{L}+\lambda}+\frac{G_{R}^{2}}{H_{R}+\lambda}-\frac{\left(G_{L}+G_{R}\right)^{2}}{H_{L}+H_{R}+\lambda}-\gamma\]

对于排序后的实例,线性扫描足够决定特征的最优分割。

分割算法

类别变量的处理

可以通过推导的分数公式对类别变量进行处理,但是没有必要单独处理类别变量。可以把类别变量进行one-hot编码:

\[z_{j}=\left\{\begin{array}{ll}{1} & {\text { if } x \text { is in category } j} \\ {0} & {\text { otherwise }}\end{array}\right.\]

类别变量很多的时候向量会很稀疏,但是学习算法很喜欢处理稀疏数据。

剪枝和正则化

考虑划分增益,它可能是负的!

提升树算法

\[g_{i}=\partial_{\hat{y}^{(t-1)}} l\left(y_{i}, \hat{y}^{(t-1)}\right), \quad h_{i}=\partial_{\hat{y}^{(t-1)}}^{2} l\left(y_{i}, \hat{y}^{(t-1)}\right)\] \[O b j=-\frac{1}{2} \sum_{j=1}^{T} \frac{G_{j}^{2}}{H_{j}+\lambda}+\gamma T\]

总结

如何构建提升树分类器做加权回归问题,例如每个实例有重要性的权重?

\[l\left(y_{i}, \hat{y}_{i}\right)=\frac{1}{2} a_{i}\left(\hat{y}_{i}-y_{i}\right)^{2} \quad g_{i}=a_{i}\left(\hat{y}_{i}-y_{i}\right) \quad h_{i}=a_{i}\]

【略】