LightGBM算法详解与Python实现

机器学习领域,梯度提升算法因其出色的性能而广受赞誉。其中,LightGBM(Light Gradient Boosting Machine)算法以其高效性和可扩展性而脱颖而出。尽管如此,当处理具有大量特征的数据集时,模型的效率和可扩展性可能会受到影响,因为每个特征都需要扫描所有数据实例以估计潜在的分割点,这一过程既耗时又繁琐。

为了解决这一问题,LightGBM算法采用了两种技术:基于梯度的单边采样(Gradient-based One-Side Sampling, GOSS)和独家特征捆绑(Exclusive Feature Bundling, EFB)。GOSS实际上排除了具有小梯度的数据部分,只使用剩余的数据来估计整体信息增益。具有大梯度的数据实例在计算信息增益方面扮演着更重要的角色,GOSS即使使用比其他模型更小的数据集,也能获得具有显著信息增益的准确结果。

EFB技术将互斥特征捆绑在一起,这些特征很少会同时取非零值,从而减少特征数量。这在不牺牲分割点准确性的情况下,对有效特征消除产生了影响。

学习目标:

理解LightGBM的核心原理和优势;学习如何在Python中实现LightGBM进行分类任务;解释LightGBM的特征重要性和评估指标;比较LightGBM与其他梯度提升算法的性能。

LightGBM(Light Gradient Boosting Machine)简介:

LightGBM是一个强大的、高效的开源梯度提升框架,专为机器学习设计,特别适用于处理大型数据集,并在速度和内存使用方面表现出色。LightGBM继续训练使用梯度提升技术,结合多个弱学习器(通常是决策树)来创建一个强大的预测模型。

LightGBM背后的数学原理:

使用一个称为判决树的概念,以便将函数从输入空间X压缩到梯度空间G。假设有一个训练集,其中包含实例x1, x2,直到xn,每个元素都是空间X中的一个具有s维的向量。在梯度提升的每次迭代中,所有负梯度相对于输出模型的损失函数分别表示为g1, g2,直到gn。决策树实际上在每个节点上分割最显著的特征,这也导致了最大证据增益的产生。在这种模型中,数据改进可以通过分离后的方差来衡量,可以用以下公式表示:

Y = Base_tree(X) - lr*Tree1(X) - lr*Tree2(X) - lr*Tree3(X)

考虑一个特定节点的决策树的训练数据集O。分割度量j在点d的方差增益定义如下:

Gradient One-Sided Sampling or GOSS utilizes every instance with a larger gradient and does the task of random sampling on the various instances with the small gradients. The training dataset is represented by the symbol O for each specific node of the Decision tree. The variance gain of j, or the dividing measure at point d for the node, is expressed as:

Python中实现LightGBM:

要安装LightGBM Python模型,可以使用Python pip函数,运行命令“pip install lightgbm”。此外,LGBM支持自定义API,可以实施分类器和回归算法。两个模型的运作方式相似。以下代码将使用泰坦尼克号乘客数据集,该数据集可在此处找到。

import lightgbm as lgb import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn import metrics # 加载数据: data = pd.read_csv("SVMtrain.csv") print(data.info()) print(data.head()) # 训练-测试拆分--- x = data.drop(['Embarked','PassengerId'],axis=1) y = data.Embarked print("x 数据集:---") print(x.head()) print("y 数据集:---") print(y.head())

在这里,可以看到有8列,其中乘客ID将被丢弃,而登船将被最终选择作为以下分类挑战的目标变量。

# 定义输入和输出特征 x = data.drop(['Embarked','PassengerId'],axis=1) y = data.Embarked # 训练和测试拆分 x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.33,random_state=42) # 初始化模型: model = lgb.LGBMClassifier(learning_rate=0.09,max_depth=-5,random_state=42) model.fit(x_train,y_train,eval_set=[(x_test,y_test),(x_train,y_train)], verbose=20,eval_metric='logloss')

由于模型实例非常少,需要首先检查过拟合,然后进行下一步:

print('Training accuracy {:.4f}'.format(model.score(x_train,y_train))) print('Testing accuracy {:.4f}'.format(model.score(x_test,y_test)))

从混淆矩阵和分类报告中,可以看到模型在预测类别1时存在困难,因为实例很少,但如果将这个结果与其他各种集成算法进行比较,那么LGBM的性能是最好的。也可以为回归器模型执行相同的过程,但需要将估计器更改为LGBMRegressor()。

LightGBM在机器学习领域被证明是一个强大的工具,提供了速度、内存效率和准确性方面的优势。其创新技术如GOSS和EFB使其能够有效处理大型数据集,同时保持高性能。如上所示的LightGBMPython的实际实现展示了LightGBM的易用性和可解释性,通过内置的可视化工具。虽然它在许多场景中表现出色,但用户在选择LightGBM继续训练和其他算法时应考虑数据集特征和特定要求。总体而言,LightGBM是数据科学家解决复杂预测建模任务的宝贵资产。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485