【机器学习】嘿马机器学习(算法篇)第13篇:集成学习进阶,5.6 lightGBM算法api介绍【附代码文档】

34 阅读1分钟

🏆🏆🏆教程全知识点简介:1.定位、目标。2. K-近邻算法涵盖距离度量、k值选择、kd树、鸢尾花种类预测数据集介绍、练一练、交叉验证网格搜索、facebook签到位置预测案例。3. 线性回归包括线性回归简介、线性回归损失和优化、梯度下降法介绍、波士顿房价预测案例、欠拟合和过拟合、正则化线性模型、正规方程推导方式、梯度下降法算法比较优化、维灾难。4. 逻辑回归涵盖逻辑回归介绍、癌症分类预测案例(良恶性乳腺癌肿瘤预测、获取数据)、ROC曲线绘制。5. 朴素贝叶斯算法包括朴素贝叶斯算法简介、概率基础复习、产品评论情感分析案例(取出内容列数据分析、判定评判标准好评差评)。6. 支持向量机涵盖SVM算法原理、SVM损失函数、数字识别器案例。7. 决策树算法包括决策树分类原理、cart剪枝、特征工程特征提取、决策树算法api、泰坦尼克号乘客生存预测案例。8. EM算法涵盖初识EM算法、EM算法介绍。9. HMM模型包括马尔科夫链、HMM简介、前向后向算法评估观察序列概率、维特比算法解码隐藏状态序列、HMM模型API介绍。10. 集成学习进阶涵盖Bagging、xgboost算法原理、otto案例(Otto Group Product Classification Challenge xgboost实现)、数据变化可视化、lightGBM、stacking算法基本思想、住房月租金预测。11. 聚类算法包括聚类算法api初步使用、聚类算法实现流程、模型评估、算法优化、特征降维、用户对物品类别喜好细分案例、算法选择指导。12. 数学基础涵盖向量与矩阵范数、朗格朗日乘子法、Huber Loss、极大似然函数取对数原因。


📚📚👉👉👉本站这篇博客:   juejin.cn/post/753805…    中查看

📚📚👉👉👉本站这篇博客:   juejin.cn/post/752191…    中查看

✨ 本教程项目亮点

🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考


🎯🎯🎯全教程总章节


🚀🚀🚀本篇主要内容

集成学习进阶

学习目标

  • 知道xgboost算法原理
  • 知道otto案例通过xgboost实现流程
  • 知道lightGBM算法原理
  • 知道PUBG案例通过lightGBM实现流程
  • 知道stacking算法原理
  • 知道住房月租金预测通过stacking实现流程

5.6 lightGBM算法api介绍

学习目标

  • 了解lightGBM算法api中常用的参数

1 lightGBM的安装

  • windows下:
pip3 install lightgbm

Python 标准库参考

  • mac下:

安装链接

cryptography 文档

2 lightGBM参数介绍

2.1 Control Parameters

Control Parameters含义用法
max_depth树的最大深度当模型过拟合时,可以考虑首先降低 max_depth
min_data_in_leaf叶子可能具有的最小记录数默认20,过拟合时用
feature_fraction例如 为0.8时,意味着在每次迭代中随机选择80%的参数来建树boosting 为 random forest 时用
bagging_fraction每次迭代时用的数据比例用于加快训练速度和减小过拟合
early_stopping_round如果一次验证数据的一个度量在最近的early_stopping_round 回合中没有提高,模型将停止训练加速分析,减少过多迭代
lambda指定正则化0~1
min_gain_to_split描述分裂的最小 gain控制树的有用的分裂
max_cat_group在 group 边界上找到分割点当类别数量很多时,找分割点很容易过拟合时
n_estimators最大迭代次数最大迭代数不必设置过大,可以在进行一次迭代后,根据最佳迭代数设置

2.2 Core Parameters

Core Parameters含义用法
Task数据的用途选择 train 或者 predict
application模型的用途选择 regression: 回归时,binary: 二分类时,multiclass: 多分类时
boosting要用的算法gbdt,rf: random forest,dart: Dropouts meet Multiple Additive Regression Trees,goss: Gradient-based One-Side Sampling
num_boost_round迭代次数通常 100+
learning_rate学习率常用 0.1, 0.001, 0.003…
num_leaves叶子数量默认 31
devicecpu 或者 gpu
metricmae: mean absolute error ,mse: mean squared error ,binary_logloss: loss for binary classification ,multi_logloss: loss for multi classification

2.3 IO parameter

IO parameter含义
max_bin表示 feature 将存入的 bin 的最大数量
categorical_feature如果 categorical_features = 0,1,2, 则列 0,1,2是 categorical 变量
ignore_column与 categorical_features 类似,只不过不是将特定的列视为categorical,而是完全忽略
save_binary这个参数为 true 时,则数据集被保存为二进制文件,下次读数据时速度会变快

3 调参建议

IO parameter含义
num_leaves取值应 <=2(max_depth)2^{(max_depth)}2​(max_depth)​​
min_data_in_leaf将它设置为较大的值可以避免生长太深的树,但可能会导致 underfitting,在大型数据集时就设置为数百或数千
max_depth这个也是可以限制树的深度

下表对应了 Faster Speed ,better accuracy ,over-fitting 三种目的时,可以调的参数

Faster Speedbetter accuracyover-fitting
max_bin 设置小一些用较大的 max_binmax_bin 小一些
num_leaves 大一些num_leaves 小一些
feature_fraction来做 sub-samplingfeature_fraction
bagging_fraction 和 bagging_freq设定 bagging_fraction 和 bagging_freq
training data 多一些training data 多一些
save_binary来加速数据加载直接用 categorical featuregmin_data_in_leaf 和 min_sum_hessian_in_leaf
用 parallel learning用 dartlambda_l1, lambda_l2 ,min_gain_to_split 做正则化
num_iterations 大一些,learning_rate小一些max_depth 控制树的深度

5.7 lightGBM案例介绍

学习目标

  • 通过鸢尾花数据集知道lightGBM算法对应api的使用

接下来,通过鸢尾花数据集对lightGBM的基本使用,做一个介绍。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import mean_squared_error
import lightgbm as lgb

加载数据,对数据进行基本处理

  
  
# 加载数据
  
  
iris = load_iris()
data = iris.data
target = iris.target
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2)

模型训练

gbm = lgb.LGBMRegressor(objective='regression', learning_rate=0.05, n_estimators=20)

gbm.fit(X_train, y_train, eval_set=[(X_test, y_test)], eval_metric='l1', early_stopping_rounds=5)

gbm.score(X_test, y_test)
  
  
# 0.810605595102488
  
  

image-20200210105750934

  
  
#  网格搜索,参数优化
  
  
estimator = lgb.LGBMRegressor(num_leaves=31)
param_grid = {
    'learning_rate': [0.01, 0.1, 1],
    'n_estimators': [20, 40]
}
gbm = GridSearchCV(estimator, param_grid, cv=4)
gbm.fit(X_train, y_train)
print('Best parameters found by grid search are:', gbm.best_params_)
  
  
# Best parameters found by grid search are: {'learning_rate': 0.1, 'n_estimators': 40}
  
  

模型调优训练

gbm = lgb.LGBMRegressor(num_leaves=31, learning_rate=0.1, n_estimators=40)

gbm.fit(X_train, y_train, eval_set=[(X_test, y_test)], eval_metric='l1', early_stop