精华内容
下载资源
问答
  • 多分类问题的roc曲线
    千次阅读
    2021-09-20 11:22:13
    更多相关内容
  • 主要介绍了python实现二分类多分类ROC曲线教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 基于python的多分类ROC曲线生成2

    千次阅读 2021-02-03 20:33:41
    from sklearn.metrics import confusion_matrix, roc_curve, aucfrom sklearn.preprocessing import label_binarizeimport numpy as npy_test_bi = label_binarize(y_test, classes=[0,1,2,3,4,5,6,7,8,9,10,11,12,1...

    from sklearn.metrics import confusion_matrix, roc_curve, auc

    from sklearn.preprocessing import label_binarize

    import numpy as np

    y_test_bi = label_binarize(y_test, classes=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, 19,20,21,2,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,3,40,41,42,43,44,45])

    y_pred_bi = label_binarize(y_pred, classes=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, 19,20,21,2,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,3,40,41,42,43,44,45])

    # Compute ROC curve and ROC area for each class

    fpr = dict()

    tpr = dict()

    roc_auc = dict()

    for i in range(2):

    fpr[i], tpr[i], _ = roc_curve(y_test_bi, y_pred_bi)

    roc_auc[i] = auc(fpr[i], tpr[i])

    y_test_bi和{}的形状都是{},因为有46个类和300个测试数据点。在

    这两个矩阵的格式是每列代表一个类,并且由0s或{}s组成

    但我得到了一个错误:

    ^{pr2}$

    展开全文
  • 多分类ROC曲线

    万次阅读 多人点赞 2019-02-14 11:13:38
    转自 ...1 基本概念 一个分类模型(分类器)是一个将某个实例映射到一个特定类的过程....首先来考虑一个两类预测问题(双分类器),其结果要么是真(p)要么是假(n).在双分类器中有4类可能的输出.如果输出...

    转自
    https://blog.csdn.net/xyz1584172808/article/details/81839230

    1 基本概念

    一个分类模型(分类器)是一个将某个实例映射到一个特定类的过程.分类器的结果可以是给出该实例所属的类别,也可以给定该实例属于某个类别的概率。
    首先来考虑一个两类预测问题(双分类器),其结果要么是真(p)要么是假(n).在双分类器中有4类可能的输出.如果输出的预测是p而真实的结果也是p,那么这就叫做真阳性(TP);然而如果真实的结果是n,则这就叫做假阳性(FP).相反的来说,一个真阴性发生在预测结果和实际结果都为n的时候,而假阴性是当预测输出是n而实际值是p的时候,这几种情况可以用下面的矩阵来组织。
    分类情况
    举一个现实世界中的恰当的例子,考虑一个检测一个人是否得一种病的测试.一个假阳性就是一个人被测试是有这种病的,但实际却没有的情况.一个假阴性就是一个人被测试是健康的,但实际却是得病的情况。
    上面那个矩阵就称为混淆矩阵:
    混淆矩阵
    由图中公式可知各个指标的含义:
    precision:预测为对的当中,原本为对的比例(越大越好,1为理想状态)
    recall:原本为对的当中,预测为对的比例(越大越好,1为理想状态)
    F-measure:F度量是对准确率和召回率做一个权衡(越大越好,1为理想状态,此时precision为1,recall为1)
    accuracy:预测对的(包括原本是对预测为对,原本是错的预测为错两种情形)占整个的比例(越大越好,1为理想状态)
    fp rate:原本是错的预测为对的比例(越小越好,0为理想状态)
    tp rate:原本是对的预测为对的比例(越大越好,1为理想状态)
    在了解了上述的一些指标的含义以及计算公式后,接下来就可以进入ROC曲线了。
    如下示例图中,曲线的横坐标为false positive rate(FPR),纵坐标为true positive rate(TPR)。
    ROC曲线示例
    要生成一个ROC曲线,只需要真阳性率(TPR)和假阳性率(FPR)。TPR决定了一个分类器或者一个诊断测试在所有阳性样本中能正确区分的阳性案例的性能.而FPR是决定了在所有阴性的样本中有多少假阳性的判断. ROC曲线中分别将FPR和TPR定义为x和y轴,这样就描述了真阳性(获利)和假阳性(成本)之间的博弈.而TPR就可以定义为灵敏度,而FPR就定义为1-特异度,因此ROC曲线有时候也叫做灵敏度和1-特异度图像.每一个预测结果在ROC曲线中以一个点代表.
    有了ROC曲线后,可以引出AUC的含义:ROC曲线下的面积(越大越好,1为理想状态)

    2 ROC曲线图中的特殊点和线

    (1)ROC曲线图中的四个点

    第一个点,(0,1),即FPR=0, TPR=1,这意味着FN(false negative)=0,并且FP(false positive)=0。这是一个完美的分类器,它将所有的样本都正确分类。第二个点,(1,0),即FPR=1,TPR=0,类似地分析可以发现这是一个最糟糕的分类器,因为它成功避开了所有的正确答案。第三个点,(0,0),即FPR=TPR=0,即FP(false positive)=TP(true positive)=0,可以发现该分类器预测所有的样本都为负样本(negative)。类似的,第四个点(1,1),分类器实际上预测所有的样本都为正样本。经过以上的分析,,ROC曲线越接近左上角,该分类器的性能越好。

    (2)ROC曲线图中的一条特殊线

    考虑ROC曲线图中的虚线y=x上的点。这条对角线上的点其实表示的是一个采用随机猜测策略的分类器的结果,例如(0.5,0.5),表示该分类器随机对于一半的样本猜测其为正样本,另外一半的样本为负样本。

    3 如何画ROC曲线

    对于一个特定的分类器和测试数据集,每一个实例都会得到一个分类结果,通过统计,利用上述公式,可以得到一组FPR和TPR结果,而要得到一个曲线,实际上需要一系列FPR和TPR的值。那么这一系列值是怎么构造出来的呢?
    在ROC曲线的定义中,有“as its discrimination threshold is varied.”这样一句话,而在本文最开始也提到了分类器的结果可以是“概率输出”,即表示分类器认为某个样本具有多大的概率属于正样本(或负样本),于是如果设置不同的threshold,那么分类结果就会有所变动,因此可以得到一系列FPR和TPR的值。
    接下来就是利用python实现ROC曲线,sklearn.metrics有roc_curve, auc两个函数,本文主要就是通过这两个函数实现二分类和多分类的ROC曲线。

    fpr, tpr, thresholds  =  roc_curve(y_test, scores) 
     
    • 1

    其中y_test为测试集的结果,scores为模型预测的测试集得分(注意:通过decision_function(x_test)计算scores的值);fpr,tpr,thresholds 分别为假正率、真正率和阈值。(应该是不同阈值下的真正率和假正率)。

    roc_auc =auc(fpr, tpr) 
     
    • 1

    其中roc_auc为计算的acu的值。

    (1)二分类问题中的ROC曲线

    本实例中的数据来源于sklearn中的鸢尾花(iris)数据,代码来源于LZ_Zack的博客,在最后参考链接里面会给出原博客的链接。

    # -*- coding: utf-8 -*-
    
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn import svm, datasets
    from sklearn.metrics import roc_curve, auc  ###计算roc和auc
    from sklearn import cross_validation
    
    # Import some data to play with
    iris = datasets.load_iris()
    X = iris.data
    y = iris.target
    
    ##变为2分类
    X, y = X[y != 2], y[y != 2]
    
    # Add noisy features to make the problem harder
    random_state = np.random.RandomState(0)
    n_samples, n_features = X.shape
    X = np.c_[X, random_state.randn(n_samples, 200 * n_features)]
    
    # shuffle and split training and test sets
    X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=.3,random_state=0)
    
    # Learn to predict each class against the other
    svm = svm.SVC(kernel='linear', probability=True,random_state=random_state)
    
    ###通过decision_function()计算得到的y_score的值,用在roc_curve()函数中
    y_score = svm.fit(X_train, y_train).decision_function(X_test)
    
    # Compute ROC curve and ROC area for each class
    fpr,tpr,threshold = roc_curve(y_test, y_score) ###计算真正率和假正率
    roc_auc = auc(fpr,tpr) ###计算auc的值
    
    plt.figure()
    lw = 2
    plt.figure(figsize=(10,10))
    plt.plot(fpr, tpr, color='darkorange',
             lw=lw, label='ROC curve (area = %0.2f)' % roc_auc) ###假正率为横坐标,真正率为纵坐标做曲线
    plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
    plt.xlim([0.0, 1.0])
    plt.ylim([0.0, 1.05])
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('Receiver operating characteristic example')
    plt.legend(loc="lower right")
    plt.show()
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    该实例的ROC图如下所示:
    二分类的ROC曲线

    (2)多分类问题中的ROC曲线

    对于多分类问题,ROC曲线的获取主要有两种方法:
    假设测试样本个数为m,类别个数为n。在训练完成后,计算出每个测试样本的在各类别下的概率或置信度,得到一个[m, n]形状的矩阵P,每一行表示一个测试样本在各类别下概率值(按类别标签排序)。相应地,将每个测试样本的标签转换为类似二进制的形式,每个位置用来标记是否属于对应的类别(也按标签排序,这样才和前面对应),由此也可以获得一个[m, n]的标签矩阵L。
    ①方法一:每种类别下,都可以得到m个测试样本为该类别的概率(矩阵P中的列)。所以,根据概率矩阵P和标签矩阵L中对应的每一列,可以计算出各个阈值下的假正例率(FPR)和真正例率(TPR),从而绘制出一条ROC曲线。这样总共可以绘制出n条ROC曲线。最后对n条ROC曲线取平均,即可得到最终的ROC曲线。
    ②方法二:
    首先,对于一个测试样本:1)标签只由0和1组成,1的位置表明了它的类别(可对应二分类问题中的‘’正’’),0就表示其他类别(‘’负‘’);2)要是分类器对该测试样本分类正确,则该样本标签中1对应的位置在概率矩阵P中的值是大于0对应的位置的概率值的。基于这两点,将标签矩阵L和概率矩阵P分别按行展开,转置后形成两列,这就得到了一个二分类的结果。所以,此方法经过计算后可以直接得到最终的ROC曲线。
    上面的两个方法得到的ROC曲线是不同的,当然曲线下的面积AUC也是不一样的。 在python中,方法1和方法2分别对应sklearn.metrics.roc_auc_score函数中参数average值为’macro’和’micro’的情况。下面参考sklearn官网提供的例子,对两种方法进行实现。

    # 引入必要的库
    import numpy as np
    import matplotlib.pyplot as plt
    from itertools import cycle
    from sklearn import svm, datasets
    from sklearn.metrics import roc_curve, auc
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import label_binarize
    from sklearn.multiclass import OneVsRestClassifier
    from scipy import interp
    
    # 加载数据
    iris = datasets.load_iris()
    X = iris.data
    y = iris.target
    # 将标签二值化
    y = label_binarize(y, classes=[0, 1, 2])
    # 设置种类
    n_classes = y.shape[1]
    
    # 训练模型并预测
    random_state = np.random.RandomState(0)
    n_samples, n_features = X.shape
    
    # shuffle and split training and test sets
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.5,random_state=0)
    
    # Learn to predict each class against the other
    classifier = OneVsRestClassifier(svm.SVC(kernel='linear', probability=True,
                                     random_state=random_state))
    y_score = classifier.fit(X_train, y_train).decision_function(X_test)
    
    # 计算每一类的ROC
    fpr = dict()
    tpr = dict()
    roc_auc = dict()
    for i in range(n_classes):
        fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])
        roc_auc[i] = auc(fpr[i], tpr[i])
    
    # Compute micro-average ROC curve and ROC area(方法二)
    fpr["micro"], tpr["micro"], _ = roc_curve(y_test.ravel(), y_score.ravel())
    roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])
    
    # Compute macro-average ROC curve and ROC area(方法一)
    # First aggregate all false positive rates
    all_fpr = np.unique(np.concatenate([fpr[i] for i in range(n_classes)]))
    # Then interpolate all ROC curves at this points
    mean_tpr = np.zeros_like(all_fpr)
    for i in range(n_classes):
        mean_tpr += interp(all_fpr, fpr[i], tpr[i])
    # Finally average it and compute AUC
    mean_tpr /= n_classes
    fpr["macro"] = all_fpr
    tpr["macro"] = mean_tpr
    roc_auc["macro"] = auc(fpr["macro"], tpr["macro"])
    
    # Plot all ROC curves
    lw=2
    plt.figure()
    plt.plot(fpr["micro"], tpr["micro"],
             label='micro-average ROC curve (area = {0:0.2f})'
                   ''.format(roc_auc["micro"]),
             color='deeppink', linestyle=':', linewidth=4)
    
    plt.plot(fpr["macro"], tpr["macro"],
             label='macro-average ROC curve (area = {0:0.2f})'
                   ''.format(roc_auc["macro"]),
             color='navy', linestyle=':', linewidth=4)
    
    colors = cycle(['aqua', 'darkorange', 'cornflowerblue'])
    for i, color in zip(range(n_classes), colors):
        plt.plot(fpr[i], tpr[i], color=color, lw=lw,
                 label='ROC curve of class {0} (area = {1:0.2f})'
                 ''.format(i, roc_auc[i]))
    
    plt.plot([0, 1], [0, 1], 'k--', lw=lw)
    plt.xlim([0.0, 1.0])
    plt.ylim([0.0, 1.05])
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('Some extension of Receiver operating characteristic to multi-class')
    plt.legend(loc="lower right")
    plt.show()
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84

    画出的ROC曲线如下图所示。
    多分类的ROC曲线
    如果是只需画出具体的某一类的ROC曲线,只需要修改下画图代码即可。

    plt.figure()
    lw = 2
    plt.plot(fpr[2], tpr[2], color='darkorange',
             lw=lw, label='ROC curve (area = %0.2f)' % roc_auc[2])
    plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
    plt.xlim([0.0, 1.0])
    plt.ylim([0.0, 1.05])
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('Receiver operating characteristic example')
    plt.legend(loc="lower right")
    plt.show()
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    画出的ROC曲线如下图所示。
    ROC曲线

    4 参考文献

    【1】(Fawcett, 2006),Fawcett, T. (2006). An introduction to ROC analysis. Pattern recognition letters, 27(8), 861-874.
    【2】Davis, J., & Goadrich, M. (2006, June). The relationship between Precision-Recall and ROC curves. In Proceedings of the 23rd international conference on Machine learning (pp. 233-240). ACM.
    【3】ROC和AUC介绍以及如何计算AUC
    【4】ROC曲线、AUC、Precision、Recall、F-measure理解及Python实现
    【5】ROC曲线
    【6】多分类下的ROC曲线和AUC
    【7】用Python画ROC曲线

    展开全文
  • 二类分类器的ROC曲线生成算法.pdf
  • ROC曲线,一般适用于你的分类器输出一个“概率值”,即这个样本属于某个类的概率是多少。 如此的话,你就需要设定一个阈值, 大于这个阈值属于正类,小于这个阈值属于负类。 从而,对于这个阈值P0, 就会得到对应的...
  • python:实现二分类多分类ROC曲线

    万次阅读 多人点赞 2019-03-04 11:26:19
    2分类.png") plt.show() print("--- %s seconds ---" % (time.time() - start_time)) ROC图如下所示: 多分类问题ROC曲线 ROC曲线通常用于二分类以研究分类器的输出。为了将ROC曲线和ROC区域扩展到类或标签...

    基本概念

    • precision:预测为对的当中,原本为对的比例(越大越好,1为理想状态)
    • recall:原本为对的当中,预测为对的比例(越大越好,1为理想状态)
    • F-measure:F度量是对准确率和召回率做一个权衡(越大越好,1为理想状态,此时precision为1,recall为1)
    • accuracy:预测对的(包括原本是对预测为对,原本是错的预测为错两种情形)占整个的比例(越大越好,1为理想状态)
    • fp rate:原本是错的预测为对的比例(越小越好,0为理想状态)
    • tp rate:原本是对的预测为对的比例(越大越好,1为理想状态)

    ROC曲线通常在Y轴上具有真阳性率,在X轴上具有假阳性率。这意味着图的左上角是“理想”点 - 误报率为零,真正的正率为1。这不太现实,但它确实意味着曲线下面积(AUC)通常更好。

    二分类问题:ROC曲线

    from __future__ import absolute_import
    from __future__ import division
    from __future__ import print_function
    import time
    start_time = time.time()
    import matplotlib.pyplot as plt
    from sklearn.metrics import roc_curve
    from sklearn.metrics import auc
    import numpy as np
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import recall_score,accuracy_score
    from sklearn.metrics import precision_score,f1_score
    from keras.optimizers import Adam,SGD,sgd
    from keras.models import load_model
    
    
    
    print('读取数据')
    X_train = np.load('x_train-rotate_2.npy')
    Y_train = np.load('y_train-rotate_2.npy')
    print(X_train.shape)
    print(Y_train.shape)
    
    
    print('获取测试数据和验证数据')
    X_train, X_valid, Y_train, Y_valid = train_test_split(X_train, Y_train, test_size=0.1, random_state=666)
    
    Y_train = np.asarray(Y_train,np.uint8)
    Y_valid = np.asarray(Y_valid,np.uint8)
    X_valid = np.array(X_valid, np.float32) / 255.
    
    
    print('获取模型')
    model = load_model('./model/InceptionV3_model.h5')
    opt = Adam(lr=1e-4)
    model.compile(optimizer=opt, loss='binary_crossentropy')
    
    
    print("Predicting")
    Y_pred = model.predict(X_valid)
    Y_pred = [np.argmax(y) for y in Y_pred]  # 取出y中元素最大值所对应的索引
    Y_valid = [np.argmax(y) for y in Y_valid]
    
    
    
    # micro:多分类  
    # weighted:不均衡数量的类来说,计算二分类metrics的平均
    # macro:计算二分类metrics的均值,为每个类给出相同权重的分值。
    precision = precision_score(Y_valid, Y_pred, average='weighted')
    recall = recall_score(Y_valid, Y_pred, average='weighted')
    f1_score = f1_score(Y_valid, Y_pred, average='weighted')
    accuracy_score = accuracy_score(Y_valid, Y_pred)
    print("Precision_score:",precision)
    print("Recall_score:",recall)
    print("F1_score:",f1_score)
    print("Accuracy_score:",accuracy_score)
    
    
    
    # 二分类 ROC曲线
    # roc_curve:真正率(True Positive Rate , TPR)或灵敏度(sensitivity)
    # 横坐标:假正率(False Positive Rate , FPR)
    fpr, tpr, thresholds_keras = roc_curve(Y_valid, Y_pred)
    auc = auc(fpr, tpr)
    print("AUC : ", auc)
    plt.figure()
    plt.plot([0, 1], [0, 1], 'k--')
    plt.plot(fpr, tpr, label='Keras (area = {:.3f})'.format(auc))
    plt.xlabel('False positive rate')
    plt.ylabel('True positive rate')
    plt.title('ROC curve')
    plt.legend(loc='best')
    plt.savefig("../images/ROC/ROC_2分类.png")
    plt.show()
    
    
    print("--- %s seconds ---" % (time.time() - start_time))
    

    ROC图如下所示:
    在这里插入图片描述

    多分类问题:ROC曲线

    ROC曲线通常用于二分类以研究分类器的输出。为了将ROC曲线和ROC区域扩展到多类或多标签分类,有必要对输出进行二值化。⑴可以每个标签绘制一条ROC曲线。⑵也可以通过将标签指示符矩阵的每个元素视为二元预测(微平均)来绘制ROC曲线。⑶另一种用于多类别分类的评估方法是宏观平均,它对每个标签的分类给予相同的权重。

    from __future__ import absolute_import
    from __future__ import division
    from __future__ import print_function
    import time
    start_time = time.time()
    import matplotlib.pyplot as plt
    from sklearn.metrics import roc_curve
    from sklearn.metrics import auc
    import numpy as np
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import recall_score,accuracy_score
    from sklearn.metrics import precision_score,f1_score
    from keras.optimizers import Adam,SGD,sgd
    from keras.models import load_model
    from itertools import cycle
    from scipy import interp
    from sklearn.preprocessing import label_binarize
    
    
    
    nb_classes = 5
    print('读取数据')
    X_train = np.load('x_train-resized_5.npy')
    Y_train = np.load('y_train-resized_5.npy')
    print(X_train.shape)
    print(Y_train.shape)
    
    
    print('获取测试数据和验证数据')
    X_train, X_valid, Y_train, Y_valid = train_test_split(X_train, Y_train, test_size=0.1, random_state=666)
    
    Y_train = np.asarray(Y_train,np.uint8)
    Y_valid = np.asarray(Y_valid,np.uint8)
    X_valid = np.asarray(X_valid, np.float32) / 255.
    
    
    print('获取模型')
    model = load_model('./model/SE-InceptionV3_model.h5')
    opt = Adam(lr=1e-4)
    model.compile(optimizer=opt, loss='categorical_crossentropy')
    
    
    print("Predicting")
    Y_pred = model.predict(X_valid)
    Y_pred = [np.argmax(y) for y in Y_pred]  # 取出y中元素最大值所对应的索引
    Y_valid = [np.argmax(y) for y in Y_valid]
    
    # Binarize the output
    Y_valid = label_binarize(Y_valid, classes=[i for i in range(nb_classes)])
    Y_pred = label_binarize(Y_pred, classes=[i for i in range(nb_classes)])
    
    
    # micro:多分类  
    # weighted:不均衡数量的类来说,计算二分类metrics的平均
    # macro:计算二分类metrics的均值,为每个类给出相同权重的分值。
    precision = precision_score(Y_valid, Y_pred, average='micro')
    recall = recall_score(Y_valid, Y_pred, average='micro')
    f1_score = f1_score(Y_valid, Y_pred, average='micro')
    accuracy_score = accuracy_score(Y_valid, Y_pred)
    print("Precision_score:",precision)
    print("Recall_score:",recall)
    print("F1_score:",f1_score)
    print("Accuracy_score:",accuracy_score)
    
    
    # roc_curve:真正率(True Positive Rate , TPR)或灵敏度(sensitivity)
    # 横坐标:假正率(False Positive Rate , FPR)
    
    
    # Compute ROC curve and ROC area for each class
    fpr = dict()
    tpr = dict()
    roc_auc = dict()
    for i in range(nb_classes):
        fpr[i], tpr[i], _ = roc_curve(Y_valid[:, i], Y_pred[:, i])
        roc_auc[i] = auc(fpr[i], tpr[i])
    
    # Compute micro-average ROC curve and ROC area
    fpr["micro"], tpr["micro"], _ = roc_curve(Y_valid.ravel(), Y_pred.ravel())
    roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])
    
    
    # Compute macro-average ROC curve and ROC area
    
    # First aggregate all false positive rates
    all_fpr = np.unique(np.concatenate([fpr[i] for i in range(nb_classes)]))
    
    # Then interpolate all ROC curves at this points
    mean_tpr = np.zeros_like(all_fpr)
    for i in range(nb_classes):
        mean_tpr += interp(all_fpr, fpr[i], tpr[i])
    
    # Finally average it and compute AUC
    mean_tpr /= nb_classes
    
    fpr["macro"] = all_fpr
    tpr["macro"] = mean_tpr
    roc_auc["macro"] = auc(fpr["macro"], tpr["macro"])
    
    
    
    # Plot all ROC curves
    lw = 2
    plt.figure()
    plt.plot(fpr["micro"], tpr["micro"],
             label='micro-average ROC curve (area = {0:0.2f})'
                   ''.format(roc_auc["micro"]),
             color='deeppink', linestyle=':', linewidth=4)
    
    plt.plot(fpr["macro"], tpr["macro"],
             label='macro-average ROC curve (area = {0:0.2f})'
                   ''.format(roc_auc["macro"]),
             color='navy', linestyle=':', linewidth=4)
    
    colors = cycle(['aqua', 'darkorange', 'cornflowerblue'])
    for i, color in zip(range(nb_classes), colors):
        plt.plot(fpr[i], tpr[i], color=color, lw=lw,
                 label='ROC curve of class {0} (area = {1:0.2f})'
                 ''.format(i, roc_auc[i]))
    
    plt.plot([0, 1], [0, 1], 'k--', lw=lw)
    plt.xlim([0.0, 1.0])
    plt.ylim([0.0, 1.05])
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('Some extension of Receiver operating characteristic to multi-class')
    plt.legend(loc="lower right")
    plt.savefig("../images/ROC/ROC_5分类.png")
    plt.show()
    
    
    print("--- %s seconds ---" % (time.time() - start_time))
    

    ROC图如下所示:
    在这里插入图片描述

    展开全文
  • 该软件包旨在通过使用置信区间计算类ROC-AUC和PR-AUC并生成ROC曲线和PR曲线的发布质量图来填补空白。 可通过访问用户友好的网站。 1引文 一旦发表,请引用我们的论文:(已提交)。 2安装 从GitHub安装...
  • python 分类问题roc曲线实战
  • 使用python制作ROC曲线进行多分类

    千次阅读 2021-07-19 17:58:24
    I want to draw ROC curves for each of my 46 classes. I have 300 test samples for which I've run my classifier to make a prediction.y_test is the true classes, and y_pred is what my classifier predicte...
  • 主要介绍了基于python实现ROC曲线绘制广场解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • ROC曲线 matlab实现

    2019-05-16 21:03:56
    接受者操作特性曲线 (receiver operating characteristic curve,简称ROC曲线),又称为感受性曲线(sensitivity curve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应,只不过是...
  • python 针对二分类问题roc曲线
  • matlab画ROC曲线

    2017-08-31 14:49:34
    使用matlab画ROC曲线,% predict - 分类器对测试集的分类结果 % ground_truth - 测试集的正确标签,这里只考虑二分类,即0和1 % auc - 返回ROC曲线的曲线下的面积
  • 本文通过对这些指标的原理做一个简单的介绍,然后用python分别实现二分类多分类ROC曲线。 1 基本概念 一个分类模型(分类器)是一个将某个实例映射到一个特定类的过程.分类器的结果可以是给出该实例所属的...
  • 多分类下的ROC曲线和AUC

    千次阅读 2018-08-07 11:24:00
    本文主要介绍一下多分类下的ROC曲线绘制和AUC计算,并以鸢尾花数据为例,简单用python进行一下说明。如果对ROC和AUC二分类下的概念不是很... 由于ROC曲线是针对二分类的情况,对于多分类问题ROC曲线的获取主要有两...
  • step1打开机器学习分类工具箱,导入数据选择“全部模型”进行训练;训练结果如图所示: step2 寻找准确度较高的几个模型导出代码(点击右上角的生成函数) step3 导出函数后将你的训练集,即已知的数据赋给...
  • 多分类-- ROC曲线

    2019-03-20 21:15:00
    本文主要介绍一下多分类下的ROC曲线绘制和AUC计算,并以鸢尾花数据为例,简单用python进行一下说明。如果对ROC和AUC二分类下的概念不是很... 由于ROC曲线是针对二分类的情况,对于多分类问题ROC曲线的获取主要有两...
  • ROC曲线绘制(python+sklearn+多分类)

    千次阅读 热门讨论 2020-07-29 13:06:51
    ROC曲线绘制要点(仅记录)
  • 答案是可以利用roc曲线来确定比较好的划分阈值。 ROC曲线介绍 二分类过程,设定阈值,大于该分数为1,小于该分数为0,统计计算TP, FN, FP,TN等数据计算FPR,TPR p(positive): 标签1 n(negative): 标签0 t(true)...
  • 多分类ROC曲线及AUC计算

    万次阅读 多人点赞 2020-06-04 01:47:57
    上一篇博客(https://blog.csdn.net/u010505915/article/details/106394765)介绍了二分类下的ROC曲线及AUC计算,本文主要介绍多分类下的ROC曲线及AUC计算。 对于多分类数据,假设测试样本个数为m,分类个数为n...
  • 这篇文章将先简单的介绍ROC和AUC,而后用实例演示如何python作出ROC曲线图以及计算AUC。 AUC介绍 AUC(Area Under Curve)是机器学习二分类模型中非常常用的评估指标,相比于F1-Score对项目的不平衡有更大的容忍性,...
  • 模式识别,贝叶斯分类、计算错误率,较好的分出两类样本集,画roc曲线
  • 一、roc曲线1、roc曲线:接收者操作特征(receiveroperating characteristic),roc曲线上每个点反映着对同一信号刺激的感受性。横轴:负正类率(false postive rate FPR)特异度,划分实例中所有负例占所有负例的比例;...
  • 深度学习 多分类roc曲线的绘制

    千次阅读 2019-10-30 09:12:25
    对于多分类问题ROC曲线的获取主要有两种方法: 假设测试样本个数为m,类别个数为n。在训练完成后,计算出每个测试样本的在各类别下的概率或置信度,得到一个[m, n]形状的矩阵P,每一行表示一个测试样本在各类别下...
  • 原标题:Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线原文链接:http://tecdat.cn/?p=15508 绘制ROC曲线通过Logistic回归进行分类加载样本数据。load fisheriris通过使用与versicolor和virginica物种相对应的...
  • import matplotlib.pyplot as plt from sklearn import svm, datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import label_binarize from sklearn.metrics import roc_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,081
精华内容 6,432
热门标签
关键字:

多分类问题的roc曲线