机器学习:评价分类结果(ROC 曲线)

一、基础理解

 1)定义

  • ROC(Receiver Operation Characteristic Curve)
  • 定义:描述 TPR 和 FPR 之间的关系;
  • 功能:应用于比较两个模型的优劣;
  1. 模型不限于是否通过极度偏斜的数据训练所得
  2. 比较方式:ROC 曲线与坐标图形边界围成的面积,越大模型越优;
  1. TPR(True Positive Rate):真正率;被预测为正的正样本结果数 / 正样本实际数:TPR = TP /(TP + FN);
  2. TNR(True Negative Rate):真负率;被预测为负的负样本结果数 / 负样本实际数:TNR = TN /(TN + FP) ;
  3. FPR(False Positive Rate):假正率;被预测为正的负样本结果数 /负样本实际数:FPR = FP /(TN + FP) ;
  4. FNR(False Negative Rate):假负率;被预测为负的正样本结果数 / 正样本实际数:FNR = FN /(TP + FN) ;
  • 召回率(Recall)和精度(Precise)是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量;

 2)与 P - R 曲线的区别

  • P - R 曲线:应用于判定由极度有偏数据所训练的模型的优劣;
  • ROC 曲线:应用于比较两个模型的优劣;
  1. 模型:可以是同样算法不同超参数所得的不同模型,也可以是不同算法所得的不同模型;

 3)TPR 和 FPR 的关系

  • 关系
  1. 随着阈值 threshold 的增大,FPR 和 TPR 都逐渐减小;
  2. FPR 和 TPR 称正相关关系,FPR 越高,TPR 相应的也越高;

二、代码实现 FPR 和 TPR,并绘制 ROC 曲线

 1)封装

  • TPR

    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.
  • FPR

    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.

 2)例

  • 求 TPR 和 FPR

    import numpy as np
    from sklearn import datasets
    
    digits = datasets.load_digits()
    X = digits.data
    y = digits.target.copy()
    y[digits.target==9] = 1
    y[digits.target!=9] = 0
    
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)
    
    from sklearn.linear_model import LogisticRegression
    log_reg = LogisticRegression()
    log_reg.fit(X_train, y_train)
    decision_scores = log_reg.decision_function(X_test)
    
    from playML.metrics import FPR, TPR
    
    fprs = []
    tprs = []
    thresholds = np.arange(np.min(decision_scores), np.max(decision_scores), 0.1)
    
    for threshold in thresholds:
        # dtype=‘int‘:将数据类型从 bool 型转为 int 型;
        y_predict = np.array(decision_scores >= threshold, dtype=‘int‘)
        fprs.append(FPR(y_test, y_predict))
        tprs.append(TPR(y_test, y_predict))
  • 绘制 ROC 曲线

    import matplotlib.pyplot as plt
    plt.plot(fprs, tprs)
    plt.show()

  • 分析:

  1. ROC 曲线与图形边界围成的面积,作为衡量模型优劣的标准,面积越大,模型越优;
  2. 可以是同样算法不同超参数所得的不同模型,也可以是不同算法所得的不同模型;

三、scikit-learn 中的ROC

  • 模块及使用格式

    from sklearn.metrics import roc_curve
    
    fprs, tprs, thresholds = roc_curve(y_test, decision_scores)
  • 计算 ROC 曲线与坐标轴围成的面积:称 ROC 的 auc;

  • 面积越大,模型越优;

  • from sklearn.metrics import roc_auc_score
    
    roc_auc_score(y_test, decision_scores)

原文地址:https://www.cnblogs.com/volcao/p/9404519.html

时间: 2024-11-07 14:37:20

机器学习:评价分类结果(ROC 曲线)的相关文章

scikit-learn机器学习(二)逻辑回归进行二分类(垃圾邮件分类),二分类性能指标,画ROC曲线,计算acc,recall,presicion,f1

数据来自UCI机器学习仓库中的垃圾信息数据集 数据可从http://archive.ics.uci.edu/ml/datasets/sms+spam+collection下载 转成csv载入数据 import matplotlib matplotlib.rcParams['font.sans-serif']=[u'simHei'] matplotlib.rcParams['axes.unicode_minus']=False import pandas as pd import numpy as

机器学习之分类器性能指标之ROC曲线、AUC值

