xgboost算法_XGBoost的原理、推导、代码和应用

fe7aacc945236a01bd57c6d4daf6a207.png

XGBoost(eXtreme Gradient Boosting)极致梯度提升,是一种基于GBDT的算法或者说工程实现。

XGBoost的基本思想和GBDT相同,但是做了一些优化,比如二阶导数使损失函数更精准;正则项避免树过拟合;Block存储可以并行计算等。

XGBoost具有高效灵活轻便的特点,在数据挖掘、推荐系统等领域得到广泛的应用。

本文先回顾GBDT、泰勒公式、正则、一元二次函数等XGBoost的基础知识;接着介绍XGBoost原理、目标函数求导、目标函数解和学习训练;然后指出XGBoost在特征处理、电商预估上的应用;最后对XGBoost模型进行总结,指出XGBoost模型的优缺点,并与GBDT进行对比,及XGBoost的演化。主要目录结构如下:

一、XGBoost基础
1、GBDT
2、函数的近似计算
3、泰勒公式
4、正则
5、一元二次函数 二、XGBoost原理
1、XGBoost原理
2、XGBoost目标函数推导
3、XGBoost目标函数解
4、XGBoost树训练 三、XGBoost应用
1、XGBoost库
2、XGBoost挖掘特征
3、XGBoost电商预估 四、XGBoost总结
1、XGBoost的优缺点
2、XGBoost VS GBDT
3、XGBoost的演化

直接上PPT。

da9703e5cea3c3ad8e960b82b1e67e41.png
XGBoost的原理、推导、代码和应用

一、XGBoost基础

59a06973ef6adad579e01cf83f55b38e.png
XGBoost基础的目录

1、GBDT

梯度提升决策树(Gradient Boosting Decision Tree,GBDT)是一种基于boosting集成思想的加法模型,训练时采用前向分布算法进行贪婪的学习,每次迭代都学习一棵CART树来拟合之前 t-1 棵树的预测结果与训练样本真实值的残差。

c5f84b7110f56ec677b4a7d58cce5c97.png
GBDT

梯度提升决策树算法(GBDT)如下:

655adf135bc277d5e9796cd6ecc58f4a.png
梯度提升决策树算法(GBDT)

2、函数的近似计算

什么是函数的近似计算?

e4ca1c5e0c0f941cd6888dde8e025430.png
函数的近似计算

3、泰勒公式

什么是泰勒公式?

f0d9dc351621f37fd7f445fd3d1a11df.png
泰勒公式

4、正则

什么是L1、L2正则?

a9982e134f2840a0ca5186b08776fcb1.png
正则

5、一元二次函数

什么是一元二次函数的最优解?

0e1f135680a29b7ce25584c6badcd56c.png
一元二次函数

二、XGBoost原理

7d89e882f5d8b02900913334a4a0646f.png
XGBoost原理

1、XGBoost原理

XGBoost(eXtreme Gradient Boosting)极致梯度提升,是基于GBDT的一种算法。

2016年,陈天奇在论文《 XGBoost:A Scalable Tree Boosting System》中正式提出。

这是源头,这是根,强烈推荐、推荐、推荐。

XGBoost:A Scalable Tree Boosting System​arxiv.org

135be55c3a854466e70bf3339abef60d.png
XGBoost提出

XGBoost的基本思想和GBDT相同,但XGBoost进行许多优化。

11ee6c05cb1326ce8b6cd772c0d19873.png
XGBoost进行许多优化

2、XGBoost目标函数推导

XGBoost的目标函数由损失函数和正则化项两部分组成。

a6887a59b3aa4c8f923cb0ba01100ab6.png
XGBoost的目标函数

用GBDT梯度提升树表达方式XGBoost。

d6fb6c0316b4903faec1fa0410ba0b3c.png
XGBoost的目标函数的GBDT表达

接下来,三个步骤优化XGBoost目标函数。

第一步:二阶泰勒展开,去除常数项,优化损失函数项;
第二步:正则化项展开,去除常数项,优化正则化项;
第三步:合并一次项系数、二次项系数,得到最终目标函数。

37a32c75661136624bab294e27363549.png
第一步:二阶泰勒展开,去除常数项

关键是二阶泰勒展开。

937259fc2427d80e47ab356b88729efe.png
目标函数的二阶泰勒展开

e0c7292c8a4cfb3df9ba88305436adb8.png
第二步:正则化项展开,去除常数项

关键是前向计算,t-1棵数的结构已经确定。

a3af1f4b928f8986d7d72e0a2a0cf3fa.png
简化正则化项

425e1e1e21378c0353862df49126c5da.png
第三步:合并一次项系数、二次项系数

建议这部分参考陈天奇大神的PPT《 Introduction to Boosted Trees》,讲的够细、够细、够细。

Introduction to Boosted Trees​homes.cs.washington.edu

先重新定义一棵树。

e6a4302bdadcf59a8112e79aac930d20.png
先重新定义一棵树

然后定义树的复杂度。

046477ed777c775c1c0f1bcc5f145edc.png
然后定义树的复杂度

接着带入目标函数,对结点进行分组。

3ca094ca6a86c529f68bfa06a8dbf695.png
接着带入目标函数,对结点进行分组

最后,合并一次项系数、二次项系数。

585ae8fe63ea932b738898bffda3bf13.png
最后,合并一次项系数、二次项系数

3、XGBoost目标函数解

构建形如一元二次方程形式,求最优值。

ca6465942cd6639f3299c62462acbabb.png
构建形如一元二次方程,求最优值

目标值Obj最小,则树结构最好,此时即是目标函数的最优解。

fd44dab9dbf25e7da3abb8b301ca303a.png
目标函数的最优解

4、XGBoost树训练

