ROC和AUC理解

from: https://www.cnblogs.com/king-lps/p/9501572.html

一. ROC曲线概念

二分类问题在机器学习中是一个很常见的问题,经常会用到。ROC (Receiver Operating Characteristic) 曲线和 AUC (Area Under the Curve) 值常被用来评价一个二值分类器 (binary classifier) 的优劣,Sklearn中对这一函数给出了使用方法:

sklearn.metrics.roc_curve(y_truey_scorepos_label=Nonesample_weight=Nonedrop_intermediate=True)

输入:其中y_true为真实标签,y_score为预测概率,或称为置信度。pos_label为正类样本标签,一般为1。

输出:fpr(假正率、1-特效性)、tpr(真正率、灵敏度)、thresholds(阈值)

假正率 = 预测为正类的负样本/所有负类样本,越小越好。

真正率 = 预测为正类的正样本/所有正类样本,越大越好。

通过sklearn的一个实例来分析计算方法:

>>> import numpy as np
>>> from sklearn import metrics
>>> y = np.array([1, 1, 2, 2])
>>> scores = np.array([0.1, 0.4, 0.35, 0.8])
>>> fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
>>> fpr
array([ 0. ,  0.5,  0.5,  1. ])
>>> tpr
array([ 0.5,  0.5,  1. ,  1. ])
>>> thresholds
array([ 0.8 ,  0.4 ,  0.35,  0.1 ])

首先负类为1,正类标签为2。thresholds为将预测结果scores从大到小排列的结果。这里的thresholds指的是大于等于这个阈值为正类,负责为负类。所以通过改变不同的阈值,预测结果也将发生变化,所以根据4组thresholds得到4组fpr、tpr数据,然后以fpr为横坐标,以tpr为纵坐标,即得到ROC曲线,ROC曲线下的面积是AUC。

那么首先当阈值为0.8,此时预测结果即为【1,1,1,2】,真实结果为【1,1,2,2】,所以:

fpr = 0/2 = 0

tpr = 1/2 = 0.5

同理可以得到其余3组结果,那么根据这4组坐标可以在图上画出ROC曲线。那么如何计算AUC呢?

sklearn.metrics.roc_auc_score(y_truey_scoreaverage=’macro’sample_weight=None)[source]

利用该函数,输入真实label和预测结果可以得到AUC值。

二. ROC曲线的意义

ROC观察模型正确地识别正例的比例与模型错误地把负例数据识别成正例的比例之间的权衡。TPR的增加以FPR的增加为代价ROC曲线下的面积是模型准确率的度量。

既然已经这么多评价标准,为什么还要使用 ROC 和 AUC 呢?因为 ROC 曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC 曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。下图是 ROC 曲线和Precision-Recall曲线的对比:

在上图中,(a)和(c)为 ROC 曲线,(b)和(d)为 Precision-Recall 曲线。(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,(c)和(d)是将测试集中负样本的数量增加到原来的 10 倍后,分类器的结果。可以明显的看出,ROC 曲线基本保持原貌,而 Precision-Recall 曲线则变化较大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值