二分类评估指标(F1-score,AUC(ROC曲线))

本文深入解析了二分类问题中模型评估的重要概念,包括混淆矩阵、查准率(P)、查全率(R)、F1-score及AUC(ROC曲线)等关键指标。详细解释了这些指标如何帮助理解分类器的表现,尤其是在面对类不平衡问题时的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

评估基础介绍

-------对于二分类问题,可将样例根据其真实类别与学习器(分类器)预测的类别的组合划分为 真正例(true positive),假正例(false positive),真反例(true negative),假反例(false negative) 四种情况,令TP,FP,TN,FN分别表示其对应的样例数。
TP + FP + TN +FN = 样例总数

混淆矩阵(confusion matrix) :它可以帮助人们更好地了解分类中的错误,如果混淆矩阵中的非对角线元素均为0,就会得到一个近乎完美的分类器。

真实情况预测结果预测结果
-----------正例反例
正例TP(真正例)FN(假反例)
反例FP(假正例)TN(真反例)

F1-score

-----查准率(精确率)P
P = TP/(TP + FP)
即是分类器分类结果中,真正例占总的分类为正例的比例
----查全率(召回率)R
R = TP/ (TP + FN)
即是分类器分类结果中的真正例占样本中总的正例的比例
R体现了模型对正样本的识别能力,P体现了模型对负样本的区分能力,F1-score则为两者的综合.

F1 = 2PR/(P + R) = 2TP/ (2TP + FN + FP )

AUC(ROC曲线)

-----在二分类任务中,我们根据学习器(分类器)的预测结果对样例进行排序,按此顺序逐个将样本作为正例进行预测,每次计算出 真正例率(true positive rate,TPR) : (预测为正且实际为正的样本占所有正例样本 的比例) ,以及 假正例率(false positive rate,FPR) : (预测为正但实际为负的样本占所有负例样本 的比例) ,并以它们分别作为纵坐标,横坐标,得到 ROC (Receiver Operating Characteristic) 曲线。

                         TPR  = TP / (TP + FN)
                         FPR  = FP / (TN + FP)

在这里插入图片描述

**AUC (Area Under Curve) **被定义为ROC曲线下的面积.
首先AUC值是一个概率值,当你随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。
从AUC判断分类器(预测模型)优劣的标准:

AUC = 1是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。
0.5 < AUC < 1优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
AUC = 0.5跟随机猜测一样(例:丢铜板),模型没有预测价值。
AUC < 0.5比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

ROC曲线的面积,即AUC值越大,分类器分类结果越好

因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。

AUC计算 参考 AUC,ROC我看到的最透彻的讲解

好的,以下是一份基于PandasScikit-learn库的逻辑回归预测模型评价代码示例,包括绘制二分类混淆矩阵、计算精确率与召回率、F1-scoreROC曲线AUC指标: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, f1_score, roc_curve, roc_auc_score # 1. 数据读取与处理 data = pd.read_csv('data.csv') X = data.drop('target', axis=1) y = data['target'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 2. 模型训练 model = LogisticRegression() model.fit(X_train, y_train) # 3. 模型预测 y_pred = model.predict(X_test) y_prob = model.predict_proba(X_test)[:, 1] # 4. 绘制二分类混淆矩阵 confusion_mat = confusion_matrix(y_test, y_pred) plt.imshow(confusion_mat, cmap=plt.cm.Blues) plt.title('Confusion Matrix') plt.colorbar() tick_marks = np.arange(2) plt.xticks(tick_marks, ['0', '1']) plt.yticks(tick_marks, ['0', '1']) plt.xlabel('Predicted Label') plt.ylabel('True Label') for i in range(2): for j in range(2): plt.text(j, i, confusion_mat[i, j], ha='center', va='center', color='white' if confusion_mat[i, j] > confusion_mat.max() / 2 else 'black') plt.show() # 5. 计算精确率、召回率F1-score precision = precision_score(y_test, y_pred) recall = recall_score(y_test, y_pred) f1 = f1_score(y_test, y_pred) # 6. 计算AUC指标绘制ROC曲线 auc = roc_auc_score(y_test, y_prob) fpr, tpr, thresholds = roc_curve(y_test, y_prob) plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % auc) plt.plot([0, 1], [0, 1], 'k--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('ROC Curve') plt.legend(loc="lower right") plt.show() # 7. 输出结果 print('Precision:', precision) print('Recall:', recall) print('F1-score:', f1) print('AUC:', auc) ``` 这份代码使用了Pandas库读取了名为"data.csv"的数据集,并将其分成训练集测试集,使用Scikit-learn库中的LogisticRegression类进行模型训练预测,最后通过Scikit-learn库中的指标函数计算了预测结果的精确率、召回率、F1-scoreAUC指标,同时绘制了二分类混淆矩阵ROC曲线。需要注意的是,上述代码仅作为示例,具体实现需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值