转载自:https://zhuanlan.zhihu.com/p/25212301,本文只做个人记录学习使用,版权归原作者所有。

1、混淆矩阵

混淆矩阵如下图所示,分别用0和1代表负样本和正样本。FP代表实际类标签为0但是预测标签为1的样本数量,其余可类似推理。

2、假正率和真正率

假正率(False Positve Rate)是实际标签为0的样本中,被预测错误的比例。真正率(True Positive Rate)是实际标签为1的样本中被预测正确的比例,其公式如下:

3、计算threshold=0.5上的混淆矩阵、假正率和真正率

假设我们通过训练集训练了一个二分类模型,在测试集上进行预测每个样本所属的类别,输出了属于类别1的概率。现在假设当P>=0.5时,预测的类标签为1.

(1)导入相关库

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np#测试样本的数量
parameter=40

(2)随机生成结果集

data=pd.DataFrame(index=range(0,parameter),columns=('probability','The true label'))
data['The true label']=np.random.randint(0,2,size=len(data))
data['probability']=np.random.choice(np.arange(0.1,1,0.1),len(data['probability']))

结果如下:

(3)计算混淆矩阵

cm=np.arange(4).reshape(2,2)
#TN
cm[0,0]=len(data[data['The true label']==0][data['probability']<0.5])
#FP
cm[0,1]=len(data[data['The true label']==0][data['probability']>=0.5])
#FN
cm[1,0]=len(data[data['The true label']==1][data['probability']<0.5])
#TP
cm[1,1]=len(data[data['The true label']==1][data['probability']>=0.5])

(4)计算假正率和真正率

import itertools
classes=[0,1]
plt.figure()
plt.imshow(cm,interpolation='nearest',cmap=plt.cm.Blues)
plt.title('Confusion matrix')
tick_marks=np.arange(len(classes))
plt.xticks(tick_marks,classes,rotation=0)
plt.yticks(tick_marks,classes)
thresh=cm.max()/2.
for i,j in itertools.product(range(cm.shape[0]),range(cm.shape[1])):plt.text(j,i,cm[i,j]),horizontalalignment="center",color="white" if cm[i,j]>thresh else "black"
plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted label')

生成的threshold=0.5时候的混淆矩阵如下图所示:

然后,threshold=0.5的假正率FPR=6/(5+6)=0.55,真正率TPR=13/(13+6)=0.68

4.ROC曲线和AUC值

ROC曲线是一系列threshold下的(FPR,TPR)数值点的连线,此时的threshold的取值分别为测试数据集中各样本的测试概率,但,取各个概率的顺序是从大到小的。

(1)按照概率从大到小排序:

data.sort_values('probability',inplace=True,ascending=False)

排序结果如下:

此时,threshold依次取0.9,0.9,0.9,0.9,0.9,0.9,0.8,0.8,0.7,....比如,当threshold=0.9(第3个0.9),一个“0”预测错误,两个“1”预测正确,FPR=1/11=0.09,TPR=2/19=0.11.当threshold=0.9(第5个0.9),一个“0”预测错误,四个“1”预测正确,FPR=1/11=0.09,TPR=4/19=0.21,以此类推。

(2)计算全部概率值下的FPR和TPR

TPRandFPR=pd.DataFrame(index=range(len(data)),columns('TP','FP'))
for j in range(len(data)):data1=data.head(n=j+1)FP=len(data1[data1['The true label']==0][data1['probability']>=data1.head(len(data1))[probability]])/float(len(data[data['The true label']==0]))TP=len(data1[data1['The true label']==1][data1['probability']>=data1.head(len(data1))['probability']])/float(len(data[data['The true label']==1]))TPRandFPR.iloc[j]=[TP,FR]

最后,threshold分别取样本中各个概率值时的FPR和TPR的点矩阵如下:

(3)画出最终的ROC曲线和计算AUC值

from sklearn.metrics import auc
AUC=auc(TPRandFPR['FP'],TPRandFPR['TP'])plt.scatter(x=TPRandFPR['FP'],y=TPRandFPR['TP'],label='(FPR,TPR)',color='k')
plt.plot(TPRandFPR['FP'],TPRandFPR['TP'],'k',label='AUC=%0.2f'%AUC)
plt.legend(loc='lower right')plt.title('Receiver Operating Characteristic')
plt.plot([(0,0),(1,1)],'r--')
plt.xlim([-0.01,1.01])
plt.ylim([-0.01,1.01])
plt.ylabel('True positive rate')
plt.xlabel('False positive rate')
plt.show()

下图的黑色线即为ROC曲线测试样本中的数据点越多,曲线越平滑:

AUC(Area Under roc Curve),顾名思义就是ROC曲线下的面积,在此例子中AUC=0.62.AUC值越大,说明分类效果越好。

