jjzjj

机器学习:LightGBM算法原理(附案例实战)

i阿极 2023-06-11 原文

机器学习:LightGBM算法原理(附案例实战)

作者:i阿极

作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页

😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍

📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪


订阅专栏案例:机器学习
机器学习:基于逻辑回归对某银行客户违约预测分析
机器学习:学习k-近邻(KNN)模型建立、使用和评价
机器学习:基于支持向量机(SVM)进行人脸识别预测
决策树算法分析天气、周末和促销活动对销量的影响
机器学习:线性回归分析女性身高与体重之间的关系
机器学习:基于主成分分析(PCA)对数据降维
机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测
机器学习:学习KMeans算法,了解模型创建、使用模型及模型评价
机器学习:基于神经网络对用户评论情感分析预测
机器学习:朴素贝叶斯模型算法原理(含实战案例)
机器学习:逻辑回归模型算法原理(附案例实战)
机器学习:基于逻辑回归对优惠券使用情况预测分析
机器学习:基于逻辑回归对超市销售活动预测分析
机器学习:基于KNN对葡萄酒质量进行分类

文章目录


1、LightGBM算法原理

LightGBM是一个基于决策树的梯度提升框架,被广泛应用于机器学习任务,如分类、回归和排序等。LightGBM采用了一些独特的技术,例如基于直方图的决策树学习和GOSS(Gradient-based One-Side Sampling)等,以提高模型的训练效率和准确性。

LightGBM的核心思想是采用基于直方图的决策树算法。直方图是对特征值进行离散化处理后,将连续的数值分段成多个区间,每个区间内的数值数量作为该区间的计数值。然后通过直方图算法来优化决策树的分裂点选择,从而提高决策树的训练效率。

具体来说,LightGBM采用了以下几种优化方法:

  • 基于直方图的决策树算法
    LightGBM采用了基于直方图的算法来对连续特征进行离散化处理,将特征值分段成多个区间,计算每个区间内的样本数量,然后根据区间的计数值来选择最佳的分裂点。这种方法避免了对特征进行排序和遍历的操作,从而提高了训练速度。

  • 基于梯度的单边采样
    LightGBM采用了基于梯度的单边采样算法来加速训练过程。该算法在每次迭代时,优先选择梯度较大的样本进行训练,从而可以快速找到最佳的模型参数。

  • 基于直方图的特征选取
    LightGBM还采用了基于直方图的特征选取算法,该算法通过计算每个特征的直方图信息来评估特征的重要性,然后根据特征重要性的排序选择最佳的特征集合。

  • 带深度的叶节点优化
    LightGBM采用了带深度的叶节点优化算法,该算法可以避免过拟合问题,提高模型的泛化能力。具体来说,该算法通过限制叶节点的深度来控制模型的复杂度,从而防止模型在训练数据上过拟合。

2、实验环境

Python 3.9

Anaconda

Jupyter Notebook

3、LightGBM算法案例实战

3.1案例背景

投资商经常会通过多个不同渠道投放广告,以此来获得经济利益。在本案例中我们选取公司在电视、广播和报纸上的投入,来预测广告收益,这对公司策略的制定是有较重要的意义。

3.2模型搭建

读取数据

import pandas as pd
df = pd.read_excel('/home/mw/input/XG3004/广告收益数据.xlsx')
df.head()

提取特征变量和目标变量

X = df.drop(columns='收益') 
y = df['收益'] 

划分训练集和测试集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)

模型训练和搭建

from lightgbm import LGBMRegressor
model = LGBMRegressor()
model.fit(X_train, y_train)

3.3模型预测及评估

预测测试数据

y_pred = model.predict(X_test)
y_pred[0:5]

预测值和实际值对比

a = pd.DataFrame()  # 创建一个空DataFrame 
a['预测值'] = list(y_pred)
a['实际值'] = list(y_test)
a.head()

手动输入数据进行预测

X = [[71, 11, 2]]
model.predict(X)

查看R-square

from sklearn.metrics import r2_score
r2 = r2_score(y_test, model.predict(X_test))
r2

查看评分

model.score(X_test, y_test)

特征重要性

model.feature_importances_

3.4模型参数调优

参数调优

from sklearn.model_selection import GridSearchCV  # 网格搜索合适的超参数
parameters = {'num_leaves': [15, 31, 62], 'n_estimators': [20, 30, 50, 70], 'learning_rate': [0.1, 0.2, 0.3, 0.4]}  # 指定分类器中参数的范围
model = LGBMRegressor()  # 构建模型
grid_search = GridSearchCV(model, parameters,scoring='r2',cv=5)

cv=5表示交叉验证5次,scoring='r2’表示以R-squared作为模型评价准则

输出参数最优值

grid_search.fit(X_train, y_train)  # 传入数据
grid_search.best_params_  # 输出参数的最优值

重新搭建LightGBM回归模型

model = LGBMRegressor(num_leaves=31, n_estimators=50,learning_rate=0.3)
model.fit(X_train, y_train)

查看得分

model.score(X_test, y_test)


总结

总之,LightGBM是一种高效的集成学习框架,它采用了多种优化方法来提高训练速度和准确性,能够在大规模数据集上实现高效的训练和预测。

📢文章下方有交流学习区!一起学习进步!💪💪💪
📢创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗

有关机器学习:LightGBM算法原理(附案例实战)的更多相关文章

  1. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  2. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  3. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  4. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  5. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  6. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  7. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  8. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

  9. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  10. ruby - 我如何学习 ruby​​ 的正则表达式? - 2

    如何学习ruby​​的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby​​的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/

随机推荐