实验三——分类模型评估指标

本文详细介绍了混淆矩阵、准确率、精确率、召回率、F1分数、ROC曲线和PR曲线的概念、计算方法以及它们在评估分类模型性能中的作用。特别讨论了ROC曲线与PR曲线的差异,并通过KNN算法实例展示了不同k值对ROC曲线的影响。结论指出,k=3时的KNN模型适合预测鸢尾花数据,AUC值越大表示模型性能越好。
摘要由CSDN通过智能技术生成

目录

一、概念引入

1)混淆矩阵

2)灵敏度,特异度,真正率,假正率

二、常见的分类模型评估指标及其计算方法

1)准确率 – Accuracy 

2)精确率(差准率)- Precision

3)召回率(查全率)- Recall

4)F1分数

5)ROC曲线

6)PR曲线

三、ROC曲线与PR曲线

1)ROC曲线

1、什么是ROC曲线

2、如何绘制ROC曲线

3、如何判断ROC曲线的好坏

2)PR曲线

1、什么是PR曲线

2、如何绘制PR曲线

3、如何判断PR曲线的好坏

3)ROC曲线与PR曲线的差异

1、评估目标不同:

2、适用场景不同:

3、曲线形状与意义不同:

四、不同k值之下的ROC曲线

五、实验总结


一、概念引入

1)混淆矩阵

针对一个二分类问题,可将实例分成正类(positive)或负类(negative),我们用N和P代替0和1,T和F表示预测正确和错误。将他们两两组合,就形成了下图所示的混淆矩阵。

所以有:

(1)若一个实例是正类,并且被预测为正类,即为真正类TP(True Positive )

(2)若一个实例是正类,但是被预测为负类,即为假负类FN(False Negative )

(3)若一个实例是负类,但是被预测为正类,即为假正类FP(False Positive )

(4)若一个实例是负类,并且被预测为负类,即为真负类TN(True Negative )

混淆矩阵的每一行是样本的预测分类,每一列是样本的真实分类(反过来也可以)。

2)灵敏度,特异度,真正率,假正率

        灵敏度(Sensitivity) = TP/(TP+FN)

        特异度(Specificity) = TN/(FP+TN)

        真正率(TPR,True Positive Rate) = 灵敏度 = TP/(TP+FN)

        假正率(FPR,False Positive Rate) = 1- 特异度 = FP/(FP+TN)

二、常见的分类模型评估指标及其计算方法

1)准确率 – Accuracy 

定义:对于给定的测试集,分类模型正确分类的样本数与总样本数之比;

 Accuracy=\frac{TP+TN}{TP+TN+FP+FN}

2)精确率(差准率)- Precision

定义:对于给定测试集的某一个类别,分类正确的正样本个数占分类器判定为正样本的样本    个数的比例。

Precision=\frac{TP}{TP+FP}

3)召回率(查全率)- Recall

定义:对于给定测试集的某一个类别,分类正确的正样本个数占真正的正样本个数的比例。

Recall=\frac { TP }{ TP+FN}

4)F1分数

定义:又称为平衡F分数(BalancedScore),它被定义为精确率和召回率的调和平均数。

F1=\frac{2}{\frac{1}{Precision}+\frac{1}{Recall}}=2*\frac{Precision*Recall}{Precision+Recall}

5)ROC曲线

6)PR曲线

ROC 和 AUC 是2个更加复杂的评估指标。由以下给出具体的解释内容。

三、ROC曲线与PR曲线

ROC曲线和PR曲线都是用来衡量分类器分类性能的好坏的标准

1)ROC曲线

1、什么是ROC曲线

ROC(Receiver Operating Characteristic)曲线,又称接受者操作特征曲线。该曲线最早应用于雷达信号检测领域,用于区分信号与噪声。后来人们将其用于评价模型的预测能力,ROC 曲线是基于混淆矩阵得出的。

2、如何绘制ROC曲线

ROC 曲线中的主要两个指标是真正率假正率, 其中横坐标为假正率(FPR),纵坐标为真正率(TPR)。【关于曲线指标的选择可以参考这个博客。】

ROC曲线是由预测概率以及阈值共同决定的,以阈值来进行划分,预测概率大于阈值的为正,小于阈值的为负。例如若设定阈值为0.7,概率大于等于0.7的为正类,小于0.7的为负类。对应的就可以算出一组(FPR,TPR),从而在平面中得到其对应的坐标点。由此可见,选择不同的阈值,就会在平面坐标上形成许多不同的点,将这些点连接起来就是ROC曲线。ROC曲线的横坐标和纵坐标其实是没有相关性的,所以不能把ROC曲线当做一个函数曲线来分析,应该把ROC曲线看成无数个点,每个点都代表一个分类器,其横纵坐标表征了这个分类器的性能。随着阈值的逐渐减小,越来越多的实例被划分为正类,但是这些正类中同样也掺杂着真正的负实例,即TPR和FPR会同时增大。阈值最大时,对应坐标点为(0,0),阈值最小时,对应坐标点(1,1)。

3、如何判断ROC曲线的好坏

