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

相关推荐

  1. <span style='color:red;'>lightgbm</span>

    lightgbm

    2024-07-17 21:56:01      31 阅读
  2. Python lightgbm如何使用

    2024-07-17 21:56:01       34 阅读
  3. mac 安装anaconda和lightgbm

    2024-07-17 21:56:01       58 阅读
  4. XGboost和lightGBM算法对比

    2024-07-17 21:56:01       43 阅读
  5. mmlspark.lightgbm.LightGBMClassifier参数说明

    2024-07-17 21:56:01       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 21:56:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 21:56:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 21:56:01       57 阅读
  4. Python语言-面向对象

    2024-07-17 21:56:01       68 阅读

热门阅读

  1. ansible报错--‘when‘ is not a valid attribute for a Play

    2024-07-17 21:56:01       24 阅读
  2. [C/C++入门][for]24、菲波那契数列

    2024-07-17 21:56:01       25 阅读
  3. Linux C++ 060-设计模式之单例模式

    2024-07-17 21:56:01       21 阅读
  4. 使用axios实现vue web前端无痕刷新

    2024-07-17 21:56:01       23 阅读
  5. 调试和测试PER语言代码的最佳实践

    2024-07-17 21:56:01       20 阅读
  6. 不同行业的私域引流策略有何差异?

    2024-07-17 21:56:01       21 阅读
  7. 算法训练营day72

    2024-07-17 21:56:01       23 阅读
  8. 第二章:pod-运行于kubernetes中的容器

    2024-07-17 21:56:01       17 阅读
  9. 昇思25天学习打卡营第25天|SSD目标检测

    2024-07-17 21:56:01       20 阅读
  10. 怎么选择适合自己的酱香白酒?

    2024-07-17 21:56:01       19 阅读
  11. UDP协议

    UDP协议

    2024-07-17 21:56:01      21 阅读
  12. D365 Fraud Protection Account Protection部署方案

    2024-07-17 21:56:01       25 阅读
  13. 解决数据卷root权限问题的Docker科研向实践思路

    2024-07-17 21:56:01       24 阅读