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