【Pytorch-从一团乱麻到入门】:3、模型效果评估指标:ROC、AUC、precision、recall

在构建模型中,我们经常会用到AUC、ROC等指标来进行模型效果评估

ROC全称是“受试者工作特征”(Receiver Operating Characteristic)。ROC曲线的面积就是AUC(Area Under the Curve)。AUC用于衡量“二分类问题”机器学习算法性能(泛化能力)。

如果大家对二值分类模型熟悉的话,都会知道其输出一般都是预测样本为正例的概率,而事实上,ROC曲线正是通过不断移动分类器的“阈值”来生成曲线上的一组关键点的

Python中sklearn直接提供了用于计算ROC的函数,下面就把函数背后的计算过程讲一下。

1.计算ROC需要知道的概念:

1.二分类常用的概念:True Positive,False Positive,True Negetive, Flase Negetive,根据真实的类别与预测类别的组合来区分的。

假设有一批test样本,这些样本只有两种类别:正例和反例。机器学习算法预测类别如下图(左半部分预测类别为正例,右半部分预测类别为反例),而样本中真实的正例类别在上半部分,下半部分为真实的反例。

预测值为正例,记为P(Positive)

预测值为反例,记为N(Negative)

预测值与真实值相同,记为T(True)

预测值与真实值相反,记为F(False)

正例

负例

预测正

真正例 (true positive, TP)

假正例 (false positive, FP)

预测负

假负例 (false negative, FN)

真负例 (true negative, TN)

真正例率:TPR=TP/(TP+FN),所有正例中被预测为正例的比例

假正例率:FPR=FP/(FP+TN),   所有负例中被预测为正的比例

精确率:P=TP/(TP+FP), 预测为正的样本中真正为正的比例

召回率:R=TP/(TP+FN),所有正例中被预测为正例的比例 

2.关键概念的计算                  

TPR:样本中的真实正例类别总数即TP+FN,真正例率:TPR即True Positive Rate,TPR = TP/(TP+FN)。

FPR:样本中的真实反例类别总数为FP+TN。假正例率:FPR即False Positive Rate,FPR=FP/(TN+FP)。

截断点: 机器学习算法对test样本进行预测后,可以输出各test样本对某个类别的相似度概率。比如t1是P类别的概率为0.3,一般我们认为概率低于0.5,t1就属于类别N。这里的0.5,就是”截断点”。

上述三个指标是计算ROC的重要概念。

3.sklearn 计算ROC

示例如下:

import numpy as np

from sklearn import metrics

y=np.array([1,2,2,2,1,1])

scores=np.array([0.2,0.2,0.35,0.9,0.1,0.2])

fpr,tpr,thresholds=metrics.roc_curve(y,scores,pos_label=2)

画图:

import matplotlib.pyplot as plt

plt.title('ROC')

plt.xlabel('False Positive Rate')

plt.ylabel('True Positive Rate')

plt.plot(fpr,tpr,'-*b',label='tuli')

plt.legend()

plt.show()

绘图

【Pytorch-从一团乱麻到入门】:3、模型效果评估指标:ROC、AUC、precision、recall_第1张图片

计算方式参考:

(5条消息) sklearn计算准确率、精确率、召回率、F1 score_MrLittleDog的博客-CSDN博客_sklearn 准确率

4.ROC-AUC 和PR-AUC

ROC-AUC 指的是 ROC 曲线下的面积,通过在【0,1】范围内设置阈值来计算对应的TPR和FPR,最终将所有的点连起来构成ROC曲线。

PR-AUC 的构造和上述过程基本一致,只是需要再计算出 Precision 和 Recall。

AUC: 随机抽出一对样本(一个正样本,一个负样本),然后用训练得到的分类器来对这两个样本进行预测,预测得到正样本的概率大于负样本概率的概率。

关于AUC的计算可参考: (5条消息) AUC的计算方法_SCUT_Sam-CSDN博客_auc计算公式

#### PR曲线实则是以precision(精准率)和recall(召回率)这两个为变量而做出的曲线,其中recall为横坐标,precision为纵坐标。设定一系列阈值,计算每个阈值对应的recall和precision,即可计算出PR曲线各个点。

程序代码如何实现

####可以使用sklearn.metrics.precision_recall_curve 来计算PR曲线

from sklearn.metrics import precision_recall_curve,auc

precision, recall, thresholds = precision_recall_curve(ture_lab,pre_lab)

####使用AUC函数计算出auc值

auc_precision_recall = auc(recall, precision)

转载自:Pytorch-从一团乱麻到入门:3、模型效果评估指标:ROC、AUC、precision、recall (qq.com)

 

你可能感兴趣的:(pytorch,机器学习,深度学习)