ROC-AUC笔记

名词解释

  • ROC曲线:Receiver Operating Characteristic Curve

  • AUC:Area Under Curve


ROC曲线

ROC曲线

分类模型尝试将各个实例(instance)划归到某个特定的类,而分类模型的结果一般是实数值,如逻辑回归,其结果是从0到1的实数值。这里就涉及到如何确定阈值(thresholdvalue),使得模型结果大于这个值,划为一类,小于这个值,划归为另一类。

考虑一个二分问题,即将实例分成正类(positive)或负类(negative)。对一个二分问题来说,会出现四种情况。如果一个实例是正类并且也被预测成正类,即为真正类(Truepositive),如果实例是负类被预测成正类,称之为假正类(Falsepositive)。相应地,如果实例是负类被预测成负类,称之为真负类(True positive),正类被预测成负类则为假负类(falsenegative)。


相关计算公式

计算公式

从表引入两个新名词。其一是真正类率(true positive rate ,TPR), 计算公式为TPR=TP / (TP +FN),刻画的是分类器所识别出的正实例占所有正实例的比例。另外一个是假正类率(false positive rate,FPR),计算公式为FPR= FP / (FP + TN),计算的是分类器错认为正类的负实例占所有负实例的比例。还有一个真负类率(True Negative Rate,TNR),也称为specificity,计算公式为TNR=TN / (FP + TN) = 1 − FPR。

在一个二分类模型中,对于所得到的连续结果,假设已确定一个阀值,比如说 0.6,大于这个值的实例划归为正类,小于这个值则划到负类中。如果减小阀值,减到0.5,固然能识别出更多的正类,也就是提高了识别出的正例占所有正例的比类,即TPR,但同时也将更多的负实例当作了正实例,即提高了FPR。为了形象化这一变化,在此引入ROC。


AUC值的计算

AUC(Area UnderCurve)被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。

在了解了ROC曲线的构造过程后,编写代码实现并不是一件困难的事情。相比自己编写代码,有时候阅读其他人的代码收获更多,当然过程也更痛苦些。在此推荐scikit-learn中关于计算AUC的代码。


分类模型评估

指标描述Scikit-learn函数
Precision精准度from sklearn.metrics import precision_score
Recall召回度from sklearn.metrics import recall_score
F1 F1值from sklearn.metrics import f1_score
Confusion Matrix混淆矩阵from sklearn.metrics import confusion_matrix
ROCROC曲线from sklearn.metrics import roc
AUCROC曲线下的面积from sklearn.metrics import auc

计算方式

这里写图片描述

python实现

  • 调用sklearn
from sklearn.metrics import roc_auc_score
roc_auc_score(lise_one, list_two)  # list既可以是list,也可以是pandas.Series #
  • 函数实现(复杂度较高)
def cal_auc(list_one, list_two):
    '''计算AUC值'''
    positive = []
    negative = []
    for index in range(len(list_one)):
        if list_one[index] == 1:
            positive.append(index)
        else:
            negative.append(index)
    SUM = 0
    for i in positive:
        for j in negative:
            if list_two[i] > list_two[j]:
                SUM += 1
            elif list_two[i] == list_two[j]:
                SUM += 0.5
            else:
                pass
    return SUM / (len(positive)*len(negative))

参考资料

ROC曲线(Receiver Operating Characteristic Curve)

Wikipedia

ROC和AUC介绍以及如何计算AUC


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值