任务5 LightGBM模型的尝试

本文深入探讨LightGBM框架,一种高效的梯度提升决策树算法。解析其基于Histogram算法和带深度限制的Leaf-wise生长策略,以及如何通过直方图优化、缓存命中率优化等手段提高训练速度和准确性。并通过实例演示如何设定参数、调参以及模型融合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单模型

LightBGM理论

LightGBM 是一个轻量级梯度 boosting 框架,使用基于学习算法的决策树。它可以说是分布式的,高效的,有以下优势:
更快的训练效率
低内存使用
更高的准确率
支持并行化学习
可处理大规模数据

特点:
基于Histogram的决策树算法
带深度限制的Leaf-wise的叶子生长策略
直方图做差加速
直接支持类别特征(Categorical Feature)
Cache命中率优化
基于直方图的稀疏特征优化
多线程优化

Histogram算法

直方图算法的基本思想:先把连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图。遍历数据时,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。

带深度限制的Leaf-wise的叶子生长策略

Level-wise过一次数据可以同时分裂同一层的叶子,容易进行多线程优化,也好控制模型复杂度,不容易过拟合。但实际上Level-wise是一种低效算法,因为它不加区分的对待同一层的叶子,带来了很多没必要的开销,因为实际上很多叶子的分裂增益较低,没必要进行搜索和分裂。

Leaf-wise则是一种更为高效的策略:每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。因此同Level-wise相比,在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度。

Leaf-wise的缺点:可能会长出比较深的决策树,产生过拟合。因此LightGBM在Leaf-wise之上增加了一个最大深度限制,在保证高效率的同时防止过拟合。

LightGBM实践

自己设定参数

import lightgbm as gbm
GBM = gbm.sklearn.LGBMClassifier(num_leaves = 30,learning_rate = 0.1,n_estimators = 20)
GBM.fit(x_train,y_train)

在这里插入图片描述

GBM_predict = GBM.predict(x_val)sklearn.metrics.f1_score(y_val,GBM_predict,average ='weighted')

在这里插入图片描述

GridSearchCV调参

From sklearn.model_selection import GridSearchCV 
GBM_grid =gbm.sklearn.LGBMClassifier(num_leaves=30) param_grid = { 'learning_rate': [0.01, 0.1, 0.5], 'n_estimators': [30, 40] } 
gbm = GridSearchCV(GBM_grid, param_grid ) 
gbm.fit(x_train, y_train)
print(''The optimal parameters for grid search are:', gbm.best_params_)

在这里插入图片描述

GBM_best = gbm.sklearn.LGBMClassifier(num_leaves = 30,learning_rate = 0.1,n_estimators = 40)
GBM_best.fit(x_train,y_train)
GBM_predict = lgb_best.predict(x_val)
sklearn.metrics.f1_score(y_val,GBM_predict,average =“weighted” “)

在这里插入图片描述

模型融合

GBM_predict = lgb_best.predict_paoba(x_val)
lr_predict=lr.predict_paoba(x_val)
clf_predict=clf.predict_paoba(x_val)
sum_preidct = GBM_predict + lr_predict + clf_predict
sum = np.argmax(sum, axis=1)
### LightGBM 模型使用教程 #### 创建和训练基本模型 为了创建并训练一个基础的 LightGBM 模型,通常会遵循如下模式: ```python import lightgbm as lgb from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 假设 X 是特征矩阵, y 是目标向量 X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2) train_data = lgb.Dataset(X_train, label=y_train) validation_data = lgb.Dataset(X_val, label=y_val, reference=train_data) params = { 'objective': 'binary', # 对于二分类问题 'metric': {'auc'}, } bst = lgb.train(params, train_data, valid_sets=[validation_data]) ``` 上述代码展示了如何准备数据以及设置一些最基本的参数[^1]。 #### 调整参数以提高性能 对于想要进一步优化模型的情况,调整某些特定参数可以帮助达到更好的效果。例如: - **控制树结构**: 减少最大深度(`max_depth`)或增大最小样本数(`min_child_samples`)有助于防止过拟合。 - **加速训练过程**: 设置较大的 `learning_rate` 可加快收敛速度;启用 `feature_fraction` 和/或 `bagging_fraction` 来随机采样特征和实例,从而减少方差并改善泛化能力。 - **早停机制**: 利用 `early_stopping_rounds` 参数可以在验证集上的表现不再改进时提前终止迭代,节省时间的同时也减少了过拟合的风险。 ```python tuned_params = { "num_leaves": 31, "max_depth": -1, "learning_rate": 0.1, "n_estimators": 100, "subsample_for_bin": 200000, "min_child_weight": 0.001, "min_child_samples": 20, "colsample_bytree": 0.8, "reg_alpha": 0., "reg_lambda": 0. } bst_tuned = lgb.LGBMClassifier(**tuned_params).fit( X_train, y_train, eval_set=(X_val, y_val), early_stopping_rounds=50 ) ``` 这段脚本说明了怎样配置更多高级别的超参数来微调模型的表现[^3]。 #### 实践中的注意事项 当实际应用 LightGBM 时需要注意几个方面: - 数据预处理非常重要,尤其是类别变量编码、缺失值填充等方面; - 尽管 LightGBM 支持多种类型的输入格式,但对于大规模数据集来说,采用二进制文件形式存储可以显著降低 I/O 开销; - 如果硬件条件允许的话,尝试利用 GPU 加速版本可以获得更快的速度优势; - 面对复杂任务时,建议结合交叉验证技术评估多个候选方案的效果差异,并最终选取最优者作为正式部署对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值