首页 > 编程语言 >机器学习中的LightGBM模型及其优缺点(包含Python代码样例)

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

时间:2024-03-28 11:29:43浏览次数:44  
标签:iris plt LightGBM name Python tr 样例 lgb

目录

一、简介

二、优缺点

三、样例代码

四、总结


一、简介

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即可查看可视化结果

<iframe allowfullscreen="allowfullscreen" frameborder="no" height="500px" sandbox="allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals" scrolling="no" src="https://inscode.csdn.net/@nickhuang1996/LightGBM_iris_example/embed" width="100%"></iframe>

四、总结

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

标签:iris,plt,LightGBM,name,Python,tr,样例,lgb
From: https://blog.csdn.net/qq_36556893/article/details/137102990

相关文章

  • 如何系统得自学python?(基础知识篇完)——12.面向对象
     一、面向对象为了方便了解,我们拿面向过程做一个对比例如:肚子饿了,想吃饭面向过程:去超市---买菜---卖肉---买米---回家---洗菜---切肉---炒菜---煮米饭---盛饭---开吃面向对象:点外卖总结:⾯向对象就是将编程当成是⼀个事物,对外界来说,事物是直接使⽤的,不⽤去管他内部的情......
  • 你都用Python来干什么?为什么这么多人想学习Python?
    挺想回答一下这个问题的。我是非码专业,从2019年开始接触python。一开始其实需求非常简单,就是为了处理大量的Excel表格。其实本来四大的工作经历已经让我excel的水平比较高了,各种跨表定位、查询,复杂的字符串操作,还有vba函数都可以处理。但是python铺天盖地的宣传还是让我觉......
  • 如何系统地学习Python(一)基础语法与数据类型
    学习Python可以遵循一个结构化的框架,从基础知识开始,逐步深入到高级特性和实际应用。后面根据系统的学习Python的框架分享一系列文章,请交流指正:一、python介绍Python是一种高级的、解释型的、面向对象的编程语言。它具有简单易学、语法优雅、可读性强等特点,因此被广泛应用于We......
  • Django框架之python后端框架介绍
    一、网络框架及MVC、MTV模型1、网络框架网络框架(Webframework)是一种软件框架,用于帮助开发人员构建Web应用程序和Web服务。它提供了一系列预先编写好的代码和工具,以简化开发过程并提高开发效率。网络框架通常包括以下功能和特点:路由处理(Routing):网络框架定义了URL与处理程序......
  • Python数据库编程全指南SQLite和MySQL实践
    本文分享自华为云社区《Python数据库编程全指南SQLite和MySQL实践》,作者:柠檬味拥抱。1.安装必要的库首先,我们需要安装Python的数据库驱动程序,以便与SQLite和MySQL进行交互。对于SQLite,Python自带了支持;而对于MySQL,我们需要安装额外的库,如mysql-connector-python。#安装MyS......
  • 4.Python数据分析—数据分析入门知识图谱&索引(知识体系下篇)
    4.Python数据分析—数据分析入门知识图谱&索引-知识体系下篇一·个人简介二·机器学习基础2.1监督学习与无监督学习2.1.1监督学习:2.1.2无监督学习:2.2特征工程2.3常用机器学习算法概述2.3.1监督学习算法:2.3.2无监督学习算法:2.3.3强化学习:2.4模型评估与选择三......
  • Python虚拟环境遇到的小问题(pip)
    问题最近想接触下Pyside6做窗口化的程序,然后就在WSL2搭建环境。第一步安装包的时候就卡住了。原因是虽然我的Python在虚拟环境.venv中,但是该环境没有pip。在命令行直接whichpip,显示的是系统全局的pip。解决多方查询,似乎没有一个很好的解决方案。目前主流的做法是,下载一个自动......
  • 华为OD机试 - 最多购买宝石数目(Java & JS & Python & C & C++)
    须知哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持文章目录须知题目描述输入描述输出描述解题思路:题目描述橱窗里有一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i]0≤i<nn=gems.length宝石可同时......
  • python x_train取前100行
    目录Python代码示例:取出x_train前100行数据Python代码示例:取出x_train前100行数据在机器学习和数据处理中,有时我们需要对数据集进行处理,比如提取其中的部分数据进行分析或训练模型。在Python中,我们可以利用简单的代码来实现这一功能。下面就以一个示例来演示如何使用Pytho......
  • 毕业设计:基于深度学习的流动摊贩检测系统 人工智能 python
    目录前言一、课题背景与意义二、算法理论技术2.1目标检测算法2.2注意力机制三、模型训练3.1数据处理3.2实验环境3.3结果分析最后前言 ......