python一元三次方程拟合_XGBoost的原理、公式推导、Python实现和应用

本文详细介绍了XGBoost的基本思想、优化策略和应用场景。从GBDT出发,探讨了XGBoost的泰勒展开、正则化和目标函数优化,展示了其在特征选择和电商预估中的应用,并总结了XGBoost的优缺点和与GBDT的区别。
摘要由CSDN通过智能技术生成

ac7dae7205b96f51ffe016de71043f6d.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。

85177bcd4800b10b9d8cef0b334d2d6b.png
XGBoost的原理、公式推导、Python实现和应用

一、XGBoost基础

88dcaf3627ca538fdbc4f0994374c62f.png
XGBoost基础的目录

1、GBDT

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

27b57e7a2f8a7768929f0c33d28a1e3b.png
GBDT

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

第一步:初始化弱学习器

9cb62b56ed5fa46dff7ee3148fe93b1c.png
GBDT初始化弱学习器

第二步:迭代训练

3f6522d0b374355f4ca3e7e190789044.png
GBDT迭代训练

更多GBDT可参考:

刘启林:GBDT的原理、推导和应用​zhuanlan.zhihu.com
9a66fa3df09a83b9db377eefb3865e09.png

2、函数的近似计算

什么是函数的近似计算?

1f6424f0a86c49b779760009263e4df3.png
函数的近似计算

3、泰勒公式

什么是泰勒公式?

9c583e7b5c7857368ab1d1cf356fae3f.png
泰勒公式

4、正则

什么是L1、L2正则?

0cb861fd2d31616da54bed837a656342.png
正则

5、一元二次函数

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

aca62de477f475e75e6a5db96c880b6a.png
一元二次函数

二、XGBoost原理

13f789e919463306484180fba2cd182d.png
XGBoost原理

1、XGBoost原理

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

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

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

XGBoost:A Scalable Tree Boosting System​arxiv.org

6bb02bd7a16ca59c26836c002ac974e8.png
XGBoost提出

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

04ddf4d836e72e10450ddf243a470a0f.png
XGBoost进行许多优化

2、XGBoost目标函数推导

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

5c804468d73f5658c89445b072e89f1e.png
XGBoost的目标函数

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

0e639d5c61a8d6c32a66f01a2d739922.png
用GBDT梯度提升树表达方式XGBoost

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

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

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

关键是二阶泰勒展开。

65019147ed348887837db8394a61daa1.png
目标函数的二阶泰勒展开

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

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

fc23255dd15ffbe7f57eb128eaa967e2.png
简化正则化项

7d625ea9754655d5b1a9d5b8e4d63c0c.png
第三步:合并一次项系数、二次项系数

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

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

先重新定义一棵树。

8850915538e9c1a80c2db205c3934b95.png
先重新定义一棵树

然后定义树的复杂度。

a2a0a42e2297549bdae3b800c62887e5.png
然后定义树的复杂度

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

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

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

68bfe357347475c5dcfa9faa2a2c9265.png
最后,合并一次项系数、二次项系数

3、XGBoost目标函数解

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

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

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

1aebbc36e33b023f1519c3fa2d82dead.png
目标函数的最优解

4、XGBoost树训练

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

a397456fa39c9241496fe4227d5f810e.png
XGBoost树训练

三、XGBoost应用

4c7fefec2210dd4bdd2219b689c3e757.png
XGBoost应用的目录

1、XGBoost库

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

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

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

1b8ee157075946ccfda715c16fa7d8fc.png
XGBoost库

优化XGBoost系统设计如下:

d92cc2523cd84fd6947b618848a78dca.png
优化XGBoost系统设计

2、XGBoost挖掘特征

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

009ebf60fac32094a4ccdeff90d225b3.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

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

结果如上所示:

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

3、XGBoost电商预估

438a82f1b0d6d9d2f94ac90bcd521721.png
XGBoost电商预估

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

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

冠军的Github

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

四、XGBoost总结

400cc813c58ae73eab4af769c3259cd7.png
XGBoost总结的目录

1、XGBoost的优缺点

b5a6414b9f302dcf64a8c7b70cb7b987.png
XGBoost的优缺点

2、XGBoost VS GBDT

c9c2139e784ff5c13c8b6d4a581a14a5.png
XGBoost VS GBDT

抓住:XGBoost是极致GBDT就OK。

12782380d36454b4780886aa838b15db.png
XGBoost是极致GBDT

3、XGBoost的演化

ea0e0c5baf1a3d70765127faf32a04f9.png
XGBoost的演化

XGBoost总结:

What:什么是XGBoost?

How:怎么实现XGBoost?

Why:为什么需要XGBoost?

abfbcf69079f3849092eed6edb11389f.png
基于2W+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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值