一文掌握XGBoost核心原理

XGBoost是经典的提升树学习框架,其配套论文和PPT分享也相当经典,本文简单梳理其思路,原文见XGBoost原理简介

整体思路

和一般提升模型一样,提升树模型也遵循相同的范式

  • 采用加法模型「forward stage-wise manner」
  • 每轮引入一weak learner「此处是一棵CART树」
  • 学习之前weak learners的不足「用梯度表征」

同时要考虑过拟合等问题「overfitting is everywhere」。

Tree Ensemble

遵循李航老师统计学习三要素公式

方法=模型+策略+算法

假设空间「模型」

Tree Ensemble基本思想是将多棵树的结果融合作为最终输出,示意图如下

paper-xgboost-tree-ensemble

不难看出,模型的假设空间是一系列CART树的集成,输出为

\hat y_i = \sum_{k=1}^{K} f_k(x_i), \quad f_k \in F

其模型参数为K颗树

\circleddash = \{f_1, f_2, \dots, f_K\}

目标函数「策略」

模型假设有了,另一个核心元素就是目标函数,和一般监督模型一样

Obj(\circleddash)=L(\circleddash)+\Omega(\circleddash)

目标函数分两部分「Bias-variance tradeoff is everywhere

  • Training Loss measures how well model fit on training data
  • Regularization measures complexity of model

具体到Tree Ensemble,其目标函数为

Obj = \sum_{i=1}^{n} l(y_i, \hat y_i) + \sum_{k=1}^{K}\Omega(f_k)

优化求解「算法」

模型参数的最终求解。参数\circleddash = \{f_1, f_2, \dots, f_K\}K颗树,无法用SGD类似方法优化求解,因为不是R^d空间上的数值向量。一般采用Additive Training(Boosting)的思想求解。

Gradient Boosting

Tree Ensemble章节回答了what we are learning的问题,Gradient Boosting章节要回答how do we learn的问题。

Additive Traing范式

采用Additive Training(Boosting)的模式,即每一轮学习一颗新树f_t

paper-xgboost-boosting
学习一颗新树

问题是每一轮\hat y_i^{(t)} = \hat y_i^{(t-1)} + f_t(x_i)中,f_t如何学习?

Define objective(loss, regularization) and optimize it.

在第t轮,树的每一次生长,确定选那个特征分裂/分裂点取在哪里即可。其依据是使Objective最小,这里涉及两点,即w\in R^T取何值Objective最小,以及Objective最小值表达式是什么。

定义Objective及其近似

Objective是w的一般函数,其最小值一般表达式并不完全确定「not general」。XGBoost对其进行二阶泰勒展开近似,推导变换后Objective可形式化为T个独立的二项式,表达式可统一「只需Objective一阶二阶可导即可」。

以下简单梳理推导核心步骤。

paper-xgboost-taylor-expansion

其中每次迭代f_t(x)视为\Delta x泰勒近似展开,用一阶二阶导表示。对应到Square Loss后理解会更直观一些,一阶导正比于残差,二阶导为常数。

经过简化,现在Objective为

Obj^{(t)} = \sum_{i=1}^{n}[g_if_t(x_i) + \frac{1}{2}h_if^2_t(x_i)] + \Omega(f_t)

此时学习只依赖loss function一阶二阶导,理论理解和工程实现都简洁不少。

The learning of function only depend on the objective via g_i and h_i.

确定Objective最小值

为方便推导,需要一些符号表示上的辅助

  • 变换树的表达方式,见下文「如何表征一棵树」章节
  • I_j表示落在第j个叶子节点所有样本集合
  • 详细符号含义见下文「符号约定」章节
  • 正则项」考虑叶子节点数以及叶子分的L2范数,见下图
paper-xgboost-regularization

不难推导如下式子

\begin{align} Obj^{(t)} &\approx \sum_{i=1}^{n} [g_if_t(x_i) + \frac{1}{2}h_if_t^2(x_i)] + \Omega(f_t) \\ &= \sum_{i=1}^{n} [g_iw_{q(x_i)} + \frac{1}{2}h_iw_{w_{q(x_i)}}^2] + \gamma T + \lambda\frac{1}{2}\sum_{j=1}^{T}w_j^2 \\ &= \sum_{j=1}^{T} [(\sum_{i\in I_j}g_j)w_j + \frac{1}{2}(\sum_{i\in I_j}h_j)w_j^2 + \lambda] + \gamma T \\ &= \sum_{j=1}^{T} [G_jw_j + \frac{1}{2}(H_j + \lambda)w_j^2] + \gamma T \end{align}