ROC的横纵坐标分别是FPR和TPR,FPR代表假正率,通俗来讲就是分类器将假样本误判为正样本的概率,而TPR则是指正确判断样本为正样本的概率。由此可见TPR 越高,同时 FPR 越低(即 ROC 曲线越陡),判断的准确度越高,那么模型的性能就越好。

2)PR曲线

1、什么是PR曲线

PR曲线就是精确率(Precision)召回率(Recall )曲线,以Recall作为横坐标轴,Precision作为纵坐标轴,PR曲线代表的是精确率与召回率的关系。

2、如何绘制PR曲线

同理ROC曲线。在模型预测的时候,我们输出的预测结果是一堆[0,1]之间的数值,怎么把数值变成二分类?设置一个阈值,大于这个阈值的值分类为1,小于这个阈值的值分类为0。PR曲线就是我们从[0,1]设置一堆阈值,每个阈值得到一个(Recall,Presession)对,纵轴为Presession,横轴为Recall,把所有的(Recall,Presession)连起来就得到了PR曲线。

3、如何判断PR曲线的好坏

如果一个学习器的P-R曲线被另一个学习器的P-R曲线完全包住,则可断言后者的性能优于前者,例如上面的A和B优于学习器C。但是A和B的性能无法直接判断,我们可以根据曲线下方的面积大小来进行比较,但更常用的是平衡点或者是F1值。平衡点(BEP)是P=R时的取值,如果这个值较大,则说明学习器的性能较好。同样,F1值越大,我们可以认为该学习器的性能较好。

3)ROC曲线与PR曲线的差异

ROC曲线和PR曲线都是用于评估分类模型性能的可视化工具,但它们之间存在明显的差异。

1、评估目标不同:

ROC曲线主要关注真正例率(TPR)和假正例率(FPR),通过在不同阈值下绘制TPR和FPR的点并连接成线来展示模型性能。而PR曲线则关注查准率和查全率,展示模型在不同召回率水平下的精度表现。

2、适用场景不同:

ROC曲线假设正负样本的先验概率相等,因此适用于处理类别均衡的数据集。而PR曲线则假设正样本的先验概率远大于负样本的先验概率,因此在处理类别不平衡的数据集时更为合适。

3、曲线形状与意义不同:

一个理想的分类器应该具有接近左上角的ROC曲线,这意味着模型在高召回率的同时保持低假正例率。而PR曲线则可能随着召回率的增加而逐渐下降,因为随着更多样本被预测为正例,查准率通常会降低。通过观察PR曲线的形状和变化趋势,我们可以了解模型在不同召回率水平下的精度表现。

四、不同k值之下的ROC曲线

1)具体代码

(其中大部分代码片段与实验二即上一篇《实验二KNN算法》是相似的

   在预测完数据集后再编写ROC曲线部分的代码)

  • 导入所需要用到的库

sklearn.metrics.roc_curve()函数是用于计算二分类问题中的接收者操作特征曲线(ROC 曲线)以及对应的阈值。

aucsklearn.metrics.auc():计算ROC曲线下的面积.即图中的area。

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve
from sklearn.metrics import auc
import matplotlib.pyplot as plt
from sklearn import datasets 
  • 导入iris数据集并训练分类器

仍然设置训练集和测试集的各占70%与30%

训练knn分类器——knn = KNeighborsClassifier(n_neighbors = N)

N设置为1,2,3,4...以表示不同k值的knn算法下的分类

iris = datasets.load_iris()  # 将鸢尾花数据存在iris中
iris_X = iris.data  # 指定训练数据iris_X
iris_y = iris.target  # 指定训练目标iris_y
x_train, x_test, y_train, y_test = train_test_split(iris_X, iris_y, test_size=0.3)

knn = KNeighborsClassifier(n_neighbors = 4)
knn.fit(x_train, y_train)  # 训练KNN分类器
  • ROC曲线画法

计算fpr,tpr以计算roc曲线所需用到的轴的数值

y_scores = knn.predict_proba(X_test)
fpr, tpr, threshold = roc_curve(y_test, y_scores[:, 1])
roc_auc = auc(fpr, tpr)
  • 画出ROC曲线

plt.title('Receiver Operating Characteristic')
plt.plot(fpr, tpr, 'b', label = 'AUC = %0.2f' % roc_auc)
plt.legend(loc = 'lower right')
plt.plot([0, 1], [0, 1],'r--')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.title('ROC Curve of kNN')
plt.show()

2)实验截图

k=1

 

k=2

 

k=3

 

k=4

五、实验总结

  • 鸢尾花数据集仅含150条数据,k值的变化对其准确率的影响并不大,因此在对其进行k值变化的时候,不同k值下的ROC曲线的变化并没有很明显。
  • 通过不同k值的比较,可以发现k=3时,ROC曲线下的面积最大为0.97,因此k=3的模型更适合于预测鸢尾花的数据。
  • ROC曲线(类似于PR曲线的另一种曲线)中,越接近左上角的曲线越好
  • AUC (Area under Curve):ROC曲线下的面积,介于0.1和1之间,作为数值可以直观的评价分类器的好坏,值越大越好。

参考博客:

https://zhuanlan.zhihu.com/p/110015537

https://blog.csdn.net/ema1997/article/details/107027611

  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

萍萍无奇a

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

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

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

打赏作者

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

抵扣说明:

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

余额充值