xgboost官方文档解析

撰写文档动机

网上有很多解析xgboost算法的文章, 对算法的解析有一些问题: 一是没有独立简介,成文这篇抄那篇; 二是逻辑混乱,一些算法大佬写文章出于记笔记的心态就没打算把算法讲清楚, 小白盲人摸象讲了很多细节,却没有整体视角; 三是深度的把控, 撰写社区文字不是撰写论文, 如何根据社区平均水平写出一篇带来价值的文章也很有讲究。 这里撰写一篇基于理解官网文档的前提下,自上而下逻辑梳理后的Xboost解析文章。

Abstract

Xgboost是基于gradient boosting tree,由Chen Tianqi 为主要作者的Distributed (Deep) Machine Learning Community (DMLC)开发。把握几个点可自上而下快速理解Xgboost,boosting算法的关键是迭代,每次tree迭代后提升了什么? 损失函数可以给出答案。设计损失函数决定每次迭代tree的的生成方法, xgboost每个节点split gain score公式(类比cart tree的GINI Index), 每次生成的tree会成为下次迭代的参数,优化下次迭代。
关键词: 节点分割,损失函数,迭代

损失函数

Xgboost的损失函数分为两部分,等式右边前半部分为非常用户友好的MSE, 后半部分为历次迭代tree的regulization term惩罚模型复杂度。
在这里插入图片描述
通过一系列推导后, 损失函数被优化为描述所有leaf节点score得分的函数,这里w是第t次迭代的变量,j为leaf 节点序号, T={t次迭代所有叶节点}, G j , H j {G}_{j},{H}_{j} GjHj在本次迭代中为常数。
在这里插入图片描述这样复杂的损失函数可以被理解为以 w j {w}_{j} wj为参数的二次函数。依此得出最优的 w j ∗ {w}^{*}_{j} wj o b j ∗ {obj}^{*} obj既是第t次迭代的损失函数也是描述tree结构好坏的标准。
在这里插入图片描述
所以在第t次迭代, 第j个leaf 节点判断是否继续分割节点时T变为T+1,为obj增加 γ \gamma γ, 所以收益Gain 大于0时,才会收益, o b j ∗ {obj}^{*} obj可以继续变小tree结构持续优化,反之停止split,进入下次迭代。
在这里插入图片描述

迭代

boosting 是集成算法(Ensemble_learning)中三大算法之一, 另两种为bagging, stacking 这里不一一赘述。 这里简单解析下为什么xgboost每次迭代会优化回归树的结构。
*强调文本* _强调文本_
这里从tree function f ( x ) f(x) f(x) 作为切入点:在这里插入图片描述
q是把每个d-dimension的实例点x assign到 {1,2,…T} leaf节点中某个节点的fuction。但为什么 q t {q}_{t} qt 会优于 q t − 1 {q}_{t-1} qt1。更高屋建瓴的观点还没总结出来, 微观的看是每次node split时的参数优化了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注明: y ^ i t − 1 = y ^ i t − 2 + f t − 1 ( x i ) {\hat{y}}^{t-1}_{i}={\hat{y}}^{t-2}_{i}+{f}_{t-1}({x}_{i}) y^it1=y^it2+ft1(xi)

Leaf Node Split Details

引用一下 Tianqi Chen 大神的paper XGBoost: A Scalable Tree Boosting System

在这里插入图片描述
大神的论文提出的算法的prototype,算法2 input X (n*m) 矩阵, 算1 to m个 连续feature 中根据算法1 得到最佳的分割点, 算1 to m 个特征的G,H进入下一步迭代。
Basic Exact Greedy Algorithm 会枚举所有可行split点 sort feature,然后计算。
Approximate Algorithm 根据percentile 建议一些candidate splitting points。
Weighted Quantile Sketch方法。在这里插入图片描述
Sparsity-aware Split Finding 适用于当X为稀疏矩阵, null values的情况,在这里插入图片描述

结语

回国之后会产生这样的认知, 学习网上的资料不如看官方文档,源代码,原论文, 在不同的论坛上进进出出获取的知识十分有限。 希望这篇文章能讲xgboost原理讲到入门得深度,自上而下得逻辑组织也便于大家理解。 如果大家没有看懂这篇文章,或认为此文没有讲透算法,欢迎大家查阅原始资料,这也是作者得初衷。 欢迎大家提出宝贵的改进意见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值