【笔记】ROC曲线

作者:神秘网友 发布时间:2021-01-25 13:51:44

【笔记】ROC曲线

ROC曲线

前文讲了PR曲线

这里说ROC曲线,其描述的是TPR和FPR之间的关系

TPR是什么呢,TPR就是召回率

FPR是什么呢,FPR就是和TPR对应的,即真实值为0的一行中的预测为1的部分比例

和精准率和召回率一样,TPR和FPR之间也有着内在的联系,TPR越高,FPR越高,反之一样,ROC曲线就是刻画这样的关系的曲线

快速的实现一下TPR和FPR的函数,在python chame中的metrics中写入下列代码,依次是实现TN,FP,FN,TP,混淆矩阵,精准率,召回率,F1 score,TPR,FPR,前面部分都在前面博客有相应的原理的代码,关于TPR和FPR的,也只是将公示带入使用

代码如下

def TN(y_true, y_predict):
    assert len(y_true) == len(y_predict)
    return np.sum((y_true == 0) & (y_predict == 0))


def FP(y_true, y_predict):
    assert len(y_true) == len(y_predict)
    return np.sum((y_true == 0) & (y_predict == 1))


def FN(y_true, y_predict):
    assert len(y_true) == len(y_predict)
    return np.sum((y_true == 1) & (y_predict == 0))


def TP(y_true, y_predict):
    assert len(y_true) == len(y_predict)
    return np.sum((y_true == 1) & (y_predict == 1))


def confusion_matrix(y_true, y_predict):
    return np.array([
        [TN(y_true, y_predict), FP(y_true, y_predict)],
        [FN(y_true, y_predict), TP(y_true, y_predict)]
    ])


def precision_score(y_true, y_predict):
    assert len(y_true) == len(y_predict)
    tp = TP(y_true, y_predict)
    fp = FP(y_true, y_predict)
    try:
        return tp / (tp + fp)
    except:
        return 0.0


def recall_score(y_true, y_predict):
    assert len(y_true) == len(y_predict)
    tp = TP(y_true, y_predict)
    fn = FN(y_true, y_predict)
    try:
        return tp / (tp + fn)
    except:
        return 0.0


def f1_score(y_true, y_predict):
    precision = precision_score(y_true, y_predict)
    recall = recall_score(y_true, y_predict)

    try:
        return 2 * precision * recall / (precision + recall)
    except:
        return 0.0


def TPR(y_true, y_predict):
    tp = TP(y_true, y_predict)
    fn = FN(y_true, y_predict)
    try:
        return tp / (tp + fn)
    except:
        return 0.


def FPR(y_true, y_predict):
    fp = FP(y_true, y_predict)
    tn = TN(y_true, y_predict)
    try:
        return fp / (fp + tn)
    except:
        return 0.

具体使用

(在notebook中)

使用手写数据集,进行先前的操作布置好需要的变量以及数据分割,不再赘述

使用封装好的FPR和TPR,和前面绘制PR曲线的思想一致,然后绘制图像

  from metrics import FPR,TPR

  fprs = []
  tprs = []
  thresholds = np.arange(np.min(decision_scores),np.max(decision_scores),0.1)
  for threshold in thresholds:
      y_predict = np.array(decision_scores >= threshold,dtype='int')
      fprs.append(FPR(y_test,y_predict))
      tprs.append(TPR(y_test,y_predict))

  plt.plot(fprs,tprs)

图像如下

使用sklearn中的ROC曲线,调用方式和先前PR曲线的使用很像,绘制图像

  from sklearn.metrics import roc_curve

  fprs, tprs, thresholds = roc_curve(y_test,decision_scores)

  plt.plot(fprs,tprs)

图像如下(ROC曲线下的面积可以作为一个指标)

求解的话一样可以使用sklearn中的roc_auc_score,即可求出面积值的作为的指标

  from sklearn.metrics import roc_auc_score

  roc_auc_score(y_test,decision_scores)

结果如下

可以看出来,ROC的指标对偏斜的数据不算敏感,不想精准率和召回率那样敏感,所以针对极度偏斜的数据使用精准率和召回率是不错的,ROC曲线的应用场景是可以确定更好的模型,即面积更大模型

