LightGBM - 核心参数
这些是使用 LightGBM 等机器学习模型时可以更改的主要设置或选择。它们控制模型如何从数据中学习,这对模型的准确性和性能有重要影响。
使用关键参数,可以针对您的特定数据、任务和限制定制 LightGBM 模型。通过更改这些参数,您可以优化模型的效率、速度和泛化能力。
为什么使用核心参数
LightGBM 中的核心参数可帮助您−
控制模型复杂度:限制树的大小和深度,以避免使模型过于简单(缺少模式)或过于复杂(拟合噪声)。
提高准确性:更改模型的学习过程,例如它应该以多快的速度学习,以快速发现最佳选择。
防止过度拟合:使用限制或惩罚来防止模型学习数据中的噪声而不是底层模式。
加快训练速度:通过决定每次训练中使用多少数据和多少特征来加快训练速度阶段。
适合不同的任务:为您的特定问题选择最佳设置,如回归或分类,并正确监控性能。
LightGBM 中的核心参数
在这里我们将重点介绍控制模型行为的核心 LightGBM 参数 −
1. boosting_type(默认值 = 'gbdt')
此参数控制训练过程中使用的增强技术。选项如下 −
'gbdt'(梯度提升决策树):默认方法称为"梯度提升决策树"或"gbdt",使用梯度提升逐个构建决策树。
'dart'(Dropouts meet Multiple Additive Regression Trees):在训练期间,会随机淘汰一些树以防止过度拟合。
'goss'(基于梯度的单侧采样):选择具有较大梯度的显著数据点以加快训练速度。
'rf'(随机森林):随机森林,称为"rf",独立创建树并汇总其预测。
2. objective
创建 LightGBM 将尝试优化的损失函数或目标函数。
'regression':一种用于预测连续变量(如房屋价值)的技术。
'binary':对于涉及二元分类的工作(例如,是/否、垃圾邮件/正常邮件),请使用"binary"。
'multi-class':要引用涉及多类分类的问题,请使用"multi-class"。
3.指标
此参数提供用于评估模型性能的评估指标。
'binary_logloss':二元分类的对数损失。
'auc':ROC 曲线下的面积,主要用于分类任务。
'rmse':指回归情况下的均方根误差。
4. learning_rate(默认值 = 0.1)
此核心参数控制每次迭代的步长,同时向损失函数的最小值移动。
较低的值(如 0.01)表示较慢的学习率但较高的准确率。
较高的数字(例如 0.1)可能允许更快的学习,但存在错过最佳响应的风险。
5. num_iterations(默认值 = 100)
它主要用于设置模型应运行的增强迭代次数。值越高意味着增强轮次越多,学习效果越好,但会增加训练时间。
6. num_leaves(默认值 = 31)
用于确定每棵树的复杂度。
值越高,树越复杂,但可能导致过度拟合。
值越低,树越简单,从而降低了过度拟合的可能性。
7. max_depth(默认值 = -1)
主要用于限制树的最大深度。如果设置为 -1 则表示没有限制。
较低的值(例如 3 或 5)会降低深度,从而缩小模型。
较高的数字允许更深的树,这可以检测更复杂的模式,但可能会过度拟合。
8. min_data_in_leaf(默认值 = 20)
这是叶子中所需的最小数据点数。
数字越大,通过确保每片叶子都有足够的数据点,可以降低过度拟合的可能性。
较低的值可以提高模型灵活性,但会增加过度拟合的风险。
9. feature_fraction(默认值 = 1.0)
用于控制使用多少个特征来训练每棵树。
得分为 1.0 表示已完全使用所有特征。
小于 1.0 的值会随机选择一组子集,从而防止过度拟合。
10. bagging_fraction(默认值 = 1.0)
确定每次迭代中用于训练的数据点比例。
值 1.0 表示所有数据点。
较低的值包含一个随机子集,这会增加随机性并有助于防止过度拟合。
11. bagging_freq(默认值 = 0)
确定 bagging 的频率。如果设置为正值,则启用 bagging,并在每个 bagging_freq 周期随机选择数据。
12. lambda_l1 & lambda_l2(默认值 = 0.0)
它分别控制 L1 和 L2 正则化。较高的值会为模型添加正则化,通过惩罚较大的值来防止过度拟合。
13. min_gain_to_split(默认值 = 0.0)
这是在叶节点上创建另一个划分所需的最小增益。值越高,模型越保守,从而防止过度拟合。
使用核心参数实现 LightGBM
让我们使用 LightGBM 为乳腺癌数据集使用这些核心参数构建模型 −
安装 LightGBM
首先运行以下命令在系统中安装 LightGBM −
pip install lightgbm
导入库并加载数据
安装软件包后,我们将导入所需的库并加载数据 −
import lightgbm as lgb from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 加载数据集 data = load_breast_cancer() X, y = data.data, data.target # 将数据拆分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
定义核心参数
现在让我们为我们的模型定义核心参数 −
# 定义 LightGBM 参数 params = { 'boosting_type': 'gbdt', 'objective': 'binary', 'metric': 'binary_logloss', 'num_leaves': 31, 'learning_rate': 0.05, 'num_iterations': 100, 'max_depth': 5, 'feature_fraction': 0.8, 'bagging_fraction': 0.8, 'bagging_freq': 5, 'lambda_l1': 0.1, 'lambda_l2': 0.1, 'min_gain_to_split': 0.01 }
为 LightGBM 准备数据
在此阶段,我们需要为 Light Gradient Boosting Machine 准备数据。
# 为 LightGBM 准备数据 train_data = lgb.Dataset(X_train, label=y_train)
训练模型
现在使用准备好的数据集训练模型 −
# 训练 LightGBM 模型 model = lgb.train(params, train_data)
进行预测并评估模型
现在您必须使用训练后的模型进行预测并评估其准确性 −
# 进行预测 y_pred = model.predict(X_test) y_pred_binary = [1 if pred > 0.5 else 0 for pred in y_pred] # 评估模型准确率 accuracy = accuracy_score(y_test, y_pred_binary) print(f"准确率如下:{accuracy}")
这将导致以下结果:
Accuracy is as follows: 0.9737