目录
一、概念引入
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
定义:对于给定的测试集,分类模型正确分类的样本数与总样本数之比;
2)精确率(差准率)- Precision
定义:对于给定测试集的某一个类别,分类正确的正样本个数占分类器判定为正样本的样本 个数的比例。
3)召回率(查全率)- Recall
定义:对于给定测试集的某一个类别,分类正确的正样本个数占真正的正样本个数的比例。
4)F1分数
定义:又称为平衡F分数(BalancedScore),它被定义为精确率和召回率的调和平均数。
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)实验截图




五、实验总结
- 鸢尾花数据集仅含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.youkuaiyun.com/ema1997/article/details/107027611