xgboost :提升树

目录

1 监督学习的主要内容回顾

1.1 监督学习基础 

1.  符号说明:

2. 参数和目标函数

3. 训练数据上的损失:  

4.正则化

5.优化目标与偏差-方差 Trade-off 

2 回归树与集成 (What are we Learning) 

2.1  集成方法的优势

2.2 xgboost的模型与参数

2.3   xgboost的目标函数

1. Tree Ensemble 的目标函数

2 启发式策略

2.4 回归树可用于分类、回归、 Ranking等,它完全取决于如何定义目标函数!

3 梯度提升 (How do we Learn) 

 3.1 Additive Training 

3.2  loss的泰勒展式近似

3.3 新的目标函数:去除常数项

3.4 改进树的定义

3.5  定义一棵树的复杂度

3.6  再次讨论目标函数

3.7 The Structure Score 

(2)定义 和

(3)求解最优权重  和最优目标函数值

(4)The Structure Score Calculation 

3.8  树的贪心学习

(1)单棵树的搜索算法

(2) 实际中用贪心策略进行树的生长

(3)Efficient Finding of the Best Split 

(4)寻找分割点的算法

(5)分类变量的处理方式

3.9 剪枝与正则化

3.10   Boosted Tree Algorithm 

4 小结

1 监督学习的主要内容回顾

1.1 监督学习基础 

1.  符号说明:

\large x_{i}\in R^{d} 表示第i个训练样本; 模型要根据已知的\large x_{i}得出对应的预测值\large y_{i} ,(关键在于如何预测)。包括线性回归和logistic回归在内的线性模型形如\large \hat{y_{i}}=\sum_{j}w_{j}x_{ij} 。而根据任务的不同,预测的得分\large \hat{y_{i}}可以有不同的解释:在线性回归中,\large \hat{y_{i}}表示预测值;在Logistic 回归中 ,\large \frac{1}{\left ( 1+exp\left ( -\hat{y_{i}} \right ) \right )} 表示实例属于正例的预测概率;在ranking 中,\large \hat{y_{i}} 可以表示rank score 。

2. 参数和目标函数

是我们需要从数据中学习的 things ;在线性模型中的参数为\large \Theta =\left \{ w_{j} |j=1,2,...,d\right \}.。;目标函数可以表示为训练损失和正则化两部分的和。

3. 训练数据上的损失: \large L=\sum_{i=1}^{n}l\left ( y_{i} ,\hat{y_{i}}\right ) 

 平方损失Square loss为\large l\left ( y_{i} ,\hat{y_{i}}\right ) = \left ( y_{i}-\hat{y_{i}} \right )^{2} 

Logistic loss 为\large 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 )

4.正则化

 与模型的复杂度有关,常用的有L2范数 norm(\large \Omega \left ( w \right )=\lambda \left \| w \right \|^{2}) 和 L1范数(  \large \Omega \left ( w \right )=\lambda \left \| w \right \|_{1}  );

   岭回归Ridge regression 与Lasso 的区别就是 岭回归采用L2正则化,Lasso采用L1正则化;它们都是现性模型,都采用平方损失。

Ridge regression :\large \sum_{i=1}^{n}\left ( y_{i}-w^{T} x_{i}\right )^{2} +\lambda \left \| w \right \|^{2}

Lasso :   \large \sum_{i=1}^{n}\left ( y_{i}-w^{T} x_{i}\right )^{2} +\lambda \left \| w \right \|_{1}

Logistic regression:  [线性模型,logistic损失函数,L2正则化 ]

\large \sum_{i=1}^{n}\left [ y_{i} ln \left ( 1+e^{- w^{T}x_{i} }}}^{} \right )+\left ( 1- y_{i} \right )ln\left ( 1+e^{w^{T}x_{i} }} \right ) \right ] +\lambda \left \| w \right \|^{2}

思考:如何同时对岭回归和logistic回归使用SGD?

5.优化目标与偏差-方差 Trade-off 

2 回归树与集成 (What are we Learning) 

回归树采用CART决策树,其叶子节点对应的值是一个实际的数值而非一个确定的类别,有利于高效地实现GB算法的优化;

2.1  集成方法的优势

运用广泛,例如GBM和随机森林等,其中GBM即gradient boosting machine,又叫梯度提升树算法,常用于数据挖掘竞赛。它对输入具有尺度不变性,无需细致的features normalization;可以学习特征之间的高阶交互;可广泛运用于工业界。

2.2 xgboost的模型与参数