ROC曲线和AUC值的计算相关推荐

  1. ROC曲线和 AUC值的计算

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Mon May 25 20:27:38 202 ...

  2. 分类模型-评估指标(2):ROC曲线、 AUC值(ROC曲线下的面积)【只能用于二分类模型的评价】【不受类别数量不平衡的影响;不受阈值取值的影响】【AUC的计算方式:统计所有正负样本对中的正序对】

    评价二值分类器的指标很多,比如precision.recall.F1 score.P-R曲线等.但这些指标或多或少只能反映模型在某一方面的性能.相比而言,ROC曲线则有很多优点,经常作为评估二值分类器 ...

  3. 机器学习之分类性能度量指标 : ROC曲线、AUC值、正确率、召回率

    北京 | 高性能计算之GPU CUDA课程11月24-26日3天密集学习 快速带你晋级阅读全文> 在分类任务中,人们总是喜欢基于错误率来衡量分类器任务的成功程度.错误率指的是在所有测试样例中错分 ...

  4. 一文详尽混淆矩阵、准确率、精确率、召回率、F1值、P-R 曲线、ROC 曲线、AUC 值、Micro-F1 和 Macro-F1

    文章目录 二分类的评价指标 一.混淆矩阵与 TP.TN.FP.FN 二.准确率.精确率.召回率.F1值 三.P-R 曲线 四.ROC 曲线.AUC 值 五.P-R曲线和ROC曲线有什么区别,如何选择? ...

  5. 机器学习之分类器性能指标之ROC曲线、AUC值

    机器学习之分类器性能指标之ROC曲线.AUC值 http://www.cnblogs.com/dlml/p/4403482.html 分类器性能指标之ROC曲线.AUC值 一 roc曲线 1.roc曲 ...

  6. 分类性能度量指标:ROC曲线、AUC值、正确率、召回率、敏感度、特异度

    在分类任务中,人们总是喜欢基于错误率来衡量分类器任务的成功程度.错误率指的是在所有测试样例中错分的样例比例.实际上,这样的度量错误掩盖了样例如何被分错的事实.在机器学习中,有一个普遍适用的称为混淆矩阵 ...

  7. 机器学习之性能度量指标——决定系数R^2、PR曲线、ROC曲线、AUC值、以及准确率、查全率、召回率、f1_score

    一.线性回归的决定系数(也称为判定系数,拟合优度) 相关系数是R哈~~~就是决定系数的开方! 正如题所说决定系数是来衡量回归的好坏,换句话说就是回归拟合的曲线它的拟合优度!也就是得分啦~~ 决定系数它 ...

  8. ROC曲线,AUC值,PR曲线,AP值

    Receiver Operating Characteristic (ROC) with cross validation - scikit-learn 1.0.2 documentation Pre ...

  9. AUC值越大_模型评价——准确率、精确率与召回率与F值、宏平均与微平均、ROC曲线与AUC值...

    在上一篇文章中(baiziyu:模型评价--训练误差与测试误差.过拟合与欠拟合.混淆矩阵)主要介绍了模型评价涉及的基本概念,本节给出一些常用的评价指标.这些指标大致可以分为三类,第一大类是普通的准确率 ...

最新文章

  1. 谷歌助力,快速实现 Java 应用容器化
  2. 文本比较算法Ⅴ——回顾贴,对前面几篇文章的回顾与质疑
  3. 【转载】DL图片预处理
  4. 作为IT面试官,我如何考核计算机专业毕业生?作为培训班老师,我又如何提升他们?...
  5. 长度不超过n的连续最大和___优先队列
  6. 大数据学习之Hadoop任务输出到多个目录中
  7. python语言的主网址-python官方网站
  8. 双击鼠标触发了Ctrl+C事件
  9. IT编程从零开始学入门到精通需要多久
  10. SSD(Single Shot MultiBox Detector)原理详解
  11. 《中国通史》学习记录
  12. 对Autorun.inf类U盘病毒的攻防经验总结
  13. 英语语法构词篇-派生(Derivation)
  14. 微带线与带状线的区别
  15. 2022哪些蓝牙耳机适合学生党?适合学生党的平价蓝牙耳机推荐
  16. Android USB 主机模式
  17. UI设计师职业要求有哪些
  18. Linux引导故障和修复进入系统
  19. .NET Remoting 最简单示例
  20. 终端显示env: node\r: No such file or directory的解决办法

热门文章

  1. 数据结构队列的创建,入队,出队
  2. 儿童多动症亚型的脑结构改变和相关症状
  3. HDLBits刷题合集—9 Arithmetic Circuits
  4. 网络变压器分类 网络变压器的封装设计
  5. OpenCv中的cv::Mat::create()函数,cvRound(),cvFloor(),cvCeil()函数的详解l
  6. 上海电子陶瓷展|2023上海国际电子陶瓷及压电晶体展览会【官网】
  7. python语言创意绘画-Python turtle库能画出什么好玩的东西?
  8. jupyter不小心点了logout怎么办
  9. 【Soul源码阅读】12.soul-admin 与 soul-bootstrap 同步机制之 http 长轮询解析(上)
  10. 电商项目构建springcloud