在实际训练XGBoost树中,最佳分裂点是一个关键问题。

4e80904d4a7789e6a22dd19783359198.png
XGBoost树训练

三、XGBoost应用

63a3d0420d89b3bc425fe17ed27f4fa6.png
XGBoost应用的目录

1、XGBoost库

XGBoost库是XGBoost算法的一种实现。

XGBoost是一个优化的分布式梯度提升库,被设计为高效灵活轻便

GitHub:https://github.com/tqchen/xgboost

0a4ac19fc35b7f989e55fc6c07696d92.png
XGBoost库

优化XGBoost系统设计如下:

5b1b6d8cc736e1a67eff7614b7c7f8f8.png
优化XGBoost系统设计

2、XGBoost挖掘特征

XGBoost一个很重要应用就是进行数据特征挖掘分析。本例子是挖掘哪些特征是糖尿病重要特征。

2182de14ecf7efc247838cc959dca903.png
XGBoost挖掘特征

数据集:diabetes.csv

中文:皮马印第安人糖尿病数据集
英文:Pima Indians Diabetes Database

可以从Github上下载:diabetes.csv

diabetes.csv​github.com

代码如下:

import pandas as pd
from sklearn import metrics
from sklearn.model_selection import train_test_split
import xgboost as xgb
import matplotlib.pyplot as plt

# 导入数据集
df = pd.read_csv("./data/diabetes.csv")
data=df.iloc[:,:8]
target=df.iloc[:,-1]
 
# 切分训练集和测试集
train_x, test_x, train_y, test_y = train_test_split(data,target,test_size=0.2,random_state=7)

# xgboost模型初始化设置
dtrain=xgb.DMatrix(train_x,label=train_y)
dtest=xgb.DMatrix(test_x)
watchlist = [(dtrain,'train')]

# booster:
params={'booster':'gbtree',
        'objective': 'binary:logistic',
        'eval_metric': 'auc',
        'max_depth':5,
        'lambda':10,
        'subsample':0.75,
        'colsample_bytree':0.75,
        'min_child_weight':2,
        'eta': 0.025,
        'seed':0,
        'nthread':8,
        'gamma':0.15,
        'learning_rate' : 0.01}

# 建模与预测:50棵树
bst=xgb.train(params,dtrain,num_boost_round=50,evals=watchlist)
ypred=bst.predict(dtest)
 
# 设置阈值、评价指标
y_pred = (ypred >= 0.5)*1
print ('Precesion: %.4f' %metrics.precision_score(test_y,y_pred))
print ('Recall: %.4f' % metrics.recall_score(test_y,y_pred))
print ('F1-score: %.4f' %metrics.f1_score(test_y,y_pred))
print ('Accuracy: %.4f' % metrics.accuracy_score(test_y,y_pred))
print ('AUC: %.4f' % metrics.roc_auc_score(test_y,ypred))

ypred = bst.predict(dtest)
print("测试集每个样本的得分n",ypred)
ypred_leaf = bst.predict(dtest, pred_leaf=True)
print("测试集每棵树所属的节点数n",ypred_leaf)
ypred_contribs = bst.predict(dtest, pred_contribs=True)
print("特征的重要性n",ypred_contribs )

xgb.plot_importance(bst,height=0.8,title='影响糖尿病的重要特征', ylabel='特征')
plt.rc('font', family='Arial Unicode MS', size=14)
plt.show()

运行结果:

Precesion: 0.8158
Recall: 0.5439
F1-score: 0.6526
Accuracy: 0.7857
AUC: 0.8699

448c09d546414a408d0a230352658f2d.png
影响糖尿病的重要特征

结果如上所示:

模型的AUC为0.8699,其中,Glucose(血糖)、BMI(体质指数)、DiabetesPedigreeFunction(糖尿病系统)三个指标对模型影响较大。

3、XGBoost电商预估

117598a8306337c25b7b243a51d25d30.png
XGBoost电商预估

2019泰达杯跨境电商智能算法大赛

安泰杯 -- 跨境电商智能算法大赛-天池大赛-阿里云天池​tianchi.aliyun.com
4643090da76f0c9b244932b97b9f8bd0.png

冠军的Github

RainFung/Tianchi-AntaiCup-International-E-commerce-Artificial-Intelligence-Challenge​github.com
54ffe45f39f4db73a268008c4fd3cbd9.png

四、XGBoost总结

d76ed8143c4aeaf75130998802acd2eb.png
XGBoost总结的目录

1、XGBoost的优缺点

27a8122c03c4d94fdc52221339edcd2a.png
XGBoost的优缺点

2、XGBoost VS GBDT

b134685474c63745c13b6f087b3d238e.png
XGBoost VS GBDT

抓住:XGBoost是极致GBDT就OK。

e94215f561ada59cb726a410177bba95.png
XGBoost是极致GBDT

3、XGBoost的演化

0c199348fac1adc06dacdd82c7209a4a.png
XGBoost的演化

XGBoost总结:

What:什么是XGBoost?

How:怎么实现XGBoost?

Why:为什么需要XGBoost?

Where:在什么地方使用XGBoost?

daf2178949cee32add2fd6cf4c332f38.png
基于3W+ 1H原则对XGBoost进行总结
由于当前自己的能力和水平的限制,我的可能是错的,或者是片面,这里抛砖引玉,期待与您一起交流探讨。

参考文献:

1、同济大学数学系,高等数学(第六版)[M],高等教育出版社,2007.04
2、Tianqi Chen,Introduction to Boosted Trees(PPT),2014.10.
3、Tianqi Chen and Carlos Guestrin. XGBoost: A Scalable Tree Boosting System. In 22nd SIGKDD Conference on Knowledge Discovery and Data Mining, 2016
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值