lightgbm

lightGBM

1.sklearn 使用代码

【机器学习基础】XGBoost、LightGBM与CatBoost算法对比与调参

首先,XGBoost、LightGBM和CatBoost都是目前经典的SOTA(state of the art)Boosting算法,都可以归类到梯度提升决策树算法系列。三个模型都是以决策树为支撑的集成学习框架,其中XGBoost是对原始版本的GBDT算法的改进,而LightGBM和CatBoost则是在XGBoost基础上做了进一步的优化,在精度和速度上都有各自的优点

数据处理:

# 导入pandas和sklearn数据划分模块
import pandas as pd
from sklearn.model_selection import train_test_split
# 读取flights数据集
flights = pd.read_csv('flights.csv')
# 数据集抽样1%
flights = flights.sample(frac=0.01, random_state=10)
# 特征抽样,获取指定的11个特征
flights = flights[["MONTH", "DAY", "DAY_OF_WEEK", "AIRLINE",
"FLIGHT_NUMBER","DESTINATION_AIRPORT", "ORIGIN_AIRPORT","AIR_TIME",
"DEPARTURE_TIME", "DISTANCE", "ARRIVAL_DELAY"]]
# 对标签进行离散化,延误10分钟以上才算延误
flights["ARRIVAL_DELAY"] = (flights["ARRIVAL_DELAY"]>10)*1
# 类别特征
cat_cols = ["AIRLINE", "FLIGHT_NUMBER", "DESTINATION_AIRPORT",
"ORIGIN_AIRPORT"]
# 类别特征编码
for item in cat_cols:flights[item] = flights[item].astype("category").cat.codes +1# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(flights.drop(["ARRIVAL_DELAY"], axis=1),flights["ARRIVAL_DELAY"], random_state=10, test_size=0.3)
# 打印划分后的数据集大小
print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)

然后三个算法的使用示例,这里贴出lightGBM

# 导入lightgbm模块
import lightgbm as lgb
dtrain = lgb.Dataset(X_train, label=y_train)
params = {
"max_depth": 5, 
"learning_rate" : 0.05, 
"num_leaves": 500,  
"n_estimators": 300
}# 指定类别特征
cate_features_name = ["MONTH","DAY","DAY_OF_WEEK","AIRLINE",
"DESTINATION_AIRPORT", "ORIGIN_AIRPORT"]# lightgbm模型拟合
model_lgb = lgb.train(params, d_train, 
categorical_feature = cate_features_name)# 对测试集进行预测
y_pred = model_lgb.predict(X_test)
print('AUC of testset based on XGBoost: 'roc_auc_score(y_test, y_pred))

示例的比较结果:
在这里插入图片描述

2.常用的超参数调优方法

机器学习模型中有大量需要事先进行人为设定的参数,比如说神经网络训练的batch-size,XGBoost等集成学习模型的树相关参数,我们将这类不是经过模型训练得到的参数叫做超参数(hyperparameter)。人为的对超参数调整的过程也就是我们熟知的调参。机器学习中常用的调参方法包括

网格搜索法(grid search)、

随机搜索法(random search)和

贝叶斯优化(bayesian optimization)。

### 首先网格搜索

主要是 要有

  1. param_list
  2. 使用from sklearn.model_selection import GridSearchCV 模块
  3. fit 超参数搜索搜索
    在这里插入图片描述

随机搜索

随机搜索,顾名思义,即在指定的超参数范围或者分布上随机搜索和寻找最优超参数。相较于网格搜索方法,给定超参数分布内并不是所有的超参数都会进行尝试,而是会从给定分布中抽样一个固定数量的参数,实际仅对这些抽样到的超参数进行实验。相较于网格搜索,随机搜索有时候会是一种更高效的调参方法。Sklearn中通过model_selection模块下RandomizedSearchCV方法进行随机搜索。

替换为 RandomizedSearchCV

可以参考:https://blog.csdn.net/m0_55894587/article/details/130577242

贝叶斯调参

