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 行和四列(feature1、feature2、feature3 和 target)的数据框。其中 feature1 和 feature2 是连续变量,feature3 是具有整数值的分类变量。target 是一个二元目标变量。

#Set seed for reproducibility np.random.seed(42) #Create a DataFrame with random data data = pd.DataFrame({ 'feature1': np.random.rand(100), #100 random numbers between 0 and 1 'feature2': np.random.rand(100), #100 random numbers between 0 and 1 'feature3': np.random.randint(0, 10, size=100), #100 random integers between 0 and 9 'target': np.random.randint(0, 2, size=100) #Binary target variable (0 or 1) }) print(data.head())

上述代码的结果为:

Dummy Data for Binary Classification

步骤 3:分割数据

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

#Split the data into training and testing sets X = data.drop('target', axis=1) #Features y = data['target'] #Target variable 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 用于评估。

#Create a LightGBM dataset train_data = lgb.Dataset(X_train, label=y_train) test_data = lgb.Dataset(X_test, label=y_test, reference=train_data)

步骤 5:设置 LightGBM 参数

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

#Set LightGBM parameters params = { 'objective': 'binary', #Binary classification task 'metric': 'binary_error', #Evaluation metric 'boosting_type': 'gbdt', #Gradient Boosting Decision Tree 'num_leaves': 31, #Number of leaves in one tree 'learning_rate': 0.05, #Step size for each iteration 'feature_fraction': 0.9 #Fraction of features used for each iteration }

步骤 6:训练模型

使用给定的参数训练 LightGBM 模型。早停用于在 10 轮内没有观察到改进时停止训练。

#Train the model with early stopping bst = lgb.train(params, train_data, valid_sets=[test_data], early_stopping_rounds=10)

步骤 7:预测和评估

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

#Predict and evaluate the model y_pred = bst.predict(X_test, num_iteration=bst.best_iteration) #Predict probabilities y_pred_binary = [1 if x > 0.5 else 0 for x in y_pred] #Convert probabilities to binary predictions accuracy = accuracy_score(y_test, y_pred_binary) #Calculate accuracy print(f"Accuracy: {accuracy:.2f}")

这将产生以下结果

Accuracy: 0.50

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

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

总结

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

广告