全面盘点逻辑回归模型的 5 大评估指标

科技   2024-11-01 14:39   安徽  

引言

逻辑回归(Logistic Regression)是一种常用的分类算法。它的核心思想是通过一个线性模型来预测事件发生的概率,并使用逻辑函数(Sigmoid 函数)将结果映射到 [0, 1] 之间。

在这篇文章中,我们将深入讨论逻辑回归模型的评估指标,包括准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1分数(F1 Score)以及ROC-AUC曲线。

1. 常见的逻辑回归模型评估指标

1.1 准确率 (Accuracy)

准确率是最常见的评估指标,它计算正确预测的比例。公式如下:


其中:

TP (True Positive):模型正确预测的正例数量。

TN(True Negative):模型正确预测的负例数量。

FP (False Positive):模型错误预测为正例的负例数量(即假阳性)。

FN(False Negative)模型错误预测为负例的正例数量(即假阴性)。

准确率在数据集不平衡的情况下并不总是有效。例如,如果正类样本非常少,模型只需预测所有样本为负类,准确率可能仍然很高,但模型实际表现不佳。

1.2 精确率 (Precision)

精确率衡量的是在所有被预测为正例的样本中,真实为正例的比例。公式如下:

精确率关注的是当模型预测一个样本为正时,它有多大的概率是真的正例。精确率适用于对“假阳性”非常敏感的场景。

1.3 召回率 (Recall)

召回率衡量的是所有真实为正例的样本中,模型正确识别出来的比例。公式如下:

召回率侧重于衡量模型是否找到了尽可能多的正例,适用于对“假阴性”敏感的场景。高召回率意味着大多数的正例样本被正确识别。

1.4 F1分数 (F1 Score)

F1分数是精确率和召回率的调和平均值,综合考虑了两者。它的公式如下:

F1分数在精确率和召回率之间取得了平衡,适用于不平衡数据集或者当你希望同时优化精确率和召回率的场景。

1.5 ROC-AUC曲线

ROC曲线(Receiver Operating Characteristic Curve)用于评估分类模型的整体表现,它展示了假阳性率(False Positive Rate, FPR)与真正例率(True Positive Rate, TPR)的关系。

TPR(真正例率)表示在所有实际为正类的样本中,模型正确识别出正类的比例。

FPR(假阳性率):表示在所有实际为负类的样本中,模型错误地预测为正类的比例。

逻辑回归模型的输出通常是一个概率值,它表示样本属于正类的概率。我们可以通过设置一个阈值来将概率转换为二元的分类标签(即正类或负类)。

例如,如果我们将阈值设置为0.5,那么模型预测概率大于0.5的样本被分类为正类,反之则为负类。然而,通过调整阈值,模型在预测正类和负类时的表现会有所不同。

ROC曲线就是通过在不同阈值下计算假阳性率和真正例率,然后将这些点连接起来形成的曲线。

  • 当阈值为1时,模型预测所有样本为负类,此时TPR=0FPR=0。

  • 当阈值为0时,模型预测所有样本为正类,此时TPR=1且FPR=1。

  • 中间的阈值则会产生不同的TPR和FPR。


AUC(Area Under Curve)则是ROC曲线下的面积,用来量化模型的整体表现。AUC值越接近1,模型的表现越好。

  • AUC = 1:模型完美分类所有样本,既没有假阳性也没有假阴性。

  • AUC = 0.5:模型表现与随机猜测差不多,没有分类能力。

  • AUC < 0.5:模型的表现甚至不如随机猜测。


2. Python实现逻辑回归模型评估

接下来,我们将使用Python通过一个实际示例来展示如何训练一个逻辑回归模型,并计算上述评估指标。

2.1 导入库

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_curve, auc

2.2 生成数据

为了演示逻辑回归模型,我们将生成一个简单的二分类数据集。