除了上述两种调参方法外,本小节介绍第三种,也有可能是最好的一种调参方法,即贝叶斯优化。贝叶斯优化是一种基于高斯过程(gaussian process)和贝叶斯定理的参数优化方法,近年来被广泛用于机器学习模型的超参数调优。
以后再了解

3. Battle of the Boosting Algos: LGB, XGB, Catboost

三种方法的具体评估,很好的示例代码和总结

https://lavanya.ai/2019/06/01/battle-of-the-boosting-algorithms/
https://www.kaggle.com/code/lavanyashukla01/battle-of-the-boosting-algos-lgb-xgb-catboost

4. lightGBM的中文文档

https://www.kaggle.com/code/lavanyashukla01/battle-of-the-boosting-algos-lgb-xgb-catboost

python包的使用:
读取数据:
在这里插入图片描述

训练和交叉验证:
在这里插入图片描述

提取停止训练和预测:
训练集上的指标在 eraly stop 轮没有提升后,停止训练
在这里插入图片描述

和xgboost对比试验:
试验代码demo:https://github.com/guolinke/boosting_tree_benchmarks
在这里插入图片描述

5.boosting 和 bagging 大概思想

一文让你彻底理解 AdaBoost 自适应提升算法

随机森林 是 bagging算法,同时训练多个弱模型,可以有效减少方差。当 Bagging 方法无法有效发挥作用时,可能会导致所有分类器在同一区域内都产生错误的分类结果。

而Boosting 方法背后的直观理念是,我们需要串行地训练模型,而非并行。每个模型都应专注于之前分类器表现不佳的样本区域。相较于随机森林中各决策树的相互独立性,AdaBoost 展现出一种顺序训练的级联结构。在 AdaBoost 中,后续模型的训练基于前一个模型的预测结果,形成依赖关系。这种级联方式使 AdaBoost 更专注于解决之前未能正确预测的样本,逐步优化预测性能。AdaBoost 充分考虑了每个弱学习器的发言权,不同于随机森林的简单投票或计算平均值。

什么是Boosting?
Boosting是一种迭代的集成学习方法,其基本思想是通过串行训练多个弱学习器,并对每个学习器的预测结果进行加权组合,从而得到一个更强大的模型。与Bagging不同,Boosting是通过不断调整数据集的权重,使得后续的学习器重点关注之前学习器预测错误的样本,从而逐步提高整体模型的性能。

Boosting的步骤
Boosting的基本步骤如下:

  1. 初始化权重:开始时,将训练数据集中的每个样本赋予相等的权重。

  2. 训练弱学习器:在当前数据权重下训练一个弱学习器,例如决策树、神经网络等。

  3. 根据预测错误调整权重:根据当前弱学习器的预测结果,调整每个样本的权重。通常,被错误分类的样本将会获得更高的权重,而被正确分类的样本则会获得较低的权重。

  4. 更新模型:将当前学习器的预测结果与之前学习器的预测结果进行加权组合,得到最终的模型预测结果。

  5. 重复步骤2至4:重复以上步骤,直到达到预定的迭代次数或模型性能满足要求。

6. learning to rank, lightGBM

一般用在查询搜索应用中,输入一个文档,对数据库中的文档根据相关性进行排序。
L2R算法主要包括三种类别:PointWise,PairWise,ListWise。
什么意思呢?
PointWise 就是只考虑绝对相关度。 {文档的feature, 相关度} 进行训练,可以回归或者分类
PairWise 考虑一对文档的相关度排名, 输入任意一对文档,计算相关度的大小关系,{文档1feature, 文档2feature, 相关度关系}

listWise 考虑所有文档的相关度排名。计算整体的损失

更具体的解释,假如要对一个班级的学生进行排名,需要知道学生的各种特征:
在这里插入图片描述

先看
lightGBM用于排序(Learning to Rank )

https://github.com/jiangnanboy/learning_to_rank 里面有代码,博客,项目介绍等。
https://github.com/Ransaka/LTR-with-LIghtGBM
https://developer.baidu.com/article/details/3274567
NDCG指标
NDCG全称为 Normalized Discounted Cumulative Gain(归一化折损累计增益),通常用在搜索排序任务中,在这样的任务里,通常会返回一个list作为搜索排序的结果进行输出,为了验证这个list的合理性,就需要对这个list的排序进行评价。这也是NDCG的由来。
在这里插入图片描述

