LightGBM - 二元分类

什么是二元分类?

将数据分为两组或两类是二元分类的目标,二元分类是一种机器学习问题。通过二元分类,模型可以预测两种可能的结果之一。例如,垃圾邮件过滤器可以将电子邮件识别为"垃圾邮件"或"非垃圾邮件"。

两类标记数据中的一类用于训练模型。通过识别数据中的模式,模型可以区分两组。该模型对新的未知数据进行分类。

二元分类的评估指标

分析二元分类时使用以下指标 −

  • 准确率:它被定义为所有正确预测的百分比。

  • 精确率:所有正预测中真正成为真正预测的部分称为精确率。

  • 召回率:召回率(敏感度)是真正预测在所有真实正预测中所占的比例。

  • F1 分数:F1 分数是召回率和精确率的调和平均值。

  • 接收者操作特性 - 曲线下面积:ROC-AUC 测量模型区分两个类别的能力。

二元分类示例

以下是二元分类任务的一些示例 −

  • 电子邮件过滤:电子邮件过滤意味着对电子邮件进行分类,例如邮件是"垃圾邮件"还是"非垃圾邮件"。

  • 疾病诊断:疾病诊断意味着检查患者是否患有疾病,结果是阳性还是阴性。

  • 情绪分析:情绪分析意味着将客户评论分类为"正面"或"负面"。

二元分类的实现

以下是使用 LightGBM 创建基本二元分类所需遵循的步骤−

步骤 1:导入库

Python 库允许我们使用一行代码来处理数据并执行基本和复杂的任务。使用以下库进行数据操作、机器学习和评估。

import pandas as pd
import numpy as np
import lightgbm as lgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

步骤 2:创建虚拟数据集

创建一个具有 100 行和 4 列(feature1、feature2、feature3 和 target)的 DataFrame。这里 feature1 和 feature2 是连续变量,feature3 是具有整数值的分类变量。目标是二进制目标变量。

#设置种子以实现可重复性
np.random.seed(42)

#使用随机数据创建 DataFrame
data = pd.DataFrame({
    'feature1': np.random.rand(100),#100 个 0 到 1 之间的随机数
    'feature2': np.random.rand(100),#100 个 0 到 1 之间的随机数
    'feature3': np.random.randint(0, 10, size=100),#100 个 0 到 9 之间的随机整数
    'target': np.random.randint(0, 2, size=100) #二元目标变量(0 或 1)
})

print(data.head())

上述代码的结果为 −

二元分类的虚拟数据

步骤 3:拆分数据

将数据集分为训练集和测试集。本例中 30% 的数据将用于测试,而 70% 用于训练。

#将数据拆分为训练集和测试集
X = data.drop('target', axis=1) #特征
y = data['target'] #目标变量
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

步骤 4:创建 LightGBM 数据集

将训练和测试数据转换为 LightGBM 特定格式。 train_data用于训练,test_data用于评估。

#创建LightGBM数据集
train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test, reference=train_data)

第5步:设置LightGBM参数

定义LightGBM模型的目标函数、度量和其他超参数。

#设置LightGBM参数
params = {
    'objective': 'binary', 		#二元分类任务
    'metric': 'binary_error', 	#评估指标
    'boosting_type': 'gbdt', 	#梯度提升决策树
    'num_leaves': 31, 			#树的叶子数量
    'learning_rate': 0.05, 		#每次迭代的步长
    'feature_fraction': 0.9 	#每次迭代使用的特征比例
}

第 6 步:训练模型

使用给定的参数训练 LightGBM 模型。如果 10 轮训练后没有看到任何改善,则使用提前停止来停止训练。

#使用提前停止来训练模型
bst = lgb.train(params, train_data, valid_sets=[test_data], early_stopping_rounds=10)

第 7 步:预测和评估

对测试集做出一些假设,将预期概率转换为二进制值,然后评估模型的准确性。

#预测和评估模型
y_pred = bst.predict(X_test, num_iteration=bst.best_iteration) 	#预测概率
y_pred_binary = [1 if x > 0.5 else 0 for x in y_pred] 			#将概率转换为二元预测
accuracy = accuracy_score(y_test, y_pred_binary) 				#计算准确率

print(f"Accuracy: {accuracy:.2f}")

这将产生以下结果:

Accuracy: 0.50

准确率分数将显示 LightGBM 模型在测试集上的表现。由于数据集是随机创建的,准确率可能不是很高;预计接近 0.5。

摘要

LightGBM 是一种解决二元分类问题的有效方法。它对于具有高维特征的大型数据集非常有用。其处理分类特征的集成方法最大限度地减少了预处理工作量。