一文理解精确率Precision、召回率Recall以及ROC曲线

对于分类模型,常见的模型评价指标有精确率、召回率以及ROC曲线等,看名字不太好理解,下面来仔细分析。

混淆矩阵:

  正样本(预测值) 负样本(预测值) 统计
正样本(真实值) TP(True Positive) FN(False Negative) TP + FN(P)
负样本(真实值) FP(False Positive) TN(True Negative) FP + TN(N)

表中结果分为四类:

  • 真正样 TP(True Positive):预测为正样本的正样本,预测正确体现在True,预测值体现在Positive。

  • 假负样 FN(False Negative):预测为负样本的正样本,预测错误体现在False,预测值体现在Negative。

  • 真负样 TN(True Negative):预测为负样本的负样本。

  • 假负样 FP(False Negative):预测为正样本的负样本。

以此为基础可以得出下列指标:

  • 真正率 TPR(True Positive Rate)又称灵敏度(Sensitivity):预测正确的正样本/正样本总数    TPR = \frac{TP}{TP + FN}
  • 假负率 FNR(False Negative Rate):预测错误的正样本/正样本总数 FNR = \frac{FN}{TP + FN}
  • 真负率TNR(True Negative Rate)又称特异度(Specificity):预测正确的负样本/负样本总数 TNR = \frac{TN}{TN + FP}
  • 假正率FPR(False Positive Rate):预测错误的负样本/负样本总数FPR = \frac{FP}{TN + FP}

最后由混淆矩阵能得到下列指标:

  • 准确率(Accuracy):分类正确的样本数/样本总数 Acc = \frac{TP+TN}{TP + TN+FP+FN}

  • 错误率(Error):分类错误的样本数/样本总数 Error = \frac{FP+FN}{TP + TN+FP+FN}

 

精确率Precision:

又称查准率,能够体现模型分类为正样本的数量中分类正确的比例,分母靠预测值决定。

正样本的预测数/被预测为正样本的数量(包含错误预测为正样本的负样本)P = \frac{TP}{TP + FP}

召回率Recall:

又称查全率,即上述的TPR。

分类正确的样本书/正样本的数量 R = \frac{TP}{TP + FN}

那么按照西瓜书中的解释,精确率就是挑出的西瓜中有多少比例是好瓜,召回率就是所有好瓜中有多少比例被挑出来

总结:

精确率和召回率是一对矛盾的度量,如果希望精确率提高,那么可以让模型阈值提高,减少FP数量,但是同样会降低TP数量因为要求更严格了,会导致召回率降低,因为有一些本可以预测为正样本的样本被阈值卡在了外面。故而精确率precision又称为查准率,突出的就是一个准字,召回率recall又称查全率,突出一个全字。

ROC曲线

ROC的全称是Receiver Operating Characteristic Curve,中文名字叫“受试者工作特征曲线”

首先是由二战中的电子工程师和雷达工程师发明的,用来侦测战场上的敌军载具(飞机、船舰),也就是信号检测理论。之后很快就被引入了心理学来进行信号的知觉检测。此后被引入机器学习领域,用来评判分类、检测结果的好坏。

从图中可以看出,ROC曲线的横坐标为FPR(假正率),纵坐标为TPR(真正率)

举个简单的例子:

有10张图片其中猫8张(Positive) 狗2张(Negative),通过模型产生了10个预测结果,其中预测为猫的有9张,狗1张。

那么TP=8  FN=0  TN=1 FP=1  即TPR=1  FPR=0.5  (0.5,1)就是ROC曲线上的一个点

 

如何通过ROC曲线判断模型好坏?

有了ROC曲线需要对模型有一个定量的分析,这里就需要引入AUC(Area under ROC Curve)面积,AUC指的就是ROC曲线下方的面积,计算AUC只需要沿着ROC的横轴做积分即可,真实场景下ROC曲线一般在y=x直线的上方,所以AUC的取值一般在0.5~1之间,AUC值越大说明模型的性能越好。

如何画ROC曲线?

当我们改变模型的阈值,预测结果中的TP FN TN FP都会相应的改变,即每一个阈值都会有一组(TPR, FPR)对应,ROC曲线就是不断的移动分类器的阈值来产生曲线上的关键点。

举个例子:(https://www.zhihu.com/question/22844912/answer/246037337

图中是一个二分类模型的输出结果,一共20个样本,输出的概率就是模型判定为正样本的概率,第二列是真实label

如果我们指定阈值为0.9,那么只有第一个样本会被定为正样本,其他样本都定位负样本,可以算出TPR=0.1 FRP=0,所以(0,0.1)是ROC曲线上的一点,这样继续改变阈值(截断点)就可以得到更多的关键点,最后连接所有的关键点就能得到ROC曲线。

发布了37 篇原创文章 · 获赞 92 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/hesongzefairy/article/details/104295431