XGBoost是经典的提升树学习框架,其配套论文和PPT分享也相当经典,本文简单梳理其思路,原文见XGBoost原理简介。
整体思路
和一般提升模型一样,提升树模型也遵循相同的范式
- 采用加法模型「forward stage-wise manner」
- 每轮引入一weak learner「此处是一棵CART树」
- 学习之前weak learners的不足「用梯度表征」
同时要考虑过拟合等问题「overfitting is everywhere」。
Tree Ensemble
遵循李航老师统计学习三要素公式
方 法 = 模 型 + 策 略 + 算 法 方法=模型+策略+算法 方法=模型+策略+算法
假设空间「模型」
Tree Ensemble基本思想是将多棵树的结果融合作为最终输出,示意图如下
不难看出,模型的假设空间是一系列CART树的集成,输出为
y ^ i = ∑ k = 1 K f k ( x i ) , f k ∈ F \hat y_i = \sum_{k=1}^{K} f_k(x_i), \quad f_k \in F y^i=k=1∑Kfk(xi),fk∈F
其模型参数为 K K K颗树
⊝ = { f 1 , f 2 , … , f K } \circleddash = \{f_1, f_2, \dots, f_K\} ⊝={ f1,f2,…,fK}
目标函数「策略」
模型假设有了,另一个核心元素就是目标函数,和一般监督模型一样
O b j ( ⊝ ) = L ( ⊝ ) + Ω ( ⊝ ) Obj(\circleddash)=L(\circleddash)+\Omega(\circleddash) Obj(⊝)=L(⊝)+Ω(⊝)
目标函数分两部分「Bias-variance tradeoff is everywhere」
- Training Loss measures how well model fit on training data
- Regularization measures complexity of model
具体到Tree Ensemble,其目标函数为
O b j = ∑ i = 1 n l ( y i , y ^ i ) + ∑ k = 1 K Ω ( f k ) Obj = \sum_{i=1}^{n} l(y_i, \hat y_i) + \sum_{k=1}^{K}\Omega(f_k) Obj=i=1∑nl(yi,y^i)+k=1∑KΩ(fk)
优化求解「算法」
模型参数的最终求解。参数 ⊝ = { f 1 , f 2 , … , f K } \circleddash = \{f_1, f_2, \dots, f_K\} ⊝={ f1,f2,…,fK}为 K K K颗树,无法用SGD类似方法优化求解,因为不是 R d R^d Rd空间上的数值向量。一般采用Additive Training(Boosting)的思想求解。
Gradient Boosting
Tree Ensemble章节回答了what we are learning的问题,Gradient Boosting章节要回答how do we learn的问题。
Additive Traing范式
采用Additive Training(Boosting)的模式,即每一轮学习一颗新树 f t f_t ft
学习一颗新树
问题是每一轮 y ^ i ( t ) = y ^ i ( t − 1 ) + f t ( x i ) \hat y_i^{(t)} = \hat y_i^{(t-1)} + f_t(x_i) y^