其他分享
首页 > 其他分享> > 【史诗级干货长文】集成学习进阶(XGBoost & lightGBM)

【史诗级干货长文】集成学习进阶(XGBoost & lightGBM)

作者:互联网

集成学习进阶

1. xgboost算法原理

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

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

1.1 最优模型的构建方法

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

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

在这里插入图片描述

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

在这里插入图片描述
应⽤:

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 主要基于以下方面优化,提升整体特特性:

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

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

直方图算法的基本思想是

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

在这里插入图片描述

5.3.4 直接支持类别特征

在这里插入图片描述

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

5.3.5 直接支持高效并行

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

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.4 小结

在这里插入图片描述

6. lightGBM算法api介绍

6.1 lightGBM的安装

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千字~大型综合实战)

加油!

感谢!

努力!

标签:xgboost,lightGBM,进阶,1.2,XGBoost,test,算法,长文
来源: https://blog.csdn.net/qq_46092061/article/details/119118268