回归树就是一个将多个属性映射为具体数值的函数(回归树不仅限于回归任务!)。此模型的参数包括

(1)每棵树的结构与每个叶子的 score (2)或者简单地使用函数表示为\large \Theta =\left \{ f_{1}, f_{2}, \cdots , f_{K},\right \}其中\large f_{k}, k=1,...,K表示第k棵树,集成模型需要学习的就是这K个树的结构与每个叶子得分。

2.3   xgboost的目标函数

1. Tree Ensemble 的目标函数

对于单变量的回归树,其目标为阶跃函数step functions。而Tree Ensemble 的目标函数如何表示?

其中定义复杂度\large \Omega的可能方式有:树的叶子结点的数目 、树的深度、叶子权重的L2范数等。

2 启发式策略

当谈及决策树时,常用启发式策略 Heuristic :使用信息增益来划分,对树剪枝,最大深度、Smooth the leaf values。

多数启发式策略能良好地映射到目标函数,下面正式讨论what we are learning ;

2.4 回归树可用于分类、回归、 Ranking等,它完全取决于如何定义目标函数!

目前已知的是:使用平方损失\large l\left ( y_{i} ,\hat{y_{i}}\right ) = \left ( y_{i}-\hat{y_{i}} \right )^{2} 则模型变为普通的gradient boosted machine ;

使用Logistic损失\large 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 。

3 梯度提升 (How do we Learn) 

对于目标函数    \large \sum_{i=1}^{n}l\left ( y_{i} ,\hat{y_{i}}\right )+\sum_{k}\Omega \left ( f_{k} \right ),f_{k} \in F; 不能使用SGD等方法来找出最优f,因为它们是树而不是数值向量。

解决方法是采用加法训练Additive Training (Boosting) ,从constant prediction开始,每次增加一棵树,在第t次增加的第t棵树为\large f_{t}\left ( x_{i} \right ),除此之外要保留上一轮中加入的函数(树)。

分步骤优化目标函数,优化顺序从第1棵直到第K棵,每次优化完一棵再优化下一棵,整个过程可表示为:在现有的t-1棵树的基础上,增加一棵使目标函数值最优的树 \large f_{t}\left ( x_{i} \right )作为最优的CART树。

 3.1 Additive Training 

如何决定每次要加入的f?

选择使目标函数值最优的树 \large f_{t}\left ( x_{i} \right )作为最优的CART树。第t轮的预测为

3.2  loss的泰勒展式近似

3.3 新的目标函数:去除常数项

为什么要花很多精力去推导目标函数,而不是直接grow trees ?

1. 理论方面的益处:知道我们在学什么,以及收敛性

2.  Engineering benefit:回顾监督学习的基础.

 (1)\large g_{i},h_{i}都来自损失函数的定义;

(2)函数的学习通过\large g_{i},h_{i} 仅取决于目标函数

(3)当要求同时实现square loss and logistic loss 的提升树时,思考如何分隔代码的模块,

3.4 改进树的定义

叶子上的一个分数向量将实例映射到叶子上的叶子索引映射函数 来定义树;

\large w表示树的叶子权重,q 表示树的结构。

3.5  定义一棵树的复杂度

复杂度的定义方式不唯一,我们将其定义为

3.6  再次讨论目标函数

(1)定义叶子j上的实例集为 \large I_{j}=\left \{ i|q\left ( x_{i} \right ) =j \right \} 也就是对每个叶子上的样本进行计数。

(2)按每个叶子,对目标函数重新分组

它是T个独立的二次函数的和,其中T为树的棵树。

3.7 The Structure Score 

(1)对于二次函数\large f\left ( x \right )=ax^{2}+ x ,其极值点为\large -\frac{b}{2a};对应的函数值为\large \frac{-b^{2}}{4a};

对于单变量二次函数即有

(2)定义\large G_{j} 和\large H_{j}

\large G_{j}=\sum_{i\in I_{j}}g_{i} ,即叶子j中的每个实例的 \large g_{i} 之和,其中\large g_{i} 表示损失\large l\left ( y_{i},\hat{y}^{\left ( t-1 \right )} \right ) 对上一轮的预测\large \hat{y}^{\left ( t-1 \right )}的一阶导gradient;

\large H_{j}=\sum_{i\in I_{j}}h_{i},即叶子j中的每个实例的 \large h_{i} 之和,其中\large h_{i} 表示损失\large l\left ( y_{i},\hat{y}^{\left ( t-1 \right )} \right ) 对上一轮的预测\large \hat{y}^{\left ( t-1 \right )}的二阶导hessian;

