Python中使用LightGBM

人工智能领域取得了巨大进展,推动了不同算法的进步来处理复杂的任务。其中一种算法是 LightGBM,是 Light Gradient Boosting Machine 的缩写。LightGBM 因其处理海量数据集的熟练程度、速度和能力而受到关注。在本文中,我们将研究 LightGBM 是什么、它的工作方式以及如何将其引入 Python 来帮助您的 ML 模型。

要理解 LightGBM,我们需要理解 Gradient Boosting 的概念:
在我们深入研究 LightGBM 之前,有必要了解梯度提升的概念。梯度提升是一种集成学习方法,它结合了多个弱学习器(通常是决策树)来创建更强的预测模型。梯度提升背后的关键思想是依次向模型中添加新的弱学习器,每个后续学习器都会纠正其前辈所犯的错误。这种迭代方法产生的集成模型比单个基础模型更准确、更稳健。

什么是LightGBM的诞生
LightGBM由微软的Guolin Ke等人于2016年开发。创建LightGBM的动机是为了解决传统梯度提升框架在效率和可扩展性方面的局限性。传统的梯度增强方法以分层方式构建树,这在计算上可能会很昂贵,尤其是在处理大型数据集时。LightGBM 旨在克服这些挑战,并为构建梯度增强模型提供更快、内存效率更高的解决方案。

LightGBM 是微软开发的梯度提升框架。它在集成学习策略中占有一席之地,这些策略巩固了一些无能为力的学生(通常是决策树)的期望,从而为模型提供了主要的优势领域。“梯度提升”是指连续添加新的弱学生的迭代过程,每个新学生都会调整其前辈所犯的错误。

LightGBM 的优点
速度和生产力:LightGBM 旨在快速且节省内存。它采用基于直方图的方式来处理容器一致的分量值,这从根本上减少了记忆印象并加快了训练过程的速度。

  • 处理巨大的数据集:由于其先进的设计,LightGBM 可以处理使用其他算法可能无法挤入内存的巨大数据集。
  • 特征重要性:LightGBM 提供了一种计算突出显着性的直接方法,使您能够获取数据集中最有说服力的元素的知识。
  • 分类特征支持:与一些传统的梯度下降库不同,LightGBM 本地支持绝对元素,消除了对 one-hot 编码的要求。
  • 准确的预测:尽管 LightGBM 速度快、效率高,但它并不会影响模型的准确性。与其他梯度提升框架相比,它始终提供有竞争力的性能。

LightGBM工作原理:
LightGBM 通过几个关键技术实现其效率:

  • 逐叶树生长:与传统的逐深度树生长不同,LightGBM 以逐叶方式生长树。它选择具有最大增量损失的叶节点来生长树。这种方法会导致更少的级别和更复杂的树,这有助于提高模型性能。
  • 基于梯度的单侧采样 (GOSS):在训练过程中,LightGBM 使用 GOSS,这是一种专注于选择重要数据实例同时丢弃信息量较少的数据实例的技术。这个过程减少了每次迭代使用的样本数量,在不牺牲准确性的情况下有效加快了训练过程。
  • 独占特征捆绑(EFB):LightGBM采用EFB来组合独占特征,减少需要考虑的分割点数量。该技术显着加速了树的构建过程,特别是对于具有众多特征的数据集。

LightGBM的特点:
为了解决这个问题,使用了 LGBM 或光梯度增强模型。它使用两种类型的程序,即侧面测试(GOSS)和独家功能捆绑(EFB)。因此,GOSS实际上会拒绝信息部分中梯度很小的关键部分,而仅利用多余的信息来衡量总体数据增益。具有巨大斜率的信息案例确实在数据增益的计算中占据了更大的份额。无论使用比其他模型更适度的数据集,GOSS 都可以通过关键数据增益获得准确的结果。

通过 EFB,它将相互排斥的功能放在一起,但很少会同时使用任何非无价值的功能来减少功能的数量。这会影响强大的特征消除的总体结果,而不会影响分割点的准确性。

通过结合这两个变化,它将成倍地保证任何计算的准备时间。因此,LGBM 可以被认为是 EFB 和 GOSS 的混合护坡树。您可以在此处获取他们的权威文档。

LGBM 模型的基本特征如下:

  • 更高的准确率和更快的训练速度。
  • 内存使用率低
  • 与其他增强算法相比,准确性相对更高,并且在处理更适度的数据集时可以更好地处理过度拟合。
  • 并行学习支持。
  • 无论是小数据集还是大数据集,都很好。

凭借前面提到的 LGBM 的功能和优点,当有人处理回归和分类问题的表格信息时,它已成为 ML 竞赛的默认算法。

LGBM 背后的数学
我们使用一种称为决策树的想法,这样我们就可以打包一种能力,例如从信息空间 X 到斜率空间 G。需要一个包含 x1、x2 直至 xn 等情况的训练集,其中每个元素都是空间 X 中具有 s 维的向量。在梯度提升的每​​一个重述中,损失函数相对于结果模型的每一个负梯度都表示为 g1、g2 直至 gn。决策树真正隔离了最具启发性的部分的每个中心,它同样带来了最大的证据增益。在这种模型中,数据的改进可以通过分离后的方差来衡量。


python 中的 LGBM 代码:
要使用 Python 编写 LightGBM (LGBM) 模型,您首先必须引入所需的库,然后继续编写代码。LightGBM 是一个梯度增强框架,可以快速高效地执行 ML 任务。您可以使用以下命令安装它:

pip install lightgbm  

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

要在 LightGBM 模型中使用泰坦尼克号数据集,首先要加载数据集,对其进行预处理,然后训练模型。如果泰坦尼克号数据集存在名为 "titanic.csv "的 CSV 文档中,下面是构建和准备 LightGBM 模型的代码:


import numpy as np  
import pandas as pd  
import lightgbm as lgb  
from sklearn.model_selection import train_test_split  
from sklearn.metrics import accuracy_score  
  
# Load the Titanic dataset  
data = pd.read_csv("titanic.csv")  
  
# 预处理数据(您可能需要处理缺失值、特征工程和分类编码)  
  
# Extract features and target variable  
X = data.drop(
"Survived", axis=1)  
y = data[
"Survived"]  
  
# 将数据分为训练集和测试集  ;
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)  
  
# 创建 LightGBM 数据集;
train_data = lgb.Dataset(X_train, label=y_train)  
  
# 为 LightGBM 模型设置超参数 
params = {  
    'objective': 'binary',  
    'metric': 'binary_logloss',  
    'boosting_type': 'gbdt',  
    'num_leaves': 31,  
    'learning_rate': 0.1,  
    'feature_fraction': 0.9,  
    'bagging_fraction': 0.8,  
    'bagging_freq': 5,  
    'verbose': 0  
}  
  
# 训练 LightGBM 模型  ;
num_rounds = 100  # Number of boosting rounds (you can adjust this based on your data)  
model = lgb.train(params, train_data, num_rounds)  
对测试集进行预测  ;
y_pred = model.predict(X_test)  
  
将概率转换为二进制预测(0 或 1)  ;
y_pred_binary = np.round(y_pred)  
  
# 计算模型预测的准确性  ;
accuracy = accuracy_score(y_test, y_pred_binary)  
print(
"Accuracy:", accuracy)  

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

Accuracy: 0.8235294117647058

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