史诗级干货长文集成学习进阶(xgboost&lightgbm)(代码片段)

ZSYL ZSYL     2022-12-13     564

关键词:

1. xgboost算法原理

XGBoost(Extreme Gradient Boosting)全名叫极端梯度提升树,XGBoost是集成学习⽅法的王牌,在Kaggle数据挖掘 ⽐赛中,⼤部分获胜者⽤了XGBoost。

XGBoost在绝⼤多数的回归和分类问题上表现的⼗分顶尖,本节将较详细的介绍XGBoost的算法原理。

1.1 最优模型的构建方法

我们在前⾯已经知道,构建最优模型的⼀般⽅法是最⼩化训练数据的损失函数。

我们⽤字⺟ L表示损失,如下式:

其中,F是假设空间
假设空间是在已知属性和属性可能取值的情况下,对所有可能满⾜⽬标的情况的⼀种毫⽆遗漏的假设集合。


应⽤:

  • 决策树的⽣成和剪枝分别对应了经验⻛险最⼩化和结构⻛险最⼩化,
  • XGBoost的决策树⽣成是结构⻛险最⼩化的结果,后续会详细介绍。

1.2 XGBoost的目标函数推导

1.2.1 目标函数确定

⽬标函数,即损失函数,通过最⼩化损失函数来构建最优模型。

由前⾯可知, 损失函数应加上表示模型复杂度的正则项,且XGBoost对应的模型包含了多个CART树,因此,模型的⽬ 标函数为:

(3.1)式是正则化的损失函数;
其中yi是模型的实际输出结果, 是模型的输出结果; yi
等式右边第⼀部分是模型的训练误差,第⼆部分是正则化项,这⾥的正则化项是K棵树的正则化项相加⽽来的。

1.2.2 CART树的介绍

1.2.3 树的复杂度定义

1.2.3.1 定义每课树的复杂度

1.2.3.2 树的复杂度举例



1.2.4 目标函数推导




1.3 XGBoost的回归树构建方法

1.3.1 计算分裂节点


那么⼀直这样分裂,什么时候才会停⽌呢?

1.3.2 停⽌分裂条件判断

1.4 XGBoost与GDBT的区别

2. xgboost算法api介绍

2.1 xgboost的安装

官⽹链接:https://xgboost.readthedocs.io/en/latest/

pip3 install xgboost

2.2 xgboost参数介绍

2.2.1 通⽤参数(general parameters)

2.2.2 Booster 参数(booster parameters)

2.2.2.1 Parameters for Tree Booster

2.2.3 学习目标参数(task parameters)

3. xgboost案例介绍

请参考泰坦尼克号乘客生存预测(XGBoost)

4. otto案例介绍 – Otto Group Product Classification Challenge【xgboost实现】

请参考otto案例介绍 – Otto Group Product Classification Challenge【xgboost实现】

5. lightGBM

5.1 写在介绍lightGBM之前

5.1.1 lightGBM演进过程

5.1.2 AdaBoost算法

5.1.3 GBDT算法以及优缺点


5.1.4 启发

5.2 什么是lightGBM

lightGBM是2017年1⽉,微软在GItHub上开源的⼀个新的梯度提升框架。

Github链接

在开源之后,就被别⼈冠以“速度惊⼈”、“⽀持分布式”、“代码清晰易懂”、“占用内存小”等属性。

LightGBM主打的高效并行训练让其性能超越现有其他boosting工具。在Higgs数据集上的试验表明,LightGBM比 XGBoost快将近10倍,内存占⽤率⼤约为XGBoost的1/6。

higgs数据集介绍:这是⼀个分类问题,⽤于区分产⽣希格斯玻⾊⼦的信号过程和不产⽣希格斯玻⾊⼦的信号过程。

数据连接

5.3 lightGBM原理

lightGBM 主要基于以下方面优化,提升整体特特性:

  • 1.基于Histogram(直⽅图)的决策树算法
  • 2.Lightgbm 的Histogram(直⽅图)做差加速
  • 3.带深度限制的Leaf-wise的叶⼦生长策略
  • 4.直接⽀持类别特征
  • 5.直接⽀持高效并行

