LGBMClassifier:入门指南 - KDnuggets

LGBMClassifier:入门指南 – KDnuggets

源节点: 2793517

LGBMClassifier:入门指南
图片由编辑 
 

有大量的机器学习算法适合对特定现象进行建模。 虽然一些模型利用一组属性来超越其他模型,但其他模型包括弱学习者,利用其余属性为模型提供附加信息,称为集成模型。

集成模型的前提是通过组合不同模型的预测并减少误差来提高模型性能。 有两种流行的集成技术:bagging 和 boosting。 

Bagging,又名 Bootstrapped Aggregation,在训练数据的不同随机子集上训练多个单独的模型,然后对它们的预测进行平均以产生最终预测。 另一方面,Boosting 涉及按顺序训练各个模型,其中每个模型都尝试纠正先前模型所犯的错误。

现在我们已经了解了集成模型的背景信息,让我们双击增强集成模型,特别是 Microsoft 开发的 Light GBM (LGBM) 算法。 

LGBMClassifier 代表光梯度增强机器分类器。 它使用决策树算法进行排名、分类和其他机器学习任务。 LGBMClassifier 使用基于梯度的单侧采样 (GOSS) 和独占特征捆绑 (EFB) 的新技术来准确处理大规模数据,有效提高速度并减少内存使用。

什么是基于梯度的单侧采样 (GOSS)?

传统的梯度增强算法使用所有数据进行训练,这在处理大型数据集时可能非常耗时。 而LightGBM的GOSS则保留所有梯度大的实例,对梯度小的实例进行随机采样。 这背后的直觉是,具有大梯度的实例更难拟合,因此携带更多信息。 GOSS针对梯度较小的数据实例引入了常数乘数,以补偿采样过程中的信息损失。

什么是独家功能捆绑 (EFB)?

在稀疏数据集中,大多数特征为零。 EFB 是一种近乎无损的算法,它捆绑/组合互斥的特征(同时非零的特征)以减少维数,从而加速训练过程。 由于这些特征是“排他性”的,因此保留了原始特征空间,而没有显着的信息丢失。

LightGBM 包可以直接使用 pip(python 的包管理器)安装。 在终端或命令提示符下键入下面共享的命令,将 LightGBM 库下载并安装到您的计算机上:

pip install lightgbm

 

Anaconda 用户可以使用“conda install”命令来安装它,如下所示。

conda install -c conda-forge lightgbm

 

根据您的操作系统,您可以选择使用安装方法 本指南.

现在,让我们导入 LightGBM 和其他必要的库:

import numpy as np
import pandas as pd
import seaborn as sns
import lightgbm as lgb
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split

准备数据集

我们使用流行的泰坦尼克号数据集,其中包含有关泰坦尼克号乘客的信息,目标变量表示他们是否幸存。 您可以从以下位置下载数据集 Kaggle 或者使用以下代码直接从Seaborn加载,如下所示:

titanic = sns.load_dataset('titanic')

 

删除不必要的列,例如“甲板”、“登船镇”和“活着”,因为它们是多余的或对船上任何人的生存没有贡献。 接下来,我们观察到特征“年龄”、“票价”和“登机”有缺失值——请注意,不同的属性是通过适当的统计测量来估算的。

# Drop unnecessary columns
titanic = titanic.drop(['deck', 'embark_town', 'alive'], axis=1) # Replace missing values with the median or mode
titanic['age'] = titanic['age'].fillna(titanic['age'].median())
titanic['fare'] = titanic['fare'].fillna(titanic['fare'].mode()[0])
titanic['embarked'] = titanic['embarked'].fillna(titanic['embarked'].mode()[0])

 

最后,我们使用 pandas 的分类代码将分类变量转换为数值变量。 现在,数据已准备好开始模型训练过程。

# Convert categorical variables to numerical variables
titanic['sex'] = pd.Categorical(titanic['sex']).codes
titanic['embarked'] = pd.Categorical(titanic['embarked']).codes # Split the dataset into input features and the target variable
X = titanic.drop('survived', axis=1)
y = titanic['survived']

训练 LGBMClassifier 模型

要开始训练 LGBMClassifier 模型,我们需要将数据集拆分为输入特征和目标变量,以及使用 scikit-learn 中的 train_test_split 函数进行训练和测试集。

# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

 

让我们对分类数据(“who”)和序数数据(“class”)进行标签编码,以确保为模型提供数值数据,因为 LGBM 不消耗非数值数据。

class_dict = { "Third": 3, "First": 1, "Second": 2
}
who_dict = { "child": 0, "woman": 1, "man": 2
}
X_train['class'] = X_train['class'].apply(lambda x: class_dict[x])
X_train['who'] = X_train['who'].apply(lambda x: who_dict[x])
X_test['class'] = X_test['class'].apply(lambda x: class_dict[x])
X_test['who'] = X_test['who'].apply(lambda x: who_dict[x])

 

接下来,我们将模型超参数指定为构造函数的参数,或者我们可以将它们作为字典传递给 set_params 方法。  

启动模型训练的最后一步是通过创建 LGBMClassifier 类的实例并将其拟合到训练数据来加载数据集。 

params = { 'objective': 'binary', 'boosting_type': 'gbdt', 'num_leaves': 31, 'learning_rate': 0.05, 'feature_fraction': 0.9
}
clf = lgb.LGBMClassifier(**params)
clf.fit(X_train, y_train)

 

接下来,让我们评估训练好的分类器在未见过的或测试数据集上的性能。

predictions = clf.predict(X_test)
print(classification_report(y_test, predictions))

 

 precision recall f1-score support 0 0.84 0.89 0.86 105 1 0.82 0.76 0.79 74 accuracy 0.83 179 macro avg 0.83 0.82 0.82 179
weighted avg 0.83 0.83 0.83 179

超参数调整

LGBMClassifier 通过超参数提供了很大的灵活性,您可以调整这些超参数以获得最佳性能。 在这里,我们将简要讨论一些关键的超参数:

  • 叶子数:这是控制树模型复杂度的主要参数。 理想情况下,num_leaves 的值应小于或等于 2^(max_depth)。
  • 叶子中的最小数据:这是防止叶树过度拟合的重要参数。 它的最佳值取决于训练样本的数量和num_leaves。
  • 最大深度:您可以使用它来显式限制树深度。 最好调整这个参数,以防过度拟合。

让我们调整这些超参数并训练一个新模型:

model = lgb.LGBMClassifier(num_leaves=31, min_data_in_leaf=20, max_depth=5)
model.fit(X_train, y_train)

 

predictions = model.predict(X_test)
print(classification_report(y_test, predictions))

 

 precision recall f1-score support 0 0.85 0.89 0.87 105 1 0.83 0.77 0.80 74 accuracy 0.84 179 macro avg 0.84 0.83 0.83 179
weighted avg 0.84 0.84 0.84 179

 

请注意,超参数的实际调整是一个涉及反复试验的过程,也可能以经验和对提升算法的更深入理解以及您正在处理的业务问题的主题专业知识(领域知识)为指导。

在这篇文章中,您了解了 LightGBM 算法及其 Python 实现。 它是一种灵活的技术,可用于各种类型的分类问题,并且应该成为机器学习工具包的一部分。
 
 
维迪·楚(Vidhi Chugh) 是一名 AI 战略家和数字转型领导者,致力于产品、科学和工程的交叉领域,以构建可扩展的机器学习系统。 她是屡获殊荣的创新领袖、作家和国际演说家。 她的使命是使机器学习民主化并打破行话,让每个人都成为这一转变的一部分。
 

时间戳记:

更多来自 掘金队