如何在 Python 中使用 LightGBM

2024 年 8 月 29 日 | 阅读 6 分钟

引言

人工智能领域取得了巨大的进步,促成了各种算法的发展,以处理复杂的任务。其中一种算法是 LightGBM,它是 Light Gradient Boosting Machine 的缩写。LightGBM 因其效率、速度和处理大规模数据集的能力而越来越受欢迎。在本文中,我们将探讨 LightGBM 是什么,它是如何工作的,以及如何在 Python 中使用它来增强您的机器学习模型。

要理解 LightGBM,我们需要理解梯度提升的概念

在深入研究 LightGBM 之前,理解梯度提升的概念至关重要。梯度提升是一种集成学习方法,它将多个弱学习器(通常是决策树)组合起来,创建一个更强的预测模型。梯度提升的关键思想是顺序地将新的弱学习器添加到模型中,后续的学习器纠正其前身所犯的错误。这种迭代方法可以创建一个比单个基本模型更准确、更鲁棒的集成模型。

LightGBM 的诞生与概述

LightGBM 由微软的 Guolin Ke 等人于 2016 年开发。开发 LightGBM 的动机是为了解决传统梯度提升框架在效率和可扩展性方面的局限性。传统的梯度提升方法以层级方式构建树,这可能非常耗时,尤其是在处理大型数据集时。LightGBM 旨在克服这些挑战,为构建梯度提升模型提供更快、内存占用更少的解决方案。

LightGBM 是微软开发的一个梯度提升框架。它属于集成学习策略,该策略结合了多个弱学习器(通常是决策树)的预测,以创建一个强大的模型。“梯度提升”一词指的是顺序添加新弱学习器的迭代过程,其中每个新学习器都会纠正其前身所犯的错误。

LightGBM 的优势

速度和效率:LightGBM 的设计旨在快速且内存占用少。它使用基于直方图的方法对连续特征值进行分箱,这大大减少了内存占用并加快了训练过程。

处理大型数据集:由于其高效的设计,LightGBM 可以处理其他算法可能无法放入内存的大型数据集。

特征重要性:LightGBM 提供了一种计算特征重要性的直接方法,让您可以深入了解数据集中最具影响力的特征。

分类特征支持:与一些传统的梯度下降库不同,LightGBM 本地支持分类特征,无需进行独热编码。

准确的预测:尽管速度快且效率高,LightGBM 在模型准确性方面并未妥协。与其他梯度提升框架相比,它始终能提供具有竞争力的性能。

LightGBM 的工作原理

LightGBM 通过几种关键技术实现了其高效性

叶子生长:与传统的深度生长不同,LightGBM 以叶子生长的方式生长树。它选择 delta 损失最大的叶节点来生长树。这种方法导致更少的层级和更复杂的树,从而提高了模型性能。

基于梯度的单边采样 (GOSS):在训练过程中,LightGBM 使用 GOSS,这是一种选择重要数据实例而丢弃信息量较少实例的技术。此过程减少了每次迭代使用的样本数量,从而在不牺牲准确性的情况下有效地加快了训练速度。

独占特征绑定 (EFB):LightGBM 使用 EFB 将独占特征绑定在一起,减少了需要考虑的分割点数量。这项技术显着加快了树构建过程,尤其适用于具有大量特征的数据集。

LightGBM 的特点

为了解决这个问题,使用了 LGBM 或 Light Gradient Boosting Model。它使用了两种技术:基于梯度的单边采样(GOSS)和独占特征绑定(EFB)。因此,GOSS 将会丢弃大部分梯度较小的数据实例,仅使用剩余的数据来估计整体信息增益。梯度较大的数据实例实际上在计算信息增益方面起着主要作用。尽管使用的德数据集比其他模型小,但 GOSS 仍能获得显着的信息增益和准确的结果。

通过 EFB,它将互斥的特征分组在一起,只保留它们,很少取非零值,从而减少了特征数量。这对于强大的特征消除会影响整体结果,而不会损害分割点的准确性。

通过结合这两种改进,可以将任何算法的训练时间提高数倍。因此,LGBM 可以被认为是 EFB 和 GOSS 组合的梯度提升树。您可以在此处访问其官方文档。

LGBM 模型的主要特点如下:

  • 更高的准确性和更快的训练速度。
  • 内存占用低
  • 与其他提升算法相比,准确率相对更高,并且在处理较小数据集时能更好地处理过拟合。
  • 并行学习支持。
  • 它适用于小型和大型数据集。

凭借上述 LGBM 的特点和优势,它已成为机器学习竞赛中的默认算法,尤其是在处理表格类型数据的回归和分类问题时。

LGBM 背后的数学原理

我们使用一种称为决策树的概念,以便我们可以压缩一个函数,例如,从数据空间 X,映射到梯度空间 G。需要一个包含 x1、x2 到 xn 等实例的训练集,其中每个元素都是空间 X 中 s 维的向量。在梯度提升的每次迭代中,损失函数相对于结果模型的负梯度表示为 g1、g2 到 gn。决策树通过在最有信息量的特征处分割每个节点来工作,它也带来了最大的证据增益。在此类模型中,数据改进可以通过分割后的方差来衡量。

Python 中 LGBM 的代码

要在 Python 中编写 LightGBM (LGBM) 模型,您首先需要安装必要的库,然后继续编写代码。LightGBM 是一个梯度提升框架,可为机器学习任务提供快速高效的实现。您可以使用以下命令进行安装:

我们将使用泰坦尼克号乘客数据集。

要在 LightGBM 模型中使用泰坦尼克号数据集,您需要先加载数据集,对其进行预处理,然后训练模型。假设您的泰坦尼克号数据集在一个名为“titanic.csv”的 CSV 文件中,以下是构建和训练 LightGBM 模型的代码:

请确保泰坦尼克号数据集 CSV 文件位于正确的位置,或相应地更新文件路径。此外,请考虑根据数据集的特定特性执行进一步的预处理和特征工程,以提高模型的性能。

输出

Accuracy: 0.8235294117647058

在此示例中,准确率约为 0.82,这意味着 LightGBM 模型在测试集中正确预测了约 82% 的乘客的生存状态。

注意:请注意,您的实际输出将根据具体的数据分割、模型训练和随机初始化而有所不同。模型的准确性取决于多种因素,例如数据预处理、特征工程、超参数调整以及数据集的质量。重要的是要记住,模型评估不应仅基于一次运行,而应基于多次运行的平均性能或通过交叉验证。