【Python】LightGBM:快速高效的梯度提升框架

14 篇文章 0 订阅

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


什么是LightGBM?

LightGBM(Light Gradient Boosting Machine)是由微软开发的一种高效的梯度提升框架。它被广泛用于数据科学和机器学习的各个领域,特别是在处理大型数据集和高维数据时表现出色。LightGBM不仅具有速度快、内存占用低的优点,还在准确性和可扩展性方面表现优异。

LightGBM的优势

  1. 速度快:LightGBM通过基于直方图的决策树学习算法,大大减少了计算量和内存占用,提高了训练速度。
  2. 高效处理大规模数据:LightGBM在处理大型数据集和高维数据时表现尤为出色,能够快速处理数百万行和数千列的数据。
    支持并行学习:LightGBM可以利用多线程和分布式计算,有效利用计算资源,加快模型训练过程。
  3. 自动处理缺失值:LightGBM能够自动处理数据中的缺失值,无需手动填补缺失值。
    支持类别特征:LightGBM能够直接处理类别特征,无需额外的编码操作,如one-hot编码。

LightGBM的基本原理

LightGBM的核心思想是梯度提升决策树(GBDT),它通过集成多个决策树来提高模型的预测能力。与传统GBDT算法不同,LightGBM通过以下技术优化了计算效率和内存使用:

  1. 基于直方图的算法:LightGBM将连续特征离散化为k个箱,并基于这些箱构建直方图,这样可以显著减少内存占用并加快训练速度。
  2. 叶子-wise的树生长策略:LightGBM使用叶子-wise(leaf-wise)生长策略,而不是层级-wise(level-wise)策略。这使得每次分裂都选择当前收益最大的叶子节点,从而生成更深的树,提高了模型的准确性。
  3. GOSS(Gradient-based One-Side Sampling):GOSS通过在计算梯度时保留大梯度样本并随机采样小梯度样本,从而在减少计算量的同时保持模型性能。
    EFB(Exclusive Feature Bundling):EFB通过将互斥的稀疏特征进行捆绑,有效减少了特征维度,提升了训练效率。

LightGBM的安装

安装LightGBM非常简单,可以通过以下命令直接安装:

pip install lightgbm

LightGBM的使用案例

下面,我们通过一个二分类问题的案例来展示如何使用LightGBM进行模型训练和评估。

  1. Step 1: 导入必要的库
import lightgbm as lgb
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
  1. Step 2: 加载数据
    假设我们有一个包含客户信息的数据集,用于预测客户是否流失。数据集包含特征和目标变量(流失标记)。
# 加载数据
df = pd.read_csv('customer_churn.csv')

# 特征和目标变量
X = df.drop('churn', axis=1)
y = df['churn']
  1. Step 3: 分割数据集
    将数据集分为训练集和测试集。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  1. Step 4: 创建LightGBM数据集
    LightGBM有自己专用的数据格式,需要将数据转换为Dataset对象。
# 创建LightGBM数据集
train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test, reference=train_data)
  1. Step 5: 设置参数
    设置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': 1,
    'verbose': -1
}
  1. Step 6: 训练模型
    使用训练集数据训练LightGBM模型。
# 训练模型
num_round = 100
bst = lgb.train(params, train_data, num_round, valid_sets=[test_data], early_stopping_rounds=10)
  1. Step 7: 模型预测
    使用测试集数据进行预测,并评估模型性能。
# 模型预测
y_pred_prob = bst.predict(X_test, num_iteration=bst.best_iteration)
y_pred = (y_pred_prob > 0.5).astype(int)

# 模型评估
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")
print(classification_report(y_test, y_pred))

总结

LightGBM作为一种高效的梯度提升框架,在处理大规模数据和高维数据时具有显著优势。它通过一系列技术优化了计算效率和内存使用,使得模型训练速度更快、效果更好。本文介绍了LightGBM的基本原理、安装方法以及一个具体的使用案例,展示了如何通过LightGBM构建和评估机器学习模型。希望这篇文章能帮助你更好地理解和应用LightGBM,从而在实际项目中取得更好的效果。

  • 25
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值