具体解释见下,分节介绍。

5.3.1 基于Histogram(直⽅图)的决策树算法

直方图算法的基本思想是

  • 先把连续的浮点特征值离散化成k个整数,同时构造⼀个宽度为k的直方图。
  • 在遍历数据的时候,根据离散化后的值作为索引在直方图中累积统计量,当遍历⼀次数据后,直⽅图累积了需要的 统计量,然后根据直⽅图的离散值,遍历寻找最优的分割点。

Eg:
[0, 0.1) --> 0;
[0.1,0.3) --> 1;


使用直方图算法有很多优点。首先,最明显就是内存消耗的降低,直方图算法不仅不需要额外存储预排序的结果,而且可以只保存特征离散化后的值,而这个值⼀般⽤8位整型存储就足够了,内存消耗可以降低为原来的1/8。

然后在计算上的代价也大幅降低,预排序算法每遍历⼀个特征值就需要计算⼀次分裂的增益,⽽直⽅图算法只需要计算 k次(k可以认为是常数),时间复杂度从O(#data#feature)优化到O(k#features)。

5.3.2 Lightgbm 的Histogram(直⽅图)做差加速

5.3.3 带深度限制的Leaf-wise的叶子生长策略

Level-wise便利⼀次数据可以同时分裂同⼀层的叶子,容易进行多线程优化,也好控制模型复杂度,不容易过拟合。

  • 但实际上Level-wise是⼀种低效的算法,因为它不加区分的对待同⼀层的叶子,带来了很多没必要的开销,因为实际上很多叶子的分裂增益较低,没必要进行搜索和分裂。

    Leaf-wise则是⼀种更为高效的策略,每次从当前所有叶⼦中,找到分裂增益最大的⼀个叶子,然后分裂,如此循环。

  • 因此同Level-wise相⽐,在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度。

  • Leaf-wise的缺点是可能会⻓出⽐较深的决策树,产⽣过拟合。因此LightGBM在Leaf-wise之上增加了⼀个最⼤深度 的限制,在保证⾼效率的同时防⽌过拟合。

5.3.4 直接支持类别特征

Expo数据集介绍:数据包含1987年10⽉⾄2008年4⽉美国境内所有商业航班的航班到达和离开的详细信息。这是 ⼀个庞⼤的数据集:总共有近1.2亿条记录。主要⽤于预测航班是否准时。
数据链接

5.3.5 直接支持高效并行

LightGBM还具有支持高效并行的优点。LightGBM原生支持并行学习,目前支持特征并行和数据并行的两种。

  • 特征并行的主要思想是在不同机器在不同的特征集合上分别寻找最优的分割点,然后在机器间同步最优的分割点。
  • 数据并行则是让不同的机器先在本地构造直方图,然后进行全局的合并,最后在合并的直⽅图上⾯寻找最优分割点。

LightGBM针对这两种并行方法都做了优化:

  • 在特征并行算法中,通过在本地保存全部数据避免对数据切分结果的通信;

  • 在数据并中使⽤分散规约 (Reduce scatter) 把直⽅图合并的任务分摊到不同的机器,降低通信和计算,并利用直方图做差,进⼀步减少了⼀半的通信量。

  • 基于投票的数据并行(Voting Parallelization)则进⼀步优化数据并行中的通信代价,使通信代价变成常数级别。在数据量很大的时候,使⽤投票并行可以得到非常好的加速效果。

5.4 小结

6. lightGBM算法api介绍

6.1 lightGBM的安装

  • windows下:
pip3 install lightgbm

6.2 lightGBM参数介绍

6.2.1 Control Parameters

6.2.2 Core Parameters

6.2.3 IO parameter

6.3 调参建议


下表对应了 Faster Speed ,better accuracy ,over-fitting 三种目的时,可以调的参数

7. lightGBM案例介绍

接下来,通过鸢尾花数据集对lightGBM的基本使⽤,做⼀个介绍。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import mean_absolute_error
import lightgbm as lgb

加载数据,对数据进行基本处理

iris = load_iris()
data = iris.data
target = iris.target
x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.2)