【笔记】ROC曲线 相关文章

  1. Python深度学习笔记09--使用Keras建立循环神经网络

    6.2 理解循环神经网络 6.2.1 Keras中的循环层: 1 from keras.layers import SimpleRNN 2 3 from keras.models import Sequential 4 from keras.layers import Embedding, SimpleRNN 5 6 model = Sequential() 7 model.add(Embedding(10000, 32)) 8 model.ad

  2. 【笔记】F1 score

    F1 score 关于精准率和召回率 精准率和召回率可以很好的评价对于数据极度偏斜的二分类问题的算法,有个问题,毕竟是两个指标,有的时候这两个指标也会产生差异,对于不同的算法,精准率可能高一些,召回率可能低一些,反之一样,真正使用的时候应该根据具体

  3. 【笔记】混淆矩阵,精准率和召回率

    混淆矩阵,精准率和召回率 评论回归算法的好坏点击这里 评价分类算法是不能单单靠一个分类准确度就可以衡量的,单用一个分类准确度是有问题的 比如说,一个癌症预测系统,输入体检信息,就可以判断是否得了癌症,这个系统的预测准确率有99.9%,但是不能说这

  4. 替罪羊树学习笔记

    Part 0 引子 我们都知道,有一种东西叫 BST。 我们都知道,BST 在极限数据会卡爆。 我们都知道,为了让 BST 不被卡,有很多种平衡树。 但你知道有一种平衡树好写速度快吗那就是替罪羊树。 Part 1 替罪羊树平衡的原理 替罪羊树是一种平衡树,一种平衡的 BST。

  5. Python深度学习笔记08--处理文本数据的常用方法

    6.1 处理文本数据 6.1.1 单词和字符的one-hot编码 (1)单词级的one-hot编码: 1 # 单词级的one-hot编码 2 import numpy as np 3 4 # 初始数据:每个样本是列表的一个元素(本例中的样本是一个句子,但也可以是一整篇文档) 5 samples = ['The cat sat on the ma

  6. SAS初学者笔记---004---循环结构与判断结构

    关于循环与判断的语句在所有程序设计中十分重要,在SAS程序中也不例外。逻辑清晰的循环与判断结构是日后进行数据清洗、数据构造的必要前提。(反正就是很重要就对了) 循环结构 关于循环结构,常见的有三种类型 DO Index. 索引循环,此语句是DO循环语句中最

  7. JUnit学习笔记

    junit学习笔记 不影响原有类的情况下,生成测试类。 IDEA下载插件 插件名字为JUnitGeneratorV2.0 方法 Setting选项中的Plugins里搜索下载 Setting选项中的JUnnit Generator中的Output Path配置测试类存放位置 ${SOURCEPATH}/../test/${PACKAGE}/${FILENAME}

  8. 对于线性回归通俗理解的笔记

    经常听说线性回归(Linear Regression) 到底什么才是线性,什么才是回归 有学者说,线性回归模型是一切模型之母。所以,我们的机器学习之旅,也将从这个模型开始! 建立回归模型的好处:随便给一个x,就能通过模型算出y,这个y可能和实际值不一样,这个y是

  9. RabbitMQ消息中间件(第二章)第二部分-笔记-快速搭建与控制台介绍

    消息生产与消费 ConnectionFactory: 获取连接工厂 Connection:一个连接 Channel:数据通信信道,可发送和接收消息 Queue:具体的消息存储队列 Producer Consumer 生产和消费者 代码演示 引入maven依赖 dependency groupIdcom.rabbitmq/groupId artifactIdamqp

  10. RabbitMQ消息中间件(第二章)第一部分-笔记

    本章导航 互联网大厂为什么选择RabbitMQ? RabbitMQ的高性能之道是如何做到? 什么是AMQP高级协议? AMQP核心概念是什么? RabbitMQ整体架构模型是什么样子的? RabbitMQ消息是如何流转的? RabbitMQ安装与使用 命令行与管控台 RabbitMQ消息生产与消费 Rabbit

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词