说到XGBoost,不得不说GBDT,GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法。近些年更因为被用于搜索排序的机器学习模型而引起大家关注。
GBDT是基于决策树,想学习关于决策树的内容可以看这篇文章https://blog.csdn.net/blank_tj/article/details/82081002
决策树分为两大类,回归树和分类树。前者用于预测实数值,如明天的温度、用户的年龄、网页的相关程度;后者用于分类标签值,如晴天/阴天/雾/雨、用户性别、网页是否是垃圾页面。这里要强调的是,前者的结果加减是有意义的,如10岁+5岁-3岁=12岁,后者则无意义,如男+男+女=到底是男是女? GBDT的核心在于累加所有树的结果作为最终结果,就像前面对年龄的累加(-3是加负3),而分类树的结果显然是没办法累加的,所以GBDT中的树都是回归树,不是分类树,这点对理解GBDT相当重要(尽管GBDT调整后也可用于分类但不代表GBDT的树是分类树)。
回归树总体流程是在每个节点(不一定是叶子节点)都会得一个预测值,以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分枝时穷举每一个feature的每个阈值找最好的分割点,但衡量最好的标准不再是最大熵,而是最小化均方差:即(每个人的年龄-预测年龄)^2 的总和 / N,或者说是每个人的预测误差平方和 除以 N。这很好理解,被预测出错的人数越多,错的越离谱,均方差就越大,通过最小化均方差能够找到最靠谱的分枝依据。
加法模型
XGBoost算法可以看成是由K棵树组成的加法模型:
y^i=∑Kk=1fk(xi),fk∈F(1) y ^ i = ∑ k = 1 K f k ( x i ) , f k ∈ F ( 1 )
其中 F F 为所有树组成的函数空间,以回归任务为例,回归树可以看作为一个把特征向量映射为某个score的函数。该模型的参数为: 。于一般的机器学习算法不同的是,加法模型不是学习d维空间中的权重,而是直接学习函数(决策树)集合。上述加法模型的目标函数定义为:
Obj=∑ni=1 l(yi,y^i)+∑Kk=1Ω(fk) O b j = ∑ i = 1 n l ( y i , y ^ i ) + ∑ k = 1 K Ω ( f k )
其中 Ω Ω 表示决策树的复杂度,那么该如何定义树的复杂度呢?比如,可以考虑树的节点数量、树的深度或者叶子节点所对应的分数的 L2 L 2 范数等等。
如何来学习加法模型呢?
解这一优化问题,可以用前向分布算法(forward stagewise algorithm)。因为学习的是加法模型,如果能够从前往后,每一步只学习一个基函数及其系数(结构),逐步逼近优化目标函数,那么就可以简化复杂度。这一学习过程称之为Boosting。具体地,我们从一个常量预测开始,每次学习一个新的函数,过程如下:
y^0i=0y^1i=f1(xi)=y^0i=f1(xi)y^2i=f1(xi)+f2(xi)=y^1i+f2(xi)...y^ti=∑tk=1fk(xi)=y^t−1i+ft(xi) y ^ i 0 = 0 y ^ i 1 = f 1 ( x i ) = y ^ i 0 = f 1 ( x i ) y ^ i 2 = f 1 ( x i ) + f 2 ( x i ) = y ^ i 1 + f 2 ( x i ) . . . y ^ i t = ∑ k = 1 t f k ( x i ) = y ^ i t − 1 + f t ( x i )
那么,在每一步如何决定哪一个函数 f f 被加入呢?指导原则还是最小化目标函数。
在第
步,模型对 xi x i 的预测为: y^ti=y^t−1i+ft(xi) y ^ i t = y ^ i t − 1 + f t ( x i ) ,其中 ft(xi) f t ( x i ) 为这一轮我们要学习的函数(决策树)。这个时候目标函数可以写为:
Obj(t)=∑nt=1 l(yi,y^ti)+∑ti=iΩ(f