问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

逻辑回归等分类模型的5大评估指标

创作时间:
作者:
@小白创作中心

逻辑回归等分类模型的5大评估指标

引用
CSDN
1.
https://blog.csdn.net/csdn1561168266/article/details/144016682

逻辑回归是一种常用的分类算法,其核心思想是通过一个线性模型来预测事件发生的概率,并使用逻辑函数(Sigmoid 函数)将结果映射到 [0, 1] 之间。本文将详细介绍逻辑回归模型的5大评估指标:准确率、精确率、召回率、F1分数以及ROC-AUC曲线,并通过Python代码实现这些指标的计算。

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

1.1 准确率 (Accuracy)

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

$$
准确率 = \frac{TP + TN}{TP + TN + FP + FN}
$$

  • TP(True Positive):模型正确预测的正例数量。
  • TN(True Negative):模型正确预测的负例数量。
  • FP(False Positive):模型错误预测为正例的负例数量(即假阳性)。
  • FN(False Negative):模型错误预测为负例的正例数量(即假阴性)。

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

1.2 精确率 (Precision)

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

$$
精确率 = \frac{TP}{TP + FP}
$$

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

1.3 召回率 (Recall)

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

$$
召回率 = \frac{TP}{TP + FN}
$$

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

1.4 F1分数 (F1 Score)

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

$$
F1分数 = 2 \times \frac{精确率 \times 召回率}{精确率 + 召回率}
$$

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=0且FPR=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 np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from 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曲线数据和AUC值,并绘制ROC曲线:

# 计算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曲线各自有不同的适用场景。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号