美文网首页
评价指标ROC、AUC

评价指标ROC、AUC

作者: ForgetThatNight | 来源:发表于2018-05-21 12:27 被阅读459次

AUC

混淆矩阵

混淆矩阵

正确率和召回率很难兼得
• 准确度Accuracy:(50+35)/(35+5+10+50)=85%
• 正确率Precision(y1):50/(50+5)=90.9%
• 召回率Recall(y1):50/(50+10)=83.3%


预测与实际类别
  • 正确率Precision:TP/(TP+FP)
    – 预测为正例的样本中的真正正例的比例

  • 召回率Recall:TP/(TP+FN)
    – 预测正例的真实正例占所有真实正例的比例


    x:召回率 y:准确率
  • 很容易构造一个高正确率或高召回率的分类器,但很难保证两全其美

  • 一般情况下准确率高、召回率就低,召回率高、准确率低

  • 搜索场景:
    – 保证召回为前提,提升准确

  • 疾病监测、反垃圾场景:
    – 保证准确为前提,提升召回

合并a8a.t和a8a两个文件 python merge_label.py data/a8a.t output_res > auc.raw


merge_label.py

file1:真实标签文件 a8a.t,只取第一列
如果预测标签和真实标签的长度不相等

cat auc.raw | awk '{print $2}' | sort -nq | head 
cat auc.raw | awk '{print $2}' | sort -nq | tail

可以看到范围-1.1~1.5之间
按照预测值排序

cat auc.raw | sort -t$'\t' -k2rg > auc.raw.sort  从小到大
cat auc.raw | sort -t$'\t' -k2g -nr > auc.raw.sort 从大到小

设置阈值--兼顾正确率和召回率

按照此例子如果阈值=1.3,那么正确率会是100%,而此时召回率很低(因为很多正例是分正确却因为阈值而被分到负例去了)
按照此例子如果阈值=-1.1.42,那么召回率会是100%,而此时正确率很低(因为大于该值的很多本应该是负例却被划分到正例去了)

ROC

• ROC是个曲线


预测与实际类别
真阳率与假阳率
  • 纵轴:真阳率(召回率):TP/(TP+FN)
    – Recall
  • 横轴:假阳率:FP/(FP+TN)


    AUC和ROC的关系

    AUC的面积不可能低于0.5

在虚拟机图形化界面中执行命令 python plot_roc.py /root/svm_test/auc.raw
securecrt不显示图形界面

#得先安装Anaconda,默认会添加环境变量 conda install scikit-learn
#分类模型的评价指标,没有固定阈值,只能自己决定,视业务情况决定兼顾正确率还是召回率
print(__doc__)

import sys
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc, precision_recall_curve
#输入文件 即 head /root/svm_test/auc.raw
inputfile = sys.argv[1]

label_list = []
score_list = []
with open(inputfile, 'r') as fd:
    #每一行\t分割
    for line in fd:
        fs = line.strip().split('\t')
        label = int(fs[0]) #第一列为真实标签
        score = float(fs[1])¥第二列为回归分数
        label_list.append(label)
        score_list.append(score)
#sklearn计算auc
fpr, tpr, _ = roc_curve(label_list, score_list)
auc = auc(fpr, tpr)
#得到准确率和召回率
precision, recall, _ = precision_recall_curve(label_list, score_list)

##############################################################################
# Plot of a ROC curve for a specific class
plt.figure()
plt.plot(fpr, tpr)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC curve (auc = %.2f)' % auc)
plt.legend(loc="lower right")
plt.show()

plt.figure()
plt.plot(recall, precision)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('recall')
plt.ylabel('precision')
plt.title('Precision-Recall curve')
plt.legend(loc="lower right")
plt.show()

比如阈值=0.25,音乐推荐item3
阈值=0.05,则音乐推荐item1、item2、item3

  • 另一种理解AUC的方法:
    – 负样本排在正样本前面的概率
    cat auc.raw | sort -t$'\t' -k2g |awk -F'\t' '($1==-1){++x;a+=y;}($1==1){++y;}END{print 1.0-a/(x*y);}‘
  • 1:正例 -1为负例
  • cat auc.raw | sort -t$'\t' -k2g :从小到大排序
  • ($1==-1){++x;a+=y;}发现一个负例 x+1 y默认为0 这时候y一直为0
  • ($1==1){++y;}发现一个正例 y+1 所以y为正例的个数 x为负例的个数 a表示正例在负例前面分错的次数
  • x*y:正负样本pair对
  • a:错误的pair对
  • a/x*y:错误的概率
  • 1-a/x*y:正确的概率

备注

如果安装了多个conda python环境
切换python环境

相关文章

  • 4.machine_learning_eval_metric_a

    1.机器学习指标ROC与AUC 1.1ROC与AUC AUC是一种模型分类指标,且仅仅是二分类模型的评价指标。AU...

  • 评价指标ROC、AUC

    AUC 混淆矩阵 正确率和召回率很难兼得• 准确度Accuracy:(50+35)/(35+5+10+50)=85...

  • 链路预测

    2.4评价指标 2.4.1AUC ROC曲线下的面积。信号探测理论中,ROC曲线用来评价某种分类器的分类效果。这种...

  • AUC与ROC

    序 分类任务不同于回归,本次记录一下分类任务中常用的评价指标AUC与ROC 混淆矩阵 在搞清楚ROC和AUC之前,...

  • 机器学习中的常用评价指标汇总

    机器学习中的评价指标 简要介绍精度、精确率、召回率、P-R曲线、F1 值、TPR、FPR、ROC、AUC等指标,还...

  • 评价指标(二)ROC和AUC

    前言   继上篇文章评价指标(一)精确率,召回率,F1-score,除了上述三个指标,这次深入讲述何为ROC与AU...

  • 分类模型的评价指标的图像记忆

    最近在复习机器学习相关的知识,发现分类模型的评价指标--混淆矩阵,ROC,AUC的记忆比较复杂,主要是TP(...

  • sklearn notes

    Difference between roc_auc_score() and auc() AUC is not a...

  • 2018-06-13 AUC评价指标的理解

    ROC(Receiver Operating Characteristic)曲线和AUC常被用来评价一个二值...

  • 机器学习入门系列 - 概念篇(2)

    ROC与AUC接下来我们来看一下2分类问题最重要的评估指标,ROC和AUC 作者注:对以上不明白的,建议【一定要仔...

网友评论

      本文标题:评价指标ROC、AUC

      本文链接:https://www.haomeiwen.com/subject/txrfjftx.html