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

大家好,逻辑回归(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=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曲线各自有不同的适用场景。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python慕遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值