【Python】 XGBoost vs LightGBM:两大梯度提升框架的对比

2024-05-27 03:52

本文主要是介绍【Python】 XGBoost vs LightGBM:两大梯度提升框架的对比,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


原谅把你带走的雨天
在渐渐模糊的窗前
每个人最后都要说再见
原谅被你带走的永远
微笑着容易过一天
也许是我已经 老了一点
那些日子你会不会舍不得
思念就像关不紧的门
空气里有幸福的灰尘
否则为何闭上眼睛的时候
又全都想起了
谁都别说
让我一个人躲一躲
你的承诺
我竟然没怀疑过
反反覆覆
要不是当初深深深爱过
我试着恨你
却想起你的笑容
                     🎵 陈楚生/单依纯《原谅》


在机器学习领域,XGBoost(Extreme Gradient Boosting)和LightGBM(Light Gradient Boosting Machine)是两种非常流行且高效的梯度提升框架。它们在各种数据科学竞赛和实际应用中表现出色,尤其是在处理大规模数据和高维数据时。本文将对XGBoost和LightGBM进行详细对比,帮助你理解它们的优劣和适用场景。

什么是XGBoost和LightGBM?

  • XGBoost:由Tianqi Chen等人开发,是一种基于梯度提升决策树(GBDT)的开源框架。XGBoost因其高效、准确和可扩展性而受到广泛欢迎。

  • LightGBM:由微软开发,是另一种基于GBDT的框架。LightGBM以其快速训练速度和低内存占用著称,特别适用于大数据场景。

主要特点对比

  1. 速度和性能
    训练速度:LightGBM通常比XGBoost更快。这是因为LightGBM采用了基于直方图的算法,减少了数据扫描次数,提高了效率。
    内存使用:LightGBM的内存占用通常较低,因为它通过直方图方法和特征捆绑技术减少了内存使用。
  2. 算法实现
    XGBoost:采用按层生长的决策树(level-wise),即每次分裂所有节点。这种方法可以更好地控制树的结构,但在大数据集上效率较低。
    LightGBM:采用按叶子生长的决策树(leaf-wise),即每次选择增益最大的叶子节点进行分裂。这种方法可以生成更深的树,提高模型的准确性,但可能导致过拟合,需要通过设置最大深度或叶子节点数来控制。
  3. 特征处理
    类别特征:LightGBM能够直接处理类别特征,而XGBoost需要对类别特征进行预处理,如one-hot编码。
    缺失值处理:XGBoost和LightGBM都能够自动处理缺失值,但LightGBM在处理大规模数据时表现更好。
  4. 并行和分布式计算
    并行计算:XGBoost和LightGBM都支持并行计算,但LightGBM在大规模数据集上的分布式计算能力更强。
    分布式训练:LightGBM能够更好地支持分布式训练,适用于超大规模数据集。
    实际应用对比

数据准备

假设我们有一个客户流失预测的数据集,包含客户特征和是否流失的标注(流失为1,未流失为0)。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score, classification_report# 加载数据
df = pd.read_csv('customer_churn.csv')# 特征和目标变量
X = df.drop('churn', axis=1)
y = df['churn']# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
XGBoost模型训练和评估
python
复制代码
import xgboost as xgb# 转换数据格式为DMatrix
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)# 设置XGBoost参数
params = {'booster': 'gbtree','objective': 'binary:logistic','eval_metric': 'logloss','eta': 0.1,'max_depth': 6,'scale_pos_weight': 80,'subsample': 0.8,'colsample_bytree': 0.8,'seed': 42
}# 训练模型
num_round = 100
bst = xgb.train(params, dtrain, num_round)# 模型预测
y_pred_prob = bst.predict(dtest)
y_pred = (y_pred_prob > 0.5).astype(int)# 评估模型
print(f"XGBoost Accuracy: {accuracy_score(y_test, y_pred)}")
print("XGBoost Classification Report:")
print(classification_report(y_test, y_pred))

LightGBM模型训练和评估

import lightgbm as lgb# 创建LightGBM数据集
train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test, reference=train_data)# 设置LightGBM参数
params = {'boosting_type': 'gbdt','objective': 'binary','metric': 'binary_logloss','learning_rate': 0.1,'num_leaves': 31,'max_depth': -1,'min_data_in_leaf': 20,'feature_fraction': 0.8,'bagging_fraction': 0.8,'bagging_freq': 5,'lambda_l1': 0.1,'lambda_l2': 0.1,'scale_pos_weight': 80,'verbose': -1
}# 训练模型
num_round = 100
bst = lgb.train(params, train_data, num_round, valid_sets=[test_data], early_stopping_rounds=10)# 模型预测
y_pred_prob = bst.predict(X_test, num_iteration=bst.best_iteration)
y_pred = (y_pred_prob > 0.5).astype(int)# 评估模型
print(f"LightGBM Accuracy: {accuracy_score(y_test, y_pred)}")
print("LightGBM Classification Report:")
print(classification_report(y_test, y_pred))

总结

XGBoost和LightGBM都是强大的梯度提升框架,各有优劣:

  • XGBoost:适用于各种数据集,算法成熟稳定,参数调节细腻。
  • LightGBM:在大规模数据和高维数据上表现更佳,训练速度更快,内存占用更低,适合需要快速迭代的大数据场景。

选择合适的框架取决于具体的应用场景和数据特征。在实际应用中,可以尝试两种框架并进行对比,以选择性能最佳的模型。希望本文能帮助你更好地理解和使用XGBoost和LightGBM,为你的机器学习项目提供有力支持。

这篇关于【Python】 XGBoost vs LightGBM:两大梯度提升框架的对比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1006446

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地