target


模型训练

gbm = lgb.LGBMRegressor(objective='regression', learning_rate=0.05, n_estimators=20)

gbm.fit(x_train, y_train, eval_set=[(x_test, y_test)], eval_metric='l1', early_stopping_rounds=5)  # early_stopping_rounds:涨的的话,那就是最多5次,后终止
gbm.score(x_test, y_test)



网格搜索,参数优化

estimators = lgb.LGBMRegressor(num_leaves=31)
param_grid = 
    'learning_rate': [0.01, 0.1, 1],
    'n_estimators': [20, 40, 60, 80]

gbm = GridSearchCV(estimators, param_grid, cv=5)
gbm.fit(x_train, y_train)


模型调优训练

gbm = lgb.LGBMRegressor(objective='regression', learning_rate=0.1, n_estimators=20)

gbm.fit(x_train, y_train, eval_set=[(x_test, y_test)], eval_metric='l1', early_stopping_rounds=3)  # early_stopping_rounds:涨的的话,那就是最多5次,后终止
gbm.score(x_test, y_test)

0.8084908368174917

8.《绝地求生》玩家排名预测

《绝地求生》玩家排名预测(2万5千字~大型综合实战)

加油!

感谢!

努力!

史诗级干货长文hmm模型(代码片段)

HMM模型1.马尔科夫链1.1简介1.2经典举例1.3小结2.HMM简介2.1简单案例2.2案例进阶2.2.1问题阐述2.2.2问题解决2.2.2.1一个简单问题【对应问题2】2.2.2.2看见不可见的,破解骰子序列【对应问题1】2.2.2.3谁动了我的骰子?【对应问题3... 查看详情

史诗级干货长文朴素贝叶斯(代码片段)

朴素贝叶斯学习目标1.朴素贝叶斯算法简介2.概率基础复习2.1概率定义2.2案例:判断女神对你的喜欢情况2.3联合概率、条件概率与相互独立2.4贝叶斯公式2.4.1公式介绍2.4.2案例计算2.4.3文章分类计算2.5小结3.案例:商品评论... 查看详情

史诗级干货长文线性回归算法(代码片段)

线性回归算法前言1.线性回归简介1.1线性回归应用场景1.2什么是线性回归1.2.1定义与公式1.2.2线性回归的特征与目标的关系分析2.线性回归API初步使用2.1线性回归API2.2举例2.2.1步骤分析2.2.2代码过程3.数学:求导3.1常见函数的导数3.2导... 查看详情

史诗级干货长文支持向量机(代码片段)

支持向量机SVM1.SVM算法简介1.1SVM算法导入1.2SVM算法定义1.2.1定义1.2.2超平面最大间隔介绍1.2.3硬间隔和软间隔1.2.3.1硬间隔分类1.2.3.2软间隔分类1.3小结2.SVM算法API初步使用3.SVM算法原理3.1定义输入数据3.2线性可分支持向量机3.3SVM的计... 查看详情

史诗级干货长文k-近邻算法(代码片段)

K-近邻算法前言1.K-近邻算法简介1.1什么是K-近邻算法1.2K-近邻算法(KNN)概念1.3电影类型分析1.4KNN算法流程总结2.KNN算法API初步使用2.1Scikit-learn工具介绍2.1.1安装Scikit-learn2.1.2Scikit-learn包含的内容2.2K-近邻算法API2.3案例2.3.1步骤分析2.3.2... 查看详情

史诗级干货长文聚类算法(代码片段)

ClusteringAlgorithm1.聚类算法简介1.1认识聚类算法1.1.1聚类算法在现实中的应用1.1.2聚类算法的概念1.1.3聚类算法与分类算法最大的区别1.2小结2.聚类算法api初步使用2.1api介绍2.2案例2.2.1流程分析2.2.2代码实现2.3小结3.聚类算法实现流程4... 查看详情

史诗级干货长文决策树算法(代码片段)

