神经网络常见评价指标超详细介绍(ROC曲线、AUC指标、AUROC)

神经网络常见评价指标超详细介绍(ROC曲线、AUC指标、AUROC)ROC 曲线 接受者操作特征曲线 receiveroper

大家好,欢迎来到IT知识分享网。

一、基本概念

  • 真阳性(TP):判断为真,实际也为真;
  • 伪阳性(FP):判断为真,实际为假;
  • 伪阴性(FN):判断为假,实际为真;
  • 真阴性(TN):判断为假,实际也为假;
    在这里插入图片描述
  • TPR(真阳性率):在所有实际为真的样本中,被正确预测为真的概率:
    T P R = T P T P + F N TPR=\frac{TP}{TP+FN} TPR=TP+FNTP
  • FPR(伪阳性率):在所有实际为假的样本中,被错误预测为真的概率;
    F P R = F P F P + T N FPR=\frac{FP}{FP+TN} FPR=FP+TNFP

二、ROC曲线

两种ROC曲线哪个效果更好❓
在这里插入图片描述
我们希望TP尽可能大,而FP尽可能小,因此曲线越靠近左上角效果越好,即B分类效果比A分类效果更好。

三、AUROC(AUC指标)

AUROC(Area Under the Receiver Operating Characteristic curve,接受者操作特征曲线下面积,即ROC曲线下面积)

从AUROC判断分类器(预测模型)优劣的标准:

  • AUROC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器;
  • 0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值;
  • AUC = 0.5,跟随机猜测一样(例:丢硬币),模型没有预测价值;
  • AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测;

其意义可以理解为均匀抽取的随机阳性样本(正样本)排名在均匀抽取的随机阴性样本(负样本)之前的期望。AUROC是⼀个介于0到1之间的数值,当AUROC值越接近于1时,表示分类器可以较好的分类正负样本。

四、实例介绍

4.1 公式实现

怎样才能通过概率得到预测的类别呢?
通常我们需要设置一个阈值,这里以0.5为例,当概率大于等于0.5时,分类器认为这个为真实类别;当概率小于0.5时,分类器认为这个不是真实类别,如下图所示:
在这里插入图片描述
我们可以根据这个图得到当阈值为0.5时的混淆矩阵:
在这里插入图片描述



实际上阈值可以取[0,1)之间的任意值,理论上可以取无数个混淆矩阵,而把所有的混淆矩阵表示在同一个二维空间中的方法称为ROC曲线

以此类推…

4.2 代码实现

  • 若Sim测试 > Sim不存在,则数值的分子加1(此时证明预测效果良好);
  • 若 Sim测试 = Sim不存在 ,则数值的分子加0.5(此时相当于随机选择);
  • 若Sim测试 < Sim不存在,则数值的分子加0。
    (Sim表示相似值)
    数值的分母是测试集中的边的相似值与不存在的边的相似值比较的次数。比如测试集中2条边,不存在中3条边,那么比较次数就是6次。
    AUC指标即为数值分子与数值分母的比值,AUC大于0.5的程度衡量了算法在多大程度上优于随机选择的算法。


定义AUC函数:

def AUC(label, pre): # 计算正样本和负样本的索引,以便索引出之后的概率值 pos = [i for i in range(len(label)) if label[i] == 1] #正样本索引 neg = [i for i in range(len(label)) if label[i] == 0] #负样本索引 auc = 0 for i in pos: for j in neg: if pre[i] > pre[j]: auc += 1 elif pre[i] == pre[j]: auc += 0.5 return auc / (len(pos) * len(neg)) 

调用函数:

if __name__ == '__main__': label = [1, 0, 0, 0, 1, 0, 1, 0] pre = [0.9, 0.8, 0.3, 0.1, 0.4, 0.9, 0.66, 0.7] print(AUC(label, pre)) 

方法2:使用sklearn算法库的包

导入roc_curve,和auc包:

# 导入sklearn算法库中的包 from sklearn.metrics import roc_curve, auc 

主程序:

label = [1, 0, 0, 0, 1, 0, 1, 0] pre = [0.9, 0.8, 0.3, 0.1, 0.4, 0.9, 0.66, 0.7] ''' label是列表形式,对应方法1中的label形式 pre是列表形式,对应方法1中的pre形式 ''' fpr, tpr, th = roc_curve(label, pre, pos_label=1) print('sklearn', auc(fpr, tpr)) 

ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~

参考:

  1. https://baike.sogou.com/v472808.htm
  2. 神经网络常见评价指标超详细介绍(ROC曲线、AUC指标、AUROC)
  3. https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html#sklearn.metrics.roc_curve

相关资源可参考:https://download.csdn.net/download/didi_ya/

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/112542.html

(0)
上一篇 2026-01-17 17:33
下一篇 2026-01-17 18:01

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信