则第t轮的目标函数变为

(3)求解最优权重 \large w_{j}^{\ast } 和最优目标函数值

假设树的结构\large q\left ( x \right )是固定的,则每个叶子的最优权重 \large w_{j}^{\ast } 和相应的目标函数值可表示为

(4)The Structure Score Calculation 

统计每个叶子上的实例并表示成集合,计算各个叶子的G和H,再按上述公式求最优目标值和最优权重。 

3.8  树的贪心学习

(1)单棵树的搜索算法

枚举出可能的树结构q,但是可能有无限多种可能的树结构。使用以下得分方程,计算q的structure score ;找到最优树结构后,并使用最佳叶子权重

 

(2) 实际中用贪心策略进行树的生长

实际中用贪心策略进行树的生长(如下图),但仍旧存在的问题是:如何找到最佳的分支点?

(3)Efficient Finding of the Best Split 

分割规则 \large x_{j}< a 的信息增益是什么?如果\large x_{j}表示年龄,那么我们所需的就是以下分割线两边的g 和h的和,

L,和R分别表示左右两边,计算增益的公式如下

最优分割就可以通过按年龄对实例进行排序后从左到右计算信息增益来确定。

(4)寻找分割点的算法

1. 对于每个节点,枚举所有特征:

1)   对每个特征,按特征值对样本进行排序

2)使用 linear scan 来决定该特征的最优分割

3)选择所有特征上的最优分割方法。

2.生成一棵深度为K的树的时间复杂度

1)   \large O\left ( ndK\, log n ) \right ),对每一层,需要\large O\left ( n\, logn \right )来排序,有d个特征,并且需要为K个层做排序

2)   可以进一步优化(使用近似方法或者存储排序后的特征)

3)   可以用于数据量很大的情形

(5)分类变量的处理方式

1) 有些树学习算法是对类别变量和连续变量进行分别处理,此时可简单地使用基于类别变量推导的 score split 得分公式

2)实际上无需对类别变量单独处理,可以使用以下 one-hot 编码把类别变量转化为数值向量,向量长度等于类别数目

如果类别数很多则向量很稀疏,而学习算法更擅长处理稀疏数据。

3.9 剪枝与正则化

 1)分割的信息增益可能会是负的,需要在模型的简洁性和准确性之间取舍

2)Pre-stopping :当最优分割的gain为负时,停止分割; But maybe a split can benefit future splits.. 

3)后剪枝Post-Prunning :使树生长到最大深度,再把有 negative gain 的所有叶子递归剪除。

3.10   Boosted Tree Algorithm 

1)每次迭代都增加一棵新的树

2)在每次迭代开始之前,计算g 和h

3)使用统计数据来贪心生长树\large f_{t}\left ( x \right )

4)把树\large f_{t}\left ( x \right ) 加入到模型中,即  \large \hat{y_{i}} ^{\left (t \right )}=\hat{y_{i}} ^{\left ( t-1 \right )}+ f_{t}\left ( x_{i} \right )

通常我们是用   \large y^{\left ( t \right )}=y^{\left ( t-1 \right )} +\epsilon f_{t}\left ( x_{i} \right ), 其中 \large \epsilon称为步长或衰减率,其值通常设为01.左右。

4 小结

1.模型、目标函数和参数的单独讨论可以有助于理解和灵活运用学习模型

2. 偏差-方差 trade-off 在学习函数空间时也可以用。\large Obj\left ( \Theta \right )=L\left ( \Theta \right )+\Omega \left ( \Theta \right )

3. 习题考察:

1 ) 如何构造一个提升树分类器来解决加权回归问题,比如每个实例有一个衡量重要性的权值?

2)回到时间序列问题,如果要学习一个关于时间的阶跃函数,除了自顶而下分割方法(top down split approach)有其他的方法来学习时间分割吗?

知识速查;

第1题

第二题

参考资料

1.【陈天奇的slides】https://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf

2.【XGBoost: A Scalable Tree Boosting Systemhttps://arxiv.org/abs/1603.02754

3.【理解GB,GBDT,xgboost 】https://www.cnblogs.com/wxquare/p/5541414.html

4. 【详解Boosting系列算法二GBM- CSDN博客

5.【XGBoost Documentation — xgboost 0.83.dev0 documentation

猜你喜欢

转载自blog.csdn.net/qq_29831163/article/details/88930389