目录

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.  符号说明:

xgboost :提升树 表示第i个训练样本; 模型要根据已知的xgboost :提升树得出对应的预测值xgboost :提升树 ,(关键在于如何预测)。包括线性回归和logistic回归在内的线性模型形如xgboost :提升树 。而根据任务的不同,预测的得分xgboost :提升树可以有不同的解释:在线性回归中,xgboost :提升树表示预测值;在Logistic 回归中 ,xgboost :提升树 表示实例属于正例的预测概率;在ranking 中,xgboost :提升树 可以表示rank score 。

2. 参数和目标函数

是我们需要从数据中学习的 things ;在线性模型中的参数为xgboost :提升树.。;目标函数可以表示为训练损失和正则化两部分的和。

xgboost :提升树

3. 训练数据上的损失: xgboost :提升树 

 平方损失Square loss为xgboost :提升树 

Logistic loss 为xgboost :提升树

4.正则化

 与模型的复杂度有关,常用的有L2范数 norm(xgboost :提升树) 和 L1范数(  xgboost :提升树  );

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

Ridge regression :xgboost :提升树

Lasso :   xgboost :提升树

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

xgboost :提升树

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

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

 

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

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

2.1  集成方法的优势

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

2.2 xgboost的模型与参数

xgboost :提升树

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

(1)每棵树的结构与每个叶子的 score (2)或者简单地使用函数表示为xgboost :提升树其中xgboost :提升树表示第k棵树,集成模型需要学习的就是这K个树的结构与每个叶子得分。

2.3   xgboost的目标函数

1. Tree Ensemble 的目标函数

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

xgboost :提升树

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

2 启发式策略

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

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

xgboost :提升树

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

目前已知的是:使用平方损失xgboost :提升树 则模型变为普通的gradient boosted machine ;

使用Logistic损失xgboost :提升树则模型变为  LogitBoost 。

 

3 梯度提升 (How do we Learn) 

对于目标函数    xgboost :提升树; 不能使用SGD等方法来找出最优f,因为它们是树而不是数值向量。

解决方法是采用加法训练Additive Training (Boosting) ,从constant prediction开始,每次增加一棵树,在第t次增加的第t棵树为xgboost :提升树,除此之外要保留上一轮中加入的函数(树)。

xgboost :提升树

分步骤优化目标函数,优化顺序从第1棵直到第K棵,每次优化完一棵再优化下一棵,整个过程可表示为:在现有的t-1棵树的基础上,增加一棵使目标函数值最优的树 xgboost :提升树作为最优的CART树。

 3.1 Additive Training 

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

选择使目标函数值最优的树 xgboost :提升树作为最优的CART树。第t轮的预测为

xgboost :提升树

xgboost :提升树

xgboost :提升树

3.2  loss的泰勒展式近似

xgboost :提升树

xgboost :提升树

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

xgboost :提升树

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

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

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

 (1)xgboost :提升树都来自损失函数的定义;

(2)函数的学习通过xgboost :提升树 仅取决于目标函数

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

3.4 改进树的定义

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

xgboost :提升树表示树的叶子权重,q 表示树的结构。

xgboost :提升树

3.5  定义一棵树的复杂度

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

xgboost :提升树

3.6  再次讨论目标函数

(1)定义叶子j上的实例集为 xgboost :提升树 也就是对每个叶子上的样本进行计数。

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

xgboost :提升树

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

3.7 The Structure Score 

(1)对于二次函数xgboost :提升树 ,其极值点为xgboost :提升树;对应的函数值为xgboost :提升树;

对于单变量二次函数即有

xgboost :提升树

(2)定义xgboost :提升树 和xgboost :提升树

xgboost :提升树 ,即叶子j中的每个实例的 xgboost :提升树 之和,其中xgboost :提升树 表示损失xgboost :提升树 对上一轮的预测xgboost :提升树的一阶导gradient;

xgboost :提升树,即叶子j中的每个实例的 xgboost :提升树 之和,其中xgboost :提升树 表示损失xgboost :提升树 对上一轮的预测xgboost :提升树的二阶导hessian;

则第t轮的目标函数变为

xgboost :提升树

(3)求解最优权重 xgboost :提升树 和最优目标函数值

假设树的结构xgboost :提升树是固定的,则每个叶子的最优权重 xgboost :提升树 和相应的目标函数值可表示为

xgboost :提升树

(4)The Structure Score Calculation 

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

xgboost :提升树

3.8  树的贪心学习

(1)单棵树的搜索算法

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

xgboost :提升树 xgboost :提升树

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

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

xgboost :提升树

(3)Efficient Finding of the Best Split 

分割规则 xgboost :提升树 的信息增益是什么?如果xgboost :提升树表示年龄,那么我们所需的就是以下分割线两边的g 和h的和,

xgboost :提升树

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

xgboost :提升树

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

(4)寻找分割点的算法

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

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

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

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

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

1)   xgboost :提升树,对每一层,需要xgboost :提升树来排序,有d个特征,并且需要为K个层做排序

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

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

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

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

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

xgboost :提升树

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

3.9 剪枝与正则化

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

xgboost :提升树

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

xgboost :提升树

3)使用统计数据来贪心生长树xgboost :提升树

xgboost :提升树

4)把树xgboost :提升树 加入到模型中,即  xgboost :提升树

通常我们是用   xgboost :提升树, 其中 xgboost :提升树称为步长或衰减率,其值通常设为01.左右。

 

4 小结

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

2. 偏差-方差 trade-off 在学习函数空间时也可以用。xgboost :提升树

3. 习题考察:

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

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

知识速查;

第1题

xgboost :提升树

第二题

xgboost :提升树

 

参考资料

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

 

相关文章: