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

news2024/9/24 21:28:24

在这里插入图片描述

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

作者:i阿极

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

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

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


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

文章目录

  • 机器学习:LightGBM算法原理(附案例实战)
  • 1、LightGBM算法原理
  • 2、实验环境
  • 3、LightGBM算法案例实战
    • 3.1案例背景
    • 3.2模型搭建
    • 3.3模型预测及评估
    • 3.4模型参数调优
  • 总结


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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/430790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python结合Qt实现点击按钮保存并生成自定义word详细讲解(相信我,耐心看完,一定会有收获的)

一、需求介绍 因为我的毕设需要设计一个系统,然后把结果生成检测报告供企业下载。模型大概已经训练好了,也就差个导出word功能,把模型识别的数据结果输入到word导出即可。 二、最终实现效果 这里随便整个模板来对所需要的函数进行说明&…

嵌入式 QT Creator使用

目录 1、QT Creator界面 2、QT Creator设置 3、第一个程序 3.1 新建一个项目 3.2 项目的文件组成和管理 3.3 项目的编译、调试与运行 1、QT Creator界面 启动 Qt Creator ,出现如图 1 所示的主窗口: Qt Creator 的界面很简洁。上方是主菜单栏&a…

【架构设计】如何设计一个几十万在线用户弹幕系统

文章目录 一、前言二、项目介绍客户端轮询WebSocket主动推送 三、弹幕初始架构四、弹幕架构演进五、弹幕存储六、弹幕查询七、总结 一、前言 现在无论是直播还是电视剧,我们都可以看到上面慢慢的弹幕,满足十几万用户在线的弹幕系统,我们该如…

ChatGPT 如何获取API Key

什么是OpenAI API Key? OpenAI是ChatGPT的“开发商”,提供API使得开发者可以在自己的应用程序上调用OpenAI的相关服务(除了ChatGPT,OpenAI还有其他产品)。如果想调用OpenAI的产品服务在自己的应用程序上,我们就需要申…

Web接口测试工具---Poster与Postman

工作当中有不少时间在编写和维护接口自动化测试用例。打算先整理一些接口相关工具的使用。 简单对接Web口测试的相关工具/技术做个划分。 HTTP/SOAP协议接口的功能测试: 1、浏览器URL(GET请求) http://127.0.0.1:8000/login/?usernamezhangs…

4.25、IO多路复用简介

4.25、IO多路复用简介 1. I/O多路复用(I/O多路转接)①阻塞等待(BIO模型)②非阻塞,忙轮询(NIO模型)③IO多路转接技术(select/poll)④IO多路转接技术(epoll&am…

基于DeepSpeed训练ChatGPT

基于DeepSpeed训练ChatGPT 最少只需一张32G GPU,自己也可以训练一个ChatGPT! 最近微软发布了一个基于DeepSpeed的训练优化框架来完成ChatGPT类模型的训练,博主对其进行了研究并通过此博文分享相关技术细节。 一、配置预览 1、开源仓库&…

如何更换电脑背景图片?这样做很简单!

案例:怎样把电脑背景图换成自己的照片? 【我的电脑背景图片是系统自带的壁纸,不太好看,我想把它换成自己的照片。有没有小伙伴知道电脑怎么更换背景图片?在线求个简单的方法!】 在日常生活中,…

YOLOV5引入SE注意力机制以及精度提升问题

YOLOV5引入SE注意力机制以及精度提升问题 1. 如何增加SE注意力机制 在model/common.py中添加SE结构 class SE(nn.Module):def __init__(self, c1, c2, r16):super(SE, self).__init__()self.avgpool nn.AdaptiveAvgPool2d(1)self.l1 nn.Linear(c1, c1 // r, biasFalse)sel…

23-Ajax-axios

一、原生Ajax <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width…

用canvas画曲线图

1.创建 canvas 绘图上下文&#xff08;指定 canvasId&#xff09; 定义&#xff1a;在自定义组件下&#xff0c;第二个参数传入组件实例this&#xff0c;以操作组件内 canvas 组件。需要指定 canvasId&#xff0c;该绘图上下文只作用于对应的 canvas。 参数 参数类型说明can…

jQWidgets V15.0[2023-03-03] Crack

高级 JavaScript 和 HTML5 用户界面框架 jQWidgets 为构建专业网站和移动应用程序提供了全面的解决方案。它完全基于 HTML5、CSS 和 JavaScript 等开放标准和技术构建。jQWidgets 支持响应式 Web 开发&#xff0c;并帮助您创建在台式机、平板电脑和智能手机上看起来很漂亮的应…

Jenkins构建结果自定义内容推送企业微信

环境&#xff1a;gitlab、jenkins(2.400,windows环境下&#xff09;、企业微信 功能&#xff1a;推送构建人、构建时长、构建结果、git提交信息到企业微信并相应提交人 一、企业微信添加群聊机器人 在弹出的页面添加一个新的机器人&#xff0c;创建完成后会有一个webhook地址…

Django DRF - 认证Authentication

1.概念 身份验证是将传入请求与一组标识凭据&#xff08;例如&#xff0c;请求来自的用户或与其进行签名的令牌&#xff09;相关联的机制。然后&#xff0c;权限和限制策略可以使用这些凭据来确定是否应允许该请求。 身份验证本身不会允许或不允许传入的请求&#xff0c;它只…

最好用的中文分词库cppjieba_ok【可直接编译使用用版】

最好用的中文分词库cppjieba_ok【可直接编译使用用版】 中文分词技术在自然语言处理领域中扮演着非常重要的角色&#xff0c;其中cppjieba是一个高效、开源的中文分词库&#xff0c;它提供了多种分词算法和分词模式&#xff0c;并且能够支持多线程&#xff0c;能够大大提升分词…

计算机组成原理——第五章中央处理器(中)

辞别再无相见月&#xff0c;终是一人度春秋 文章目录前言5.4.1 硬布线控制器的设计5.4.2 微程序控制器的基本原理5.4.3 微指令的设计5.4.4 微程序控制单元的设计前言 本文主要写的是控制器的设计&#xff0c;控制器的设计分为硬部件控制器(就是用纯硬件的方式来实现的一种控制…

Asp net core写法

变量和字符串赋值 $"{变量}字符串" 列如 $"{a}你好" 全球唯一标识符 Guid.NewGuid() 线程 Task Map Dictionary<string,object> using 定义对象的使用范围&#xff0c;即使释放对象 using(Student student new Student() ) { } 异步编程&#x…

博客友链效果

学习风宇blog flex布局使用百分比作2栏网格布局&#xff0c;内部也是使用flex布局做左图右文使用IntersectionObserver这个浏览器提供的Api&#xff0c;配合vue指令&#xff0c;当元素出现在可视区时&#xff0c;添加上移的动画效果。注意&#xff1a;元素的初始状态&#xff…

Clion 创建的Qt程序界面是老式风格

环境&#xff1a; Clion版本&#xff1a;CLion 2023.1.1Qt 5.15.2 问题 当使用Clion创建Qt程序&#xff0c;不管是选择MinGW编译器还是MSVC编译器&#xff0c;显示出来的界面都很old style 即老式的界面风格&#xff0c;如图所示&#xff1a; 原因 产生这个问题的原因是…

现在培训IT技术出来还能就业吗?

受疫情影响&#xff0c;近三年各行业都是在裁员节流&#xff0c;直接倒闭的也是常态。互联网企业也不能幸免于难&#xff0c;被裁掉了一大波基础或中级技术岗位&#xff0c;还有一部分中高层领导降薪。然后就到处疯传IT行业不行了&#xff0c;大家都失业了&#xff0c;但你知道…