分类器性能指标之ROC曲线.AUC值 一 roc曲线 1.roc曲线:接收者操作特征(receiveroperating characteristic),roc曲线上每个点反映着对同一信号刺激的感受性. 横轴:负正类率(false postive rate FPR)特异度,划分实例中所有负例占所有负例的比例:(1-Specificity) 纵轴:真正类率(true postive rate TPR)灵敏度,Sensitivity(正类覆盖率) 2针对一个二分类问题,将实例分成正类(postive

ROC曲线是通过样本点分类概率画出的 例如某一个sample预测为1概率为0.6 预测为0概率0.4这样画出来,此外如果曲线不是特别平滑的话,那么很可能存在过拟合的情况

ROC和AUC介绍以及如何计算AUC from:http://alexkong.net/2013/06/introduction-to-auc-and-roc/ ROC(Receiver Operating Characteristic)曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣,对两者的简单介绍见这里.这篇博文简单介绍ROC和AUC的特点,以及更为深入地,讨论如何作出ROC曲线图以及计算AUC. ROC曲线 需要提前说明的是,我们这里只讨论二值分类器.对

机器学习之roc曲线

机器学习之ROC曲线 roc曲线全称受试者工作曲线,ROC曲线下面积就是AUC(Area under the curve),AUC用来衡量二分类机器学习算法的性能,即泛化能力 这里有几个概念,真阳性率,假阳性率,真阴性率,假阴性率,这四个率的产生是一个相对指标,即有一个参考标准,比如一个检测方法的金标准, 我用另一种方法检测,如下图所示 真(预测值) 假(预测值) 真(金标准) 20 5 假(金标准) 3 15 这个表里面我们分别来计算真阳性率和假阳性率(注意:所谓的真阳性率和假阳性率都是依据金

Precision/Recall和ROC曲线与分类

[混淆矩阵与Precision/Recall和ROC曲线的关系] Precision/Recall和ROC曲线的基本介绍可以看我的另一篇博客: http://blog.csdn.net/adminabcd/article/details/46475361 接下来我们引入混淆矩阵: 当我们对样本进行分类时,会分成正例样本(记为1)和负例样本(记为0),根据分类结果与原始分类,可以计算出相应的混淆矩阵.那么则有: Precision(pre)=true positive rate=tp/(tp+fp

多分类下的ROC曲线和AUC

本文主要介绍一下多分类下的ROC曲线绘制和AUC计算,并以鸢尾花数据为例,简单用python进行一下说明.如果对ROC和AUC二分类下的概念不是很了解,可以先参考下这篇文章:http://blog.csdn.net/ye1215172385/article/details/79448575 由于ROC曲线是针对二分类的情况,对于多分类问题,ROC曲线的获取主要有两种方法: 假设测试样本个数为m,类别个数为n(假设类别标签分别为:0,2,...,n-1).在训练完成后,计算出每个测试样本的在各类别

【机器学习】--模型评估指标之混淆矩阵,ROC曲线和AUC面积

一.前述 怎么样对训练出来的模型进行评估是有一定指标的,本文就相关指标做一个总结. 二.具体 1.混淆矩阵 混淆矩阵如图: 相关公式: 公式解释: fp_rate: tp_rate: recall:(召回率) 值越大越好 presssion:(准确率) TP:本来是正例,通过模型预测出来是正列 TP+FP:通过模型预测出来的所有正列数(其中包括本来是负例,但预测出来是正列) 值越大越好 2.ROC曲线 过程:对第一个样例,预测对,阈值是0.9,所以曲线向上走,以此类推. 对第三个样例,预测错,阈

从TP、FP、TN、FN到ROC曲线、miss rate、行人检测评估

想要在行人检测的evaluation阶段要计算miss rate,就要从True Positive Rate讲起:miss rate = 1 - true positive rate true positive rate毕竟是一个rate,是一个比值.是谁和谁比呢?P 要从TP.FP.TN.FN讲起. 考虑一个二分类问题:一个item,它实际值有0.1两种取值,即负例.正例:而二分类算法预测出来的结果,也只有0.1两种取值,即负例.正例.我们不考虑二分类算法细节,当作黑箱子就好:我们关心的是,预

混淆矩阵、准确率、精确率/查准率、召回率/查全率、F1值、ROC曲线的AUC值

准确率.精确率(查准率).召回率(查全率).F1值.ROC曲线的AUC值,都可以作为评价一个机器学习模型好坏的指标(evaluation metrics),而这些评价指标直接或间接都与混淆矩阵有关,前四者可以从混淆矩阵中直接计算得到,AUC值则要通过ROC曲线进行计算,而ROC曲线的横纵坐标又和混淆矩阵联系密切,所以在了解这些评价指标之前,先知道什么是混淆矩阵很有必要,也方便记忆. 1.混淆矩阵 对于一个二分类问题,我们可以得到如表 1所示的的混淆矩阵(confusion matrix): 表