LightGBM模型

LightGBM与XGBoost对比:
  • 模型精度:两个模型相当
  • 训练速度:LightGBM训练速度更快 => 1/10
  • 内存消耗:LightGBM占用内存更小 => 1/6
  • 特征缺失值:两个模型都可以自动处理特征缺失值
  • 分类特征:XGBoost不支持类别特征,需要对其进行OneHot编码,而LightGBM支持分类特征

在这里插入图片描述

XGBoost模型的复杂度:
  • 模型复杂度 = 树的棵数 X 每棵树的叶子数量 X 每片叶子生成复杂度
  • 每片叶子生成复杂度 = 特征数量 X 候选分裂点数量 X 样本的数量
LightGBM针对XGBoost的优化:
  • Histogram算法,直方图算法 => 减少候选分裂点数量
  • GOSS算法,基于梯度的单边采样算法 => 减少样本的数量
  • EFB算法,互斥特征捆绑算法 => 减少特征的数量
  • LightGBM = XGBoost + Histogram + GOSS + EFB
Histogram算法-减少分类算法
  • 替代XGBoost的预排序算法
  • 思想是先连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图,即将连续特征值离散化到k个bins上(比如k=255)
  • 当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点
  • XGBoost需要遍历所有离散化的值,LightGBM只要遍历k个直方图的值
  • 候选分裂点数量 = k-1

在这里插入图片描述

GOSS算法-减少样本数量:
  • Gradient-based One-Side Sampling,基于梯度的单边采样算法
  • 思想是通过样本采样,减少目标函数增益Gain的计算复杂度
  • 单边采样,只对梯度绝对值较小的样本按照一定比例进行采样,而保留了梯度绝对值较大的样本
  • 因为目标函数增益主要来自于梯度绝对值较大的样本 => GOSS算法在性能和精度之间进行了很好的trade off
    在这里插入图片描述
EFB算法-减少特征数量:
  • Exclusive Feature Bundling,互斥特征绑定算法
  • 思想是特征中包含大量稀疏特征的时候,减少构建直方图的特征数量,从而降低计算复杂度
  • 数据集中通常会有大量的稀疏特征(大部分为0,少量为非0)我们认为这些稀疏特征是互斥的,即不会同时取非零值
  • EFB算法可以通过对某些特征的取值重新编码,将多个这样互斥的特征绑定为一个新的特征
  • 类别特征可以转换成onehot编码,这些多个特征的onehot编码是互斥的,可以使用EFB将他们绑定为一个特征
  • 在LightGBM中,可以直接将每个类别取值和一个bin关联,从而自动地处理它们,也就无需预处理成onehot编码

在这里插入图片描述
具体可参考:https://zhuanlan.zhihu.com/p/99069186

LightGBM是一种基于梯度提升决策树(Gradient Boosting Decision Tree)的机器学习模型。它是由微软开发的一种高效的梯度提升框架,具有以下特点: 1. 高效性:LightGBM使用了基于直方图的算法来加速训练过程,同时采用了稀疏特征优化和直方图差分算法,使得模型在处理大规模数据时具有较高的训练和预测速度。 2. 低内存占用:LightGBM使用了带有压缩的直方图算法来存储特征值,减少了内存的使用量。 3. 准确性:LightGBM采用了基于直方图的算法来进行特征分裂,能够更好地处理离散特征和连续特征,提高了模型的准确性。 4. 可扩展性:LightGBM支持并行训练和多线程处理,可以在多核CPU上进行并行计算,提高了模型的训练效率。 5. 支持大规模数据:LightGBM能够处理大规模的数据集,适用于大规模的机器学习问题。 下面是一个使用LightGBM模型进行分类任务的示例代码: ```python import lightgbm as lgb from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载数据集 iris = load_iris() X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42) # 创建LightGBM数据集 train_data = lgb.Dataset(X_train, label=y_train) # 设置参数 params = { 'objective': 'multiclass', 'num_class': 3, 'metric': 'multi_logloss', } # 训练模型 model = lgb.train(params, train_data, num_boost_round=100) # 预测 y_pred = model.predict(X_test) # 输出预测结果 print(y_pred) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值