roc_curve运行机制

来自https://blog.csdn.net/sun91019718/article/details/101314545,只为了防止丢失。

二、TP、TN、FP、FN概念

在这里插入图片描述## 三、TPR、TNR、FPR、FNR概念
1、TPR=tp/(tp+fn)
TPR:即真正率或灵敏度或召回率或查全率或真正率或功效,本来为正样本的样本被预测为正样本的总样本数量÷真实结果为正样本的总样本数
另:精确度或查准率公式等于tp/(tp+fp)
准确得分计算:(tp+tn)/(tp+fp+fn+tn)
2、FNR=fn/(tp+fn) =1-TPR
FNR:即假负率,本来为正样本的样本被预测为负样本的总样本数量÷真实结果为正样本的总样本数。
相当于假设检验中,犯第二类错误概率(β)
3、FPR=fp/(fp+tn)
FPR:即假正率,本来为负样本的样本被预测为正样本的总样本数量÷真实结果为负样本的总样本数。
相当于假设检验中,犯第一类错误概率(α)
4、TNR=tn/(fp+tn)=1-FPR
TNR:即真负率或特异度,本来为负样本的样本被预测为负样本的总样本数量÷真实结果为负样本的总样本数。

三、roc_curve运行机制简单剖析

3.1、roc_curve简单介绍

3.1.1 重要参数

y_true:真实结果数据,数据类型是数组
y_score:预测结果数据,可以是标签数据也可以是概率值,数据类型是形状 与y_true一致的数组
pos_label:默认为None,只有当标签数据如{0,1}、{-1,1}二分类数据才能默认;否则需要设置正样本值

3.1.2 返回的结果

返回三个数组结果分别是fpr(假正率),tpr(召回率),threshold(阈值)

3.2、第一种情形:y_score是标签数据

3.2.1、例子

代码.

//python 代码
y_true=np.array([0, 0, 0, 1, 1, 0, 0, 0, 1, 0])
y_score=np.array([0, 0, 0, 1, 1, 0, 0, 0, 0, 0])
fpr,tpr,threshold=roc_curve(y_true,y_score)

返回结果.

threshold:array([2, 1, 0])
tpr:array([0.        , 0.66666667, 1.        ])
fpr:array([0., 0., 1.])

3.2.2、解释:

1、threshold返回的结果是y_score内的元素去重后加入一个‘最大值+1’的值降序排序后组成的数据,每一个元素作为阈值,数据类型是一维数组。比如:y_score=np.array([0, 1, 2,0,3,1])对应的threshold=np.array([4, 3, 2,1,0])
2、当index=0,阈值等于threshold[0]=2。此时,假定y_score中所有大于等于2的元素对应index在y_true中的样本为正样本,其他为负样本,然后与y_true对应元素对比组成混淆矩阵,因没有大于等于2的值,所以TP和FP都为0,即tpr[0]=0/3=0.0,fpr[0]=0/7=0.0
3、当index=1,阈值等于threshold[1]=1。此时,假定y_score中所有大于等于1的元素对应index在y_true中的样本为正样本,其他为负样本,然后与y_true对应元素对比组成混淆矩阵,因大于等于1的数有2个,所以TP=2和FP=0,即tpr[1]=2/3=0.66666667,fpr[1]=0/7=0.0
4、当index=2,阈值等于threshold[2]=0。此时,假定y_score中所有大于等于0的元素对应index在y_true中的样本为正样本,其他为负样本,然后与y_true对应元素对比组成混淆矩阵,因大于等于0的数有10个,所以TP=3和FP=7,即tpr[2]=3/3=1.0,fpr[2]=7/7=1.0
所以,最终结果:tpr=array([0., 0.66666667, 1.]),fpr=array([0., 0., 1.])

3.3、第二种情形:y_score是概率值

3.3.1、例子

代码.

//python 代码
y_true=np.array([0,0,1,1])
y_score=np.array([0.1,0.4,0.35,0.8])
fpr,tpr,threshold=roc_curve(y_true,y_score)

返回结果.

threshold:array([1.8 , 0.8 , 0.4 , 0.35, 0.1])
tpr:array([0. , 0.5, 0.5, 1. , 1.])
fpr:array([0. , 0. , 0.5, 0.5, 1. ])

3.3.2、解释:

1、当index=0,阈值等于threshold[0]=1.8。此时,假定y_score中所有大于等于1.8的元素对应index在y_true中的样本为正样本,其他为负样本,然后与y_true对应元素对比组成混淆矩阵,因没有大于等于1.8的值,所以TP和FP都为0,即tpr[0]=0/2=0.0,fpr[0]=0/2=0.0
2、当index=1,阈值等于threshold[1]=0.8。此时,假定y_score中所有大于等于1的元素对应index在y_true中的样本为正样本,其他为负样本,然后与y_true对应元素对比组成混淆矩阵,因大于等于0.8的数有1个,刚好y_true中该位置元素值为1,所以TP=1和FP=0,即tpr[1]=1/2=0.5,fpr[1]=0/2=0.0
3、当index=2,阈值等于threshold[2]=0.4。此时,假定y_score中所有大于等于0.4的元素对应index在y_true中的样本为正样本,其他为负样本,然后与y_true对应元素对比组成混淆矩阵,因大于等于0.4的数有2个,所以TP=1和FP=1,即tpr[2]=1/2=0.5,fpr[2]=1/2=0.5
4、当index=3,阈值等于threshold[3]=0.35。此时,假定y_score中所有大于等于0.35的元素对应index在y_true中的样本为正样本,其他为负样本,然后与y_true对应元素对比组成混淆矩阵,因大于等于0.35的数有3个,所以TP=2和FP=1,即tpr[3]=2/2=1.0,fpr[3]=1/2=0.5
5、当index=4,阈值等于threshold[4]=0.1。此时,假定y_score中所有大于等于0.1的元素对应index在y_true中的样本为正样本,其他为负样本,然后与y_true对应元素对比组成混淆矩阵,因大于等于0.1的数有4个,所以TP=2和FP=2,即tpr[4]=2/2=1.0,fpr[4]=2/2=1.0
所以,最终结果:tpr=array([0. , 0.5, 0.5, 1. , 1.]),fpr=array([0. , 0. , 0.5, 0.5, 1. ])

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值