https://www.cnblogs.com/by-dream/p/9403984.html
参考:https://blog.csdn.net/weixin_42327752/article/details/125410386

7. 实例

https://www.kaggle.com/code/lavanyashukla01/battle-of-the-boosting-algos-lgb-xgb-catboost

写的很好,训练预测,参数搜索,以及模型分析等代码。
https://lavanya.ai/2019/06/01/battle-of-the-boosting-algorithms/

调参:
https://cloud.tencent.com/developer/article/1651704

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

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

相关文章

5. JavaSE ——【适合小白的数组练习题】

📖开场白 亲爱的读者,大家好!我是一名正在学习编程的高校生。在这个博客里,我将和大家一起探讨编程技巧、分享实用工具,并交流学习心得。希望通过我的博客,你能学到有用的知识,提高自己的技能&a…

【区块链 + 智慧政务】澳门:智慧城市建设之证书电子化项目 | FISCO BCOS应用案例

2019 年 2 月 27 日,澳门政府设立的澳门科学技术发展基金与微众银行达成合作,通过区块链、人工智能、大数据、 云计算等创新技术,共同推进澳门特区的智慧城市建设与未来型城市发展,提升粤港澳大湾区的科创能力。在澳 门智慧城市建…

【数学建模】高温作业专用服装设计(2018A)隐式差分推导

为方便计算,对区域进行离散化处理,采用隐式差分格式进行离散计算。隐式差分格式如图: 每层材料内部 对第 j j j层材料: 其中, λ j \lambda_j λj​表示第 j j j层的热扩散率, c j c_j cj​表示第 j j j层的比热容…

linux需要熟悉的命令理解记忆

(1)光标插入 (1)一般模式下: i 插入到光标前方 记忆方法:在一般模式下, 光标选中字符, 我们按下 i, 就会插入光标的前方, insert, 表示插队 (2)一般模式下: a 插入到光标后方 记忆方法: 在一般模式下, 光标选中字符,a表示append, 添加或者附加的意思 (3) 如果要在行首或者行…

css实现每个小盒子占32%,超出就换行

代码 <div class"visitors"><visitor class"item" v-for"(user,index) in userArr" :key"user.id" :user"user" :index"index"></visitor></div><style lang"scss" scoped&…

java乱码问题

文章目录 1.eclipse所有修改编码的地方2.io读取文件乱码问题1.读写统一2.转换字符编码&#xff1a; 3.http请求返回乱码 1.eclipse所有修改编码的地方 2.io读取文件乱码问题 1.读写统一 如果文件是以UTF-8编码保存的&#xff0c;那么在读取文件时也应使用UTF-8编码。 2.转换…

Apple Vision Pro 和其商业未来

机器人、人工智能相关领域 news/events &#xff08;专栏目录&#xff09; 本文目录 一、Vision Pro 生态系统二、Apple Vision Pro 的营销用例 随着苹果公司备受期待的进军可穿戴计算领域&#xff0c;新款 Apple Vision Pro 承载着巨大的期望。 苹果公司推出的 Vision Pro 售…

百分点科技签约潍坊市数据产业发展战略合作

近日&#xff0c;潍坊市数据产业发展战略合作签约仪式举行&#xff0c;潍坊市人民政府副市长张震生&#xff0c;潍坊市财政局党组书记、局长王金祥&#xff0c;潍坊市大数据局党组书记陈强出席大会并致辞。百分点科技受邀进行战略合作签约&#xff0c;共同见证潍坊市数据要素市…

生成式人工智能(AI)的未来

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

深度学习模型快速开发平台推荐

前言 本文面向深度学习初学者或者工程师&#xff0c;推荐几个常用的深度学习模型快速开发平台。可以帮助初学者快速跑通模型&#xff0c;帮助工程师快速对模型进行部署和应用。 huggingface 简介 不多介绍&#xff0c;全球最大的模型托管平台&#xff0c;该平台最大的特点是…

全网超详细Redis主从部署(附出现bug原因)

