引言
逻辑回归(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曲线数据
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 个机器学习知识点视频讲解!我会提供所有的教学视频、实战代码,并提供社群一对一交流和直播答疑!
扫描下方二维码,加入学习!
点击「阅读原文」即刻报名,一顿午饭钱,值了。