分类问题评价指标:精度、召回率、准确率、F1 score、ROC曲线

精度、召回率、准确率、F1 score的概念及ROC曲线

这几个概念是对应于分类问题的评价指标。

首先我们定义如下表格:

.Actual PositiveActual Negative
Predict PositiveTrue Positive (TP)False Positive (FP)
Predict NegativeFalse Negative (FN)True Negative (TN)

其中:

TP表示正确地把正样本预测为正;

FN表示错误地把正样本预测为负;

FP表示错误地把负样本预测为正;

TN表示正确地把负样本预测为负;

如下是几个术语的含义:

Name含义
Accuracy准确率
Precision精度
Recall召回率
F1 scoreF1值

1.Precise:表示正确预测正样本占实际预测为正样本的比例
在这里插入图片描述

2.Recall:表示正确预测正样本占正样本的比例
在这里插入图片描述

3.F1 score:是对精度和召回率的调和平均
在这里插入图片描述

4.Accuracy:表示预测符合标签的样本与总样本的比例
在这里插入图片描述

5.受试者特征曲线(ROC 曲线,Receiver Operating Characteristic curve)
此部分具体可参考此文章

ROC 曲线展示了当改变在模型中识别为正例的阈值时,召回率和精度的关系会如何变化。如果我们有一个用来识别疾病的模型,我们的模型可能会为每一种疾病输出介于 0 到 1 之间的一个分数,为了将某个病人标记为患有某种疾病(一个正例标签),我们为每种疾病在这个范围内设置一个阈值,通过改变这个阈值,我们可以尝试实现合适的精度和召回率之间的平衡。

ROC 曲线在 Y 轴上画出了真正例率(TPR),在 X 轴上画出了假正例率 (FPR)。TPR 是召回率,FPR 是反例被报告为正例的概率。这两者都可以通过混淆矩阵计算得到。

在这里插入图片描述

下图是一个典型的 ROC 曲线:
在这里插入图片描述
通常,当降低阈值时,会沿着曲线向右和向上移动。

我们可以通过计算曲线下面积 ( AUC ) 来量化模型的 ROC 曲线,这是一个介于 0 和 1 之间的度量,数值越大,表示分类性能越好。在上图中,蓝色曲线的 AUC 将大于红色曲线的 AUC,这意味着蓝色模型在实现准确度和召回率的权衡方面更好。随机分类器 (黑线) 实现 0.5 的 AUC。

总结:

对于二分类问题:

真正例(TP):实际上是正例的数据点被标记为正例
假正例(FP):实际上是反例的数据点被标记为正例
真反例(TN):实际上是反例的数据点被标记为反例
假反例(FN):实际上是正例的数据点被标记为反例

召回率和精度衡量指标:

召回率(R):分类模型识别所有相关实例的能力
精度(P):分类模型仅仅返回相关实例的能力
F1 score:使用调和平均结合召回率和精度的指标

召回率和精度的可视化:

混淆矩阵:展示分类模型的真实和预测标签的对应结果。
受试者特征曲线(ROC 曲线):画出真正例率(TPR)和假正例率(FPR),并将此作为模型归类正例阈值的函数。
曲线下面积(AUC):基于 ROC 曲线下方的面积,计算分类模型总体性能的指标。

参考文章:
https://www.jianshu.com/p/1afbda3a04ab
https://blog.csdn.net/wujunlei1595848/article/details/90739786

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对您的问题,以下是一份逻辑回归预测模型的代码示例: ```python import pandas as pd 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_auc_score, roc_curve import matplotlib.pyplot as plt # 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. 模型评价 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) auc = roc_auc_score(y_test, y_prob) # 5. ROC曲线绘制 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() # 6. 输出结果 print('Accuracy:', accuracy) print('Precision:', precision) print('Recall:', recall) print('F1-score:', f1) print('AUC:', auc) ``` 这份代码使用了Pandas库读取了名为"data.csv"的数据集,并将其分成训练集和测试集,使用Scikit-learn库中的LogisticRegression类进行模型训练和预测,最后通过Scikit-learn库中的指标函数计算了预测结果的准确率、精确率、召回率F1-score和AUC指标,同时绘制了ROC曲线。 需要注意的是,上述代码仅作为示例,具体实现需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值