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