主从部署 整体架构图 需要再建两个CentOs7,过程重复单机部署 http://t.csdnimg.cn/zkpBE http://t.csdnimg.cn/lUU5gLinux环境下配置redis 查看自己ip地址命令 ifconfig 192.168.187.137 进入redis所在目录 cd /opt/software/redis cd redis-stable 进入配置文件 vim redi…

JavaWeb入门程序解析(Spring官方骨架、配置起步依赖、SpringBoot父工程、内嵌Tomcat)

3.3 入门程序解析 关于web开发的基础知识&#xff0c;我们可以告一段落了。下面呢&#xff0c;我们在基于今天的核心技术点SpringBoot快速入门案例进行分析。 3.3.1 Spring官方骨架 之前我们创建的SpringBoot入门案例&#xff0c;是基于Spring官方提供的骨架实现的。 Sprin…

勘测院如何实现可控便捷的图纸安全外发?

勘测院&#xff0c;也称为勘测设计研究院或勘测设计院&#xff0c;是进行与地质、地形和地貌有关的勘察测量的单位&#xff0c;为各类工程项目提供准确的地质数据和设计依据。 勘测院会产生各类包括图纸在内的文件&#xff0c;如&#xff1a; 1、项目相关文件&#xff1a;项目…

c++模板初阶----函数模板与类模板

目录 泛型编程 函数模板 函数模板的概念 函数模板的格式 函数模板的原理 函数模板的实例化 函数模板的匹配原则 类模板 类模板的定义格式 类模板的实例化 c的模板大致可以分为&#xff1a; 函数模板类模板 首先在我们引入模板之前&#xff0c;先进行介绍泛型编程 泛…

期权黑天鹅怎么应对?近期很有可能发生的事情!

今天带你了解期权黑天鹅怎么应对&#xff1f;在当今世界&#xff0c;投资者们不断地寻找着各种策略来应对市场的波动和不确定性。其中&#xff0c;黑天鹅策略在近年来逐渐受到了广泛的关注&#xff0c;这种策略主要是利用极端事件&#xff0c;例如突发事件或自然灾害等难以预测…

【React笔记初学总结一】React新手的学习流程笔记总结,掰开了揉碎了,下载安装基础结构学习

REACT学习记录 一、React是什么&#xff1a;二、尝试安装下载&#xff1a;三、理解都有什么四、基础网页学习&#xff1a;1.几个比较重要的资源包例子2.第一个react示例&#xff1a;&#xff08;掰开了揉碎了&#xff0c;咱们先看懂它最简单的结构&#xff09;3.第二个react示例…

C++链接FTP服务器并下载数据(在qt中编写)

.pro文件 #------------------------------------------------- # # Project created by QtCreator 2024-07-16T13:19:03 # #-------------------------------------------------QT core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsTARGET untitled TE…

Qt实现IP地址输入框-自定义控件

在 许多应用程序中&#xff0c;我们经常需要使用IP地址。为了方便用户输入和处理&#xff0c;一个好的解决方案是使用自定义控件。本示例代码使用Qt编写一个名为“IPAddress”的自定义控件来实现IP地址的输入功能。通过使用此控件&#xff0c;用户可以方便地输入和处理IP地址。…

吴恩达机器学习笔记 三十八 二进制标签 均值归一化

标签 0 和 1 可以有很多种意义。从回归到二分分类&#xff1a;之前定义 ,而对于二进制标签&#xff0c;通过给出y^(i,j)为 1 的概率&#xff0c;其中 损失函数 均值归一化 计算每个电影的平均得分&#xff0c;例如第一部电影的平均分为2.5&#xff0c;第五部电影的平均分为1.2…

如何在excel表中实现单元格满足条件时整行变色?

可以试试使用条件格式&#xff1a; 一、条件格式 所谓“自动变色”就要使用条件格式。 先简单模拟数据如下&#xff0c; 按 B列数字为偶数 为条件&#xff0c;整行标记为蓝色背景色。 可以这样设置&#xff1a; 先选中1:10行数据&#xff0c;在这里要确定一下名称栏里显示…