sklearn roc auc score,sklearn roc_curve
ROC和AUC定义ROC全称是“受试者操作特征”。ROC曲线的面积为AUC(曲线下面积)。AUC用于衡量机器学习算法对于“二分类问题”的性能(泛化能力)。
Python中的Sklearn直接提供了计算ROC的函数。下面详细描述一下函数背后的计算过程。
计算ROC时需要了解的关键概念。先解释二分类问题中常用的几个概念:真正、假正、真负、假负。根据真实范畴和预测范畴的组合来区分它们。
假设有一批测试样本,只有两类:正例和反例。机器学习算法的预测类别如下图所示(左半部分预测类别为正,右半部分预测类别为负),而样本中的真正类别在上半部分,下半部分为真负。
预测值为正例,标为P(正)为负例,标为N(负)与真实值相同,标为T(真)与真实值相反,标为F(假)
TP:预测类别为P(正例),真实类别为PFP:预测类别为P,真实类别为N(负例)TN:预测类别为N,真实类别为NFN:预测类别为N,真实类别为P样本中真实正例的总数,即TP FN。TPR为真正率,TPR=TP/(TP FN)。
同样,样本中的真反例总数为FP TN。FPR是假阳性率,FPR=FP/(TN FP)。
还有一个概念叫“分界点”。机器学习算法对测试样本进行预测后,可以输出每个测试样本对某个类别的相似概率。例如,t1是P类的概率是0.3。一般我们认为概率低于0.5,t1就属于n类,这里的0.5就是“分界点”。
综上所述,对于计算ROC,最重要的三个概念是TPR、FPR和截断点。
当截断点取不同值时,TPR和FPR的计算结果也不同。通过在二维坐标系中绘制对应于不同截断点值的TPR和FPR结果而获得的曲线是ROC曲线。横轴由FPR表示。
Sklearn计算ROC sklearn官方给出了一个计算ROC的例子:
从sk学习导入metrics=np.array ([1,1,2,2]) scores=np.array ([0.1,0.4,0.35,0.8]) TPR,FPR,thresholds=metrics.roc _ curve (y,scores,pos _ label)
FPR=数组([0。 0.5, 0.5, 1.]) TPR=array ([0.5,0.5,1。 1.])阈值=数组([0.8,0.4,0.35,0.1]) #截止点比较结果中的FPR和TPR
详细计算过程说明上述示例中给出的数据如下
Y=NP。array ([1,1,2,2]) scores=NP。array ([0.1,0.4,0.35,0.8])用这些数据计算TPR和FPR的过程是怎样的?
1.分析数据Y是一维数组(样本的真实分类)。这些值代表类别(有两个类别,1和2)。我们假设y中的1代表反例,2代表正例。y将被改写为:
Y_true=[0,0,1,1] score是每个样本属于正例的概率。
2.根据得分,预测数据排序样本属于真实类别Y[0]0.1 ny[2]0.35 py[1]0.4 ny[3]0.8 P3的概率(得分),当截断点取为分数值,截断点依次取为0.1、0.35、0.4、0.8时,计算TPR和FPP。
3.1分界点为0.1。
只要score=0.1,其预测类别就是正例。
此时,因为四个样本的得分都大于等于0.1,所以所有样本的预测类别都是p。
scores=[0.1,0.4,0.35,0.8]y_true=[0,0,1,1] y_pred=[1,1,1,1]
TPR=TP/(TP FN)=1
FPR=FP/(TN FP)=1
3.2截止点为0.35。
说明只要score=0.35,它的预测类别就是p。
此时,因为四个样本中有三个的得分大于或等于0.35。因此,所有样本的三个预测类为P(两个正确,一个错误);1个样本预测为N(预测正确)。
scores=[0.1,0.4,0.35,0.8]y_true=[0,0,1,1] y_pred=[0,1,1,1]
TPR=TP/(TP FN)=1
FPR=FP/(TN FP)=0.5
3.3分界点为0.4。
说明只要score=0.4,它的预测类别就是p。
此时,因为四个样本中有两个样本的得分大于或等于0.4。因此,所有样本的两个预测类为P(一个正确,一个错误);2个样本预测为N(1个正确,1个错误)。
scores=[0.1,0.4,0.35,0.8]y_true=[0,0,1,1] y_pred=[0,1,0,1]
TPR=TP/(TP FN)=0.5
FPR=FP/(TN FP)=0.5
3.4分界点为0.8。
说明只要score=0.8,其预测类别就是P .因此,所有样本的一个预测类别就是P(一个预测是正确的);三个样本被预测为N(两个正确,一个错误)。
scores=[0.1,0.4,0.35,0.8]y_true=[0,0,1,1] y_pred=[0,0,0,1]
TPR=TP/(TP FN)=0.5
FPR=FP/(TN FP)=0
感觉
下面的描述展示了TPR和FPR的计算过程,比较容易记忆。
TPR:在真实的正例中预测正确的比例。
FPR:在真实反例中,预测正确的比例。
理想的分类器是对样本进行完全正确的分类,即FP=0,FN=0。因此,理想的分类器TPR=1,FPR=0。
上述结果得到了scikit-learn的验证
从sklearn导入metricsy=np.array([0,0,1,1])scores=np.array([0.1,0.4,0.35,0.8])fpr,tpr,thresholds=metrics.roc_curve(y,scores,Pos_label=1)如果在实际问题中,label 1代表反例,0代表正例,只需修改metrics.roc_curve函数中的Pos_label使pos_label=0即可。
从sklearn导入metricsy=np.array([0,0,1,1])scores=np.array([0.1,0.4,0.35,0.8])fpr,tpr,thresholds=metrics.roc_curve(y,scores,pos_label=0)
至于结果,阈值为1.8。参见官方文档中对返回值的解释:返回值Returns:thresholds:数组,shape=[n _ thresholds]
降低用于计算fpr和tpr的决策函数的阈值。thresholds[0]表示不预测任何实例,并被任意设置为max(y_score) + 1。
也就是说,所选择的不同阈值以降序排列。fpr :数组,形状=[2]
增加假阳性率,使得元素I是得分=阈值[i]的预测的假阳性率。
根据不同阈值计算的Fpr。tpr:数组,形状=[2]
增加真阳性率,使得元素I是得分=阈值[i]的预测的真阳性率。
根据不同阈值计算的Tpr上述方法可以得到一组tpr和fpr,在此基础上可以做出roc曲线。auc可以通过函数auc(fpr,tpr)找到,它的返回值就是AUC的值。
参考https://www.jianshu.com/p/1da84ac7ff03
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。