在机器学习领域,梯度提升算法因其出色的性能而广受赞誉。其中,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是一个强大的、高效的开源梯度提升框架,专为机器学习设计,特别适用于处理大型数据集,并在速度和内存使用方面表现出色。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:
要安装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是数据科学家解决复杂预测建模任务的宝贵资产。