机器学习中的LightGBM模型及其优缺点(包含Python代码样例)

本文介绍了LightGBM,一种基于梯度提升的高效机器学习模型,强调其优点如高速训练、准确性及鲁棒性,同时也讨论了其过拟合和内存消耗的缺点。通过Iris数据集的示例展示了如何使用LightGBM进行训练和评估。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、简介

二、优缺点

三、样例代码

四、总结


一、简介

LightGBM(Light Gradient Boosting Machine)是一种基于梯度提升(Gradient Boosting)算法的机器学习模型。它是由微软团队于2017年开发的,旨在解决大规模数据下的效率和准确性问题。

LightGBM的原理如下:

  1. 基于梯度提升:LightGBM使用梯度提升算法来训练多个弱分类器,每个弱分类器都试图学习最佳的预测函数来减少当前模型的残差。

  2. 基于直方图的决策树算法:LightGBM使用直方图算法替代了传统的决策树算法。直方图算法把连续的特征分成离散的bins,并在训练过程中对特征的bins进行选择,从而减少了计算量,并提高了训练速度。

  3. 基于Leaf-wise的生长策略:LightGBM采用了基于叶子生长的策略,即每次选择能够最大程度降低损失函数的叶子节点进行生长,而不是像传统的深度优先生长策略遍历所有节点。这样可以提高训练速度,但也容易过拟合。

二、优缺点

LightGBM的优点如下:

  1. 高效性:LightGBM使用直方图和叶子生长策略,大大减少了模型的计算量,训练速度更快。它还支持并行训练和特征并行化,能够处理大规模的数据集。

  2. 准确性:LightGBM具有较低的误差率,能够处理复杂的模型和大规模的数据集,并且在大多数情况下具有较高的准确性。

  3. 鲁棒性:LightGBM对噪声和离群值具有较好的鲁棒性,可以处理不完整的数据和缺失值。

LightGBM的缺点如下:

  1. 容易过拟合:由于采用了基于叶子生长的策略,LightGBM容易过拟合训练数据,尤其是在数据集较小或特征较少时。

  2. 内存消耗较大:LightGBM在训练过程中需要存储额外的直方图和梯度信息,因此对内存消耗较大,特别是在处理大规模数据时。

三、样例代码


from sklearn.datasets import load_iris
import lightgbm as lgb
import pandas as pd
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
plt.style.use('ggplot')
import warnings
warnings.filterwarnings('ignore')


iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=[i[:-5].replace(' ','_') for i in iris.feature_names])
df['target'] = iris.target

tr_x, te_x, tr_y, te_y = train_test_split(df.drop(columns='target'), df['target'], test_size=0.2)
tr_lgb_dt = lgb.Dataset(tr_x, label=tr_y.values)
te_lgb_dt = lgb.Dataset(te_x, label=te_y.values)


lgb_param = {
    'objective': 'multiclass',
    'metric': ['multi_logloss', 'multi_error'],
    'num_class': 3,
    'n_jobs': 4,
    'num_iterations': 300,
    'learning_rate': 0.02,
    'max_depth': 4,
    'lambda_l2': 0.8,
    'verbose': -1
}
eval_result={}
lgb_model = lgb.train(lgb_param, train_set=tr_lgb_dt , valid_sets=[tr_lgb_dt, te_lgb_dt], 
          verbose_eval=20,
          callbacks=[lgb.log_evaluation, lgb.early_stopping(50, first_metric_only=True), lgb.record_evaluation(eval_result)]
          )


# plot loss
plt.title('training losses')
for data_name, metric_res in eval_result.items():
    for metric_name, log_ in metric_res.items():
        plt.plot(log_, label = f'{data_name}-{metric_name}', 
                color='steelblue' if 'train' in data_name else 'darkred', 
                linestyle=None if 'train' in data_name else '-.',
                alpha=0.7)

plt.legend()
plt.show()
plt.savefig(fname="LightGBM_iris_result.png")

下方InsCode选择查看文件里的LightGBM_iris_result.png即可查看可视化结果

四、总结

        LightGBM是一种高效、准确的梯度提升算法模型,适用于大规模数据集和复杂的模型训练。它在训练速度和准确性上有一定的优势,但也存在一些容易过拟合和内存消耗大的缺点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老兵安帕赫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值