决策树算法1.决策树算法简介2.决策树分类原理3.cart剪枝3.1为什么要剪枝?3.2常用的减枝方法3.2.1预剪枝3.2.2后剪枝3.3小结4.特征工程-特征提取5.决策树算法API6.案例:泰坦尼克号乘客生存预测7.回归决策树1.决策树算法简介决策... 查看详情

nlp电商评论处理-史诗级长文(代码片段)

#autherbioamin#nlpof电商评论#-*-conding=utf-8-*-importnumpyasnpimportpandasaspd#画图的包importmatplotlib.pyplotaspltimportseabornassnsplt.rcParams[‘font.sans-serif‘]=[‘SimHei‘]plt.rcParams[‘axes.unicode_minus 查看详情

机器学习集成学习进阶xgboost算法案例分析(代码片段)

目录1xgboost算法api介绍1.1xgboost的安装2xgboost参数介绍2.1通用参数(generalparameters)2.2Booster参数(boosterparameters)2.2.1ParametersforTreeBooster2.2.2ParametersforLinearBooster2.3学习目标参数(taskparameters)3xgboost案例介绍3.1... 查看详情

机器学习集成学习进阶xgboost算法原理

目录1最优模型的构建方法2XGBoost的目标函数推导2.1目标函数确定2.2CART树的介绍2.3树的复杂度定义2.3.1定义每课树的复杂度2.3.2树的复杂度举例2.4目标函数推导3XGBoost的回归树构建方法3.1计算分裂节点3.2停止分裂条件判断4XGBoost与GDB... 查看详情

ffmpeg史诗级教学-学习笔记

教程网址千魅太子哥https://www.bilibili.com/video/BV1bT4y1w78z?p=2&spm_id_from=pageDriverFFMPEGffmpeg解析音频、视频数据的,对其渲染的视频文件解码流程图 查看详情

361机器学习常见算法

...tNeighbors)参考:机器学习实战教程(一):K-近邻算法(史诗级干货长文)决策树算法(DecisionTree)参考:机器学习实战教程(二):决策树基础篇之让我们从相亲说起参考:机器学习实战教程(三):决策树实战篇之为自己配... 查看详情

机器学习集成学习(boosting)——xgboost算法(理论+图解+公式推导)

查看详情

集成学习——boosting(gbdt,adaboost,xgboost)

...而成的算法,目前主流的主要有三个算法:GBDT,Adaboost,XGBoost这个链接可以看看:https://www.cnblogs.com/willnote/p/6801496.htmlboosting算法的原理如下: 1、GBDT  2、XGBoost  3、Ad 查看详情

集成学习实战——boosting(gbdt,adaboost,xgboost)

集成学习实践部分也分成三块来讲解:sklearn官方文档:http://scikit-learn.org/stable/modules/ensemble.html#ensemble1、GBDT 2、XGBoost 3、Adaboost在sklearn中Adaboost库分成两个,分别是分类和回归AdaBoostClassifier和AdaBoostRegressor对于集成学习 查看详情

史诗级计算机字符编码知识分享,万字长文,一文即懂!

在人类探索外星文明、迈向星辰大海的宇宙征程里,也离不开这种最最基础的编码问题。前一阵跟同事碰到了字符乱码的问题,了解后发现这个问题存在两年了,我们程序员每天都在跟编码打交道,但大家对字符编码都是一知半... 查看详情

面试笔试题集:集成学习,树模型,randomforests,gbdt,xgboost

...点缺点(局限性)随机森林和GBDT的区别GBDT优缺点XGBoostXGBoost与GBDT有什么不同XGBoost为什么使用泰勒二阶展开XGBoost为什么可以并行训练XGBoost为什么快XGBoost与GBDT的比较XGBoost和LightGBM的区别决策树分类和回归树(简称CART&... 查看详情

机器学习:集成算法-xgboost

xgboost(eXtremeGradientBoosting)大规模并行boostingtree的工具,据说是现在最好用的boosting算法,针对传统GBDT算法做了很多改进xgboost和传统GBDT的区别GBDT基学习器只用CART树,而xgboost除了用CART树,还可以用其他分类器优化目标函数里,... 查看详情