对上述四个式子几点解释

  • 式子1是经过泰勒展开近似的目标函数
  • 式子2考虑树新表达方式,公式加入正则项
  • 式子3将n个样本,按划分的叶子节点重新group,整合train loss和regularization
  • 式子4引入G_jH_j简化表达
  • 式子4是T个独立的二项式

对二项式y = ax^2 + bx + c,在x=-\frac{b}{2a}取极值y=\frac{4ac-b^2}{4a}。不难得出w^*取值为

w_j^* = -\frac{G_j}{H_j + \lambda}

时,Obj有以下最小值

Obj = -\frac{1}{2}\sum_{j=1}^{T} \frac{G_j^2}{H_j + \lambda} + \gamma T

最小值中包含两项,第一项表示树拟合好坏,第二项表示树的复杂度。如此,即可根据gain选择分裂特征和分裂点了。

Gain = \frac{1}{2}\big[\frac{G_L^2}{H_L+\lambda} + \frac{G_R^2}{H_R+\lambda} - \frac{(G_L+G_R)^2}{H_L + H_R + \lambda}\big] - \gamma

一点验证

当模型为GBDT,Loss选为Square Loss,不加正则项,其结论应该跟上述推导完全一致。Square Loss

l(y_i, \hat y_i^{(t-1)}) = \frac{1}{2}(y_i - \hat y_i^{(t-1)})^2

求一阶导

g_i = -(y_i - \hat y_i^{(t-1)})

即其一阶导是负残差。求二阶导,其值为常数

h_i = 1

Square Loss情况下,取I_j集合的均值「残差均值」作为该节点预测值「optimal weight」,应该跟w^*保持一致。

w_j^* = -\frac{G_j}{H_j + \lambda}

不难看出

  • \lambda=0 此处无正则
  • H_j = \vert I_j\vertI_j样本个数
  • G_j 残差之和

综上,其optimal weight即为残差均值,其实是XGBoost里w_j^*的特例。

如何表征一棵树

决策树可看做一系列If-Then规则的集合,但这样表示起来比较麻烦。为了方便公式的推导,XGBoost将其表示为一向量。

Think regression tree as a function that maps the attributes to the score. We define tree by a vector of scores in leafs, and a leaf index mapping function that maps an instance to a leaf.

即用长度为T「叶子节点数」的向量w和将样本实例映射到叶子索引的映射函数q(x)表示。

paper-xgboost-tree

这样树的预测输出可直接用w表示,跟正则项\vert w\vert ^2保持一致,公式表示推导上比较方便。

如何防止过拟合

XGBoost中有很多防止过拟合手段,比如

正则化

每一轮树的目标函数Objective中可以包含正则项,是防止过拟合经典手段

\Omega(f) = \gamma T + \frac{1}{2}\lambda||w||^2

Shrinkage

每一轮树都不完全拟合残差或梯度,给后续学习器学习的空间

y^{(t)} = y^{(t-1)} + \epsilon f_t(x_i)

\epsilon is called step-size or shrinkage, usually set around 0.1. This means we do not do full optimization in each step and reserve chance for future rounds, it helps prevent overfitting

Column Subsampling

随机森林里使用的经典方法,也叫做feature subsampling,每次只用一部分特征学习,也可防止过拟合。

Candidate Proposal

在选择连续特征分裂点时,不遍历所有可能值「exact greedy algorithm」,而是由数据分位点生成一系列候选「candidate proposal」,从中选择分裂点。这样不仅降低了计算量,同时还有一定防止过拟合效果。

特征重要性

树模型一个优点就是可以确定特征重要性,具体如何做呢?XGBoost里提供这几个衡量标准

  • 该特征作为分裂特征在所有树中出现的次数
  • 该特征作为分裂特征的增益「avg&total」
  • 该特征作为分裂特征的对样本的覆盖「avg&total」

详细可参考文档Python API Reference

当然还有更一般化确定特征重要性的方法,比如Permutation Test,林轩田老师在机器学习技法中随机森林章节中有介绍。其基本思想是某一维特征做permutation,依据模型performance的下降程度判定特征重要性。

符号约定

  • (x_i, y_i) 表示样本输入
  • \hat y_i 表示模型在x_i上的输出
  • f_t(x) 表示第t论学习的树
  • l(y_i, \hat y_i) 表示Training Loss
  • \Omega(f_t) 表示树f_t的复杂度,正则项
  • q(x_i) 表示x_i对应的叶子节点索引
  • w 表示树叶子节点对应的得分向量
  • T 表示树叶子节点数
  • I_j=\{i\vert q(x_i)=j\} 表示落到jth节点上样本集
  • G_j 表示I_j集合一阶导之和
  • H_j 表示I_j集合二阶导之和

Ref

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容