# 生成数据np.random.seed(0)X = np.random.randn(1000, 2)  # 生成1000个二维特征Y = ((X[:, 0] ** 2 + X[:, 1]) > 0.5).astype(int)  # 根据x1^2+x2是否大于0.5生成标签,非线性关系带来一定的分类难度
# 将数据集分为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=42)

2.3 训练逻辑回归模型

# 创建并训练逻辑回归模型model = LogisticRegression()model.fit(X_train, y_train)
# 进行预测y_pred = model.predict(X_test)

2.4 计算评估指标

我们将计算逻辑回归模型的准确率、精确率、召回率、F1分数以及ROC-AUC曲线。

# 计算评估指标accuracy = accuracy_score(y_test, y_pred)precision = precision_score(y_test, y_pred)recall = recall_score(y_test, y_pred)f1 = f1_score(y_test, y_pred)
print(f'准确率: {accuracy:.2f}')print(f'精确率: {precision:.2f}')print(f'召回率: {recall:.2f}')print(f'F1分数: {f1:.2f}')

准确率: 0.78 

精确率: 0.80 

召回率: 0.82 

F1分数: 0.81

2.5 计算并绘制ROC-AUC曲线

# 计算ROC曲线数据y_prob = model.predict_proba(X_test)[:, 1]fpr, tpr, thresholds = roc_curve(y_test, y_prob)
# 计算AUC值roc_auc = auc(fpr, tpr)
# 绘制ROC曲线plt.figure(figsize=(8, 6))plt.plot(fpr, tpr, color='blue', label=f'ROC曲线 (AUC = {roc_auc:.2f})')plt.plot([0, 1], [0, 1], color='red', linestyle='--') # 绘制对角线plt.title('ROC曲线')plt.xlabel('假阳性率 (FPR)')plt.ylabel('真正例率 (TPR)')plt.legend(loc='lower right')plt.grid()plt.show()

3. 应用场景及选择合适的评估指标

准确率适合数据平衡的场景:当正负类数据比例相当时,准确率是一个不错的评估指标。

精确率适用于需要降低误报的场景:如果你的应用场景对假阳性(例如垃圾邮件检测)特别敏感,那么精确率可能是一个更合适的指标。

召回率适用于需要尽可能多捕捉正类的场景:在医疗诊断或安全检测等领域,假阴性代价较高,因此召回率是关键指标。

F1分数适合数据不平衡时的评估:当正负样本比例不均衡时,F1分数可以在精确率和召回率之间取得平衡。

ROC曲线适合不平衡数据集:当正类和负类的样本数量非常不平衡时,准确率可能会误导我们。此时,ROC曲线和AUC能更好地帮助我们评估模型的性能。

总结

逻辑回归是一个非常常见且简单有效的分类算法。在模型评估时,我们可以使用多个指标来全面了解模型的表现。准确率、精确率、召回率、F1分数和ROC-AUC曲线各自有不同的适用场景。

希望这篇文章能够帮助你理解逻辑回归模型的评估指标及其应用。如果你有任何问题,欢迎在评论区留言!

系列文章:

从零开始搭建机器学习开发环境:PyCharm与Anaconda教程

机器学习中的数据预处理:从原始数据到模型输入

深入理解简单线性回归理论与实战

深入理解多项式回归理论与实战

回归模型评估指标

深入浅出梯度下降算法

深入理解逻辑回归算法理论与实战



机器学习100天计划!


视频讲解 + 实战代码 + 社群交流 + 直播答疑


如果你想获得系统性的机器学习理论、代码、实战指导,可以购买我们的《机器学习100天》课程。

《机器学习100天》总共包含 100 个机器学习知识点视频讲解!我会提供所有的教学视频、实战代码,并提供社群一对一交流和直播答疑!

扫描下方二维码,加入学习!


点击阅读原文即刻报名,一顿午饭钱,值了。

AI有道
一个值得关注的 AI 技术公众号。主要涉及人工智能领域 Python、ML 、CV、NLP 等前沿知识、干货笔记和优质资源!我们致力于为您提供切实可行的 AI 学习路线。
 最新文章