一、引言
在机器学习和数据科学领域,对分类模型的性能进行评估是至关重要的。本文将介绍常见的分类模型评估指标,包括准确率、精确率、召回率和F1值等,并深入探讨ROC曲线和PR曲线的概念及其差异。最后,我将通过绘制不同模型下的ROC曲线和PR曲线,并对其进行详细分析,来进一步理解这些评估工具在模型调优中的实际应用。
二、常见的分类模型评估指标
2.1 准确率(Accuracy)
定义:准确率是指模型正确分类的样本数占总样本数的比例。
公式:准确率 = (TP + TN) / (TP + FP + TN + FN)
优点:简单直观,易于理解。
缺点:当不同类别的样本数量不平衡时,准确率可能不能真实反映模型性能。
2.2 精确率(Precision):
定义:精确率是指模型预测为正例的样本中,真正为正例的比例。
公式:精确率 = TP / (TP + FP)
意义:反映模型预测为正例的可靠性。
2.3 召回率(Recall):
定义:召回率是指实际为正例的样本中,被模型正确预测为正例的比例。
公式:召回率 = TP / (TP + FN)
意义:反映模型找到所有正例的能力。
2.4 F1值(F1 Score):
定义:F1值是精确率和召回率的调和平均数,用于综合评估模型的性能。
公式:F1值 = 2 * (精确率 * 召回率) / (精确率 + 召回率)
优点:能够平衡精确率和召回率,给出一个综合的性能指标。
2.5 AUC-ROC(Area Under the Curve - Receiver Operating Characteristic):
定义:AUC-ROC是通过计算ROC曲线下的面积来评估模型性能。ROC曲线是以真正例率(TPR)为纵轴,假正例率(FPR)为横轴绘制的。
意义:AUC-ROC越接近1,说明模型的性能越好。它不受正负样本比例的影响,因此在类别不平衡的情况下也很有效。
2.6 AUPRC(Area Under the Precision-Recall Curve):
定义:AUPRC是PR曲线(精确率-召回率曲线)下的面积。
意义:AUPRC更注重在高召回率下的精确率,对于某些应用中可能更加重要。
2.7 混淆矩阵(Confusion Matrix):
定义:混淆矩阵是一个表格,用于展示模型分类结果的详细情况,包括真正例(TP)、假正例(FP)、真反例(TN)和假反例(FN)。
意义:通过混淆矩阵,我们可以计算上述的评估指标,并深入了解模型的分类性能。
2.8 PR曲线
我们知道,分类模型的最后输出往往是一个概率值,我们一般需要把概率值转换为具体的类别,对于二分类来说,我们设置一个阈值(threshold),然后大于此阈值判定为正类,反之负类。
以上评价指标(Accuracy、Precision、Recall)都是针对某个特定阈值来说的,那么当不同模型取不同阈值时,如何全面的评价不同模型?而P-R曲线则是描述精确率和召回率变化的曲线。
PR曲线中的P代表的是precision(精准率),R代表的是recall(召回率),其代表的是精准率与召回率的关系,一般情况下,将recall设置为横坐标,precision设置为纵坐标。
绘制步骤为:
PR曲线的横坐标为召回率R,纵坐标为精确率P
1.将预测结果按照预测为正类概率值排序
2.将阈值由1开始逐渐降低,按此顺序逐个把样本作为正例进行预测,每次可以计算出当前的P,R值
3.以P为纵坐标,R为横坐标绘制图像
2.9 AUC/ROC曲线
AUC的全拼是Area under the Curve,即曲线下的面积。
ROC(Receiver Operating Characteristic)曲线,又称接受者操作特征曲线。ROC 曲线是基于混淆矩阵得出的。AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类。
ROC曲线的横坐标为假阳性率( False Positive Rate, FPR),即将负例错分为正例的概率 ,医学上称为误诊率; 纵坐标为真阳性率( True Positive Rate, TPR),将正例分对的概率。
横坐标:
纵坐标:
在ROC曲线中,设置不同的阈值,会得到不同的TPR和FPR,而随着阈值的逐渐减小,越来越多的实例被划分为正类,但是这些正类中同样也掺杂着负类,即TPR和FPR会同时增大。
阈值最大时,所有的正样本预测为负样本,所有的负样本也预测为负样本,即分子都为0,所以FPR = 0, TPR = 0 ,对应坐标点为(0,0)。
阈值最小时,所有的负样本预测为正样本,所有的正样本也预测为正样本,即 FPR = 1, TPR = 1,对应坐标点(1,1)。
而当FPR = 0, TPR = 1时为最优分类点,分类器对应的ROC曲线应该尽可能靠近坐标轴的左上角,而对角线的位置意味着分类器的效果和随机猜测一样的差。
ROC曲线在测试集中的样本分布发生变化的时候能够保持不变。 但遗憾的是,很多时候, ROC 曲线并不能清晰的说明哪个分类器的效果更好, 而 AUC 恰恰能够对分类器做出直观的评价。
AUC-ROC曲线下的面积(area under the curve)
AUC 为ROC 曲线下的面积, 这个面积的数值介于0到1之间, 能够直观的评价出分类器的好坏, AUC的值越大, 分类器效果越好。
AUC = 1: 完美的分类器,采用该模型,不管设定什么阈值都能得出完美预测(绝大多数时候不存在)
0.5 < AUC < 1: 优于随机猜测,分类器好好设定阈值的话,有预测价值
AUC = 0.5: 跟随机猜测一样,模型没有预测价值
AUC < 0.5 :比随机猜测还差,但是如果反着预测,就优于随机猜测。
绘制步骤:
1.假设已经得出一系列样本被划分为正类的概率Score值,按照大小排序。
2.从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于某个样本,其“Score”值为0.6,那么“Score”值大于等于0.6的样本都被认为是正样本,而其他样本则都认为是负样本。
3.每次选取一个不同的threshold,得到一组FPR和TPR,以FPR值为横坐标和TPR值为纵坐标,即ROC曲线上的一点。
4.根据3中的每个坐标点,画图。
三.不同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)实验截图
四、总结
本博客介绍了常见的分类模型评估指标和ROC曲线、PR曲线的概念与差异,并通过绘制不同模型方法的ROC曲线和PR曲线进行了性能比较。这些评估工具和方法帮助我更全面地了解模型的性能特点,为模型的调优和选择提供了有力支持。在未来的学习和实践中,我将继续探索更多评估方法和工具,以不断提升分类模型的性能和应用效果。