精华内容
下载资源
问答
  • python绘制ROC曲线

    千次阅读 2019-06-03 19:35:10
    ROC曲线 ROC曲线是一种模型评价指标,其横轴是假阳性率,纵轴是真阳性率, import matplotlib.pyplot as plt from keras.utils import to_categorical from sklearn import metrics from sklearn.metrics import roc...

    ROC曲线
    ROC曲线是一种模型评价指标,其横轴是假阳性率,纵轴是真阳性率,

    import matplotlib.pyplot as plt
    from keras.utils import to_categorical
    from sklearn import metrics
    from sklearn.metrics import roc_curve, auc  ###计算roc和auc
    def acu_curve(y,prob):
    #y真实prob预测
        fpr,tpr,threshold = roc_curve(y,prob) ###计算真阳性率和假阳性率
        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.3f)' % 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('AUC')
        plt.legend(loc="lower right")
     
        plt.show()
    

    在这里插入图片描述

    展开全文
  • Python绘制ROC曲线

    千次阅读 2018-06-03 16:05:31
    ROC曲线全程为受试者工作特性(Receiver Operating Characteristic)曲线,可以用来评价学习器的泛化性能。首先我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要的...

    ROC曲线全程为受试者工作特性(Receiver Operating Characteristic)曲线,可以用来评价学习器的泛化性能。首先我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要的值,分别以他们为横纵坐标作图,就得到了ROC曲线。ROC曲线的横轴为假正例率(FPR), 纵轴为真正例率(TPR),计算公式分别为:
    FPR = FP/(FP+TN);            TPR=TP/(TP+FN).

    程序分为三个部分:1.获得学习器的输出值    2.根据输出求出FPR和TPR    3.绘制ROC图
    一 、获得学习器的输出
    x = tf.placeholder(dtype=tf.float32, shape=[1, 224, 224, 3])
    sess = tf.InteractiveSession()
    
    #build the network
    arg_scope = alexnet.alexnet_v2_arg_scope()
    with slim.arg_scope(arg_scope):
        logits, _ = alexnet.alexnet_v2(x, num_classes=2, is_training=False)
    '''
    model = net.Alexnet("pre_trained/alexnet.npy")
    logits = model.build(x)
    '''
    saver = tf.train.Saver()
    tf.global_variables_initializer().run()
    
    #restore the pre-trained weights
    saver.restore(sess, "logs/alexnet_2000.ckpt")
    
    def get_test_result(sess, path, true_result=0, begin=0, end=1000):
        error = 0
        lit = []
    
        for parent,_,filenames in os.walk(path):
            filenames.sort(key=lambda x: int(x[:-4]))
            filenames = filenames[begin:end]
    
            for filename in filenames:
                file_path = parent + "/" + filename
    
                #preprocess the images, by inception v1, image=2*(image/255.0) - 1.0, scale the image to (-1,1)
                image = cv2.resize(cv2.imread(file_path), (224,224))
                image = 2*(image / 255.0) - 1.0
                img = np.reshape(image, [-1,224,224,3])
    
                # calculate the logits
                predict = sess.run(logits,feed_dict={x:img})
                predict = np.reshape(predict, [-1])
    
                result = np.argmax(predict, axis=0)
    
                if result!=true_result:
                    print(predict, file_path)
                    error += 1
                else:
                    print(predict)
    
                lit.append(predict[0])
    
            # sort the list from small to large, if want to get the reverse result, use lit.sort(reverse=True)
            lit.sort()
            err = error/len(filenames)
    
            return lit ,err
    
    #get the normal and polyp score list
    normal_list, err_normal = get_test_result(sess, "/home/hdl/ALL_IMAGE/dataset/normal", true_result=1)
    polyp_list, err_polyp = get_test_result(sess, "/home/hdl/ALL_IMAGE/dataset/polyp", true_result=0, begin=5000, end=-1)
    
    #reverse the list
    normal_list = normal_list[::-1]
    polyp_list = polyp_list[::-1]
    
    #get the all score list used to preduct threadhold
    all_list = normal_list + polyp_list
    all_list.sort(reverse=True)
    二、根据输出求出FPR和TPR
    normal = np.array(normal_list)
    polyp = np.array(polyp_list)
    
    TPR = []
    FPR = []
    for threadhold in all_list:
        temp_polyp = polyp >= threadhold
        temp_normal = normal >= threadhold
    
        tp = np.sum(temp_polyp == 1)
        fn = np.sum(temp_polyp == 0)
    
        tn = np.sum(temp_normal == 0)
        fp = np.sum(temp_normal == 1)
    
        #the code above can be replaced by this
        '''
        tp = np.sum(temp_polyp >= threadhold)
        '''
    
        tpr = tp/(tp+fn)
        fpr = fp/(tn+fp)
    
        TPR.append(tpr)
        FPR.append(fpr)
    
    #combine the data and saved as .npy
    arr = np.concatenate((FPR,TPR), axis=0)
    np.save("Alexnet_scratch.npy", arr)

    三、绘制ROC曲线

    import numpy as np
    from matplotlib import pyplot as plot
    
    alexnet_finetune = np.load("Alexnet_finetune.npy")
    Alexnet_scratch = np.load("Alexnet_scratch.npy")
    VGG = np.load("VGG.npy")
    
    alexnet_finetune = np.reshape(alexnet_finetune, newshape=[2,-1])
    Alexnet_scratch = np.reshape(Alexnet_scratch, newshape=[2,-1])
    VGG = np.reshape(VGG, newshape=[2,-1])
    
    plot.title("Receive operating characteristic curve")
    plot.xlabel("False Positive Rate")
    plot.ylabel("True Positive Rate")
    
    plot.plot(alexnet_finetune[0],alexnet_finetune[1], color="red", label="Alexnet finetune")
    plot.plot(Alexnet_scratch[0], Alexnet_scratch[1], color="blue", label="Alexnet scratch")
    plot.plot(VGG[0], VGG[1], color="green", label="VGG with global avgpool")
    
    plot.legend()
    plot.show()
    


    展开全文
  • #-*- coding: utf-8 -*- import matplotlib.pyplot as plt def get_data(path): f = open(path) data_list = f.readlines() return data_list def get_truth_value(): threshold_list = [] ...
  • 基于python绘制ROC曲线

    万次阅读 2018-07-17 13:53:01
    基于python绘制ROC曲线,直接附代码: from sklearn.metrics import roc_curve, auc from sklearn.model_selection import train_test_split ##划分数据集 X_train, X_test, y_train, y_test = train_test_split(X,...

    基于python绘制ROC曲线,直接附代码:

    from sklearn.metrics import roc_curve, auc
    from sklearn.model_selection import train_test_split
    ##划分数据集
    X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, test_size=0.1, random_state=0)
    y_score = clf.fit(X_train, y_train).predict_proba(X_test) #随机森林
    fpr, tpr, thresholds = roc_curve(y_test, y_score[:,1]);
    roc_auc = auc(fpr, tpr) 

    ##确定最佳阈值

    right_index = (tpr + (1 - fpr) - 1)
    yuzhi = max(right_index)
    index = right_index.index(max(right_index))
    tpr_val = tpr(index)
    fpr_val = fpr(index)
    ## 绘制roc曲线图
    plt.subplots(figsize=(7,5.5));
    plt.plot(fpr, tpr, color='darkorange',
             lw=2, 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('ROC Curve');
    plt.legend(loc="lower right");
    plt.show()

    展开全文
  • Python 绘制ROC曲线的例子ROC的全称是“受试者工作特征”(Receiver Operating Characteristic)曲线。根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值(TPR、...

    Python 绘制ROC曲线的例子

    ROC的全称是“受试者工作特征”(Receiver Operating Characteristic)曲线。

    根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值(TPR、FPR),分别以它们为横、纵坐标作图。与PR曲线使用查准率、查全率为纵、横不同,ROC 曲线的纵轴是“真正例率”(True Positive Rate,TTR),横轴是“假正例率”(False Positive Rate,FPR)。

    如图所示:

    watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NlYWdhbDg5MA==,size_16,color_FFFFFF,t_70

    下面使用Python来作出该图:

    # -*- coding: utf-8 -*-

    """

    Created on Tue Mar 24 19:04:21 2020

    @author: Bean029

    """

    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

    from sklearn.metrics import roc_auc_score

    # Import some data to play with

    iris = datasets.load_iris()

    X = iris.data

    y = iris.target

    # Binarize the output

    y = label_binarize(y, classes=[0, 1, 2])

    n_classes = y.shape[1]

    # 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 = 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)

    # Compute ROC curve and ROC area for each class

    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"])

    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()

    ROC曲线与PR曲线的取舍

    相对来讲ROC曲线会稳定很多,在正负样本量都足够的情况下,ROC曲线足够反映模型的判断能力。因此,对于同一模型,PRC和ROC曲线都可以说明一定的问题,而且二者有一定的相关性,如果想评测模型效果,也可以把两条曲线都画出来综合评价。对于有监督的二分类问题,在正负样本都足够的情况下,可以直接用ROC曲线、AUC、KS评价模型效果。在确定阈值过程中,可以根据Precision、Recall或者F1来评价模型的分类效果。对于多分类问题,可以对每一类分别计算Precision、Recall和F1,综合作为模型评价指标。

    ROC曲线下的面积,介于0.1和1之间,作为数值可以直观的评价分类器的好坏,值越大越好。

    ROC曲线的特征是Y轴上的真阳性率和X轴上的假阳性率。

    这意味着图的左上角是“理想”点——假阳性率为0,真阳性率为1。这不是很现实,但它确实意味着曲线下较大的面积(AUC)通常更好。

    ROC曲线的“陡峭度”也很重要,因为最大化真阳性率同时最小化假阳性率是理想的。

    ROC曲线通常用于二值分类以研究分类器的输出。为了将ROC曲线和ROC区域扩展到多标签分类中,需要对输出进行二值化。每个标签可以绘制一条ROC曲线,但也可以通过将标签指示符矩阵的每个元素视为二进制预测(微观平均)来绘制ROC曲线。

    展开全文
  • Python绘制ROC曲线

    万次阅读 多人点赞 2017-09-21 17:44:23
    在分类模型中,ROC曲线和AUC值经常作为衡量一个模型拟合程度的指标。最近在建模过程中需要作出模型的ROC曲线,参考了sklearn官网的教程和博客。现在将自己的学习过程总结如下,希望对初次接触的同学有所帮助。PS:...
  • Python 绘制ROC曲线的例子 ROC的全称是“受试者工作特征”(Receiver Operating Characteristic)曲线。 根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值...
  • python绘制roc曲线,lift曲线

    万次阅读 2018-02-09 11:22:29
    在建模过程中发现python竟然没有自动生成roc曲线和lift曲线的包。我自己写了两个函数,能够做出roc曲线和lift曲线。希望可以给大家工作和学习带来一些方便。 函数如下,大家可以直接调用。 from scipy.stats ...
  • python绘制ROC曲线并计算AUC

    千次阅读 2018-04-17 16:42:58
    相比于F1-Score对项目的不平衡有更大的容忍性,目前常见的机器学习库中(比如scikit-learn)一般也都是集成该指标的计算,其计算原理可以参考这个ROC和AUC介绍以及如何计算AUC ,但是有时候模型是单独的或者自己编写...
  • 然后用线段连接相邻点即ROC曲线 ''' import matplotlib.pyplot as plt list=[0.8,0.9,0.2,0.1,0.4,0.6,0.7,0.3,0.8,0.25] tf_list=[1,1,0,0,0,0,1,0,1,0] #给定一个分类器打分的列表,给定真实的正反例,4个正例(1,...
  • I am trying to plot a ROC curve to evaluate the accuracy of a prediction model I developed in Python using logistic regression packages. I have computed the true positive rate as well as the false pos...
  • I am trying to plot a ROC curve to evaluate the accuracy of a prediction model I developed in Python using logistic regression packages. I have computed the true positive rate as well as the false pos...
  • ROC结果源数据:鸢尾花数据集(仅采用其中的两种类别的花进行训练和检测)Summaryfeatures:['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']实例:[5.1, 3.5, 1.4, 0.2]target...
  • 主要介绍了基于python实现ROC曲线绘制广场解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 三、 python绘制ROC曲线(二分类) 1、思路 2、关键代码 3、完整代码 四、 python绘制ROC曲线(多分类) 五、参考文献 一、ROC曲线 定义可见: 《机器学习——支持向量机SVM实例》 作用:通过ROC曲线可以获取...
  • Python绘绘制制KS曲曲线线的的实实现现方方法法 本篇文章主要介绍了Python绘制KS曲线的实现方法小编觉得挺不错的现在分享给大家也给大家做个参考 一起 随小编过来看看吧 python实现KS曲线相关使用方法请参考上篇博客...
  • ROC结果源数据:鸢尾花数据集(仅采用其中的两种类别的花进行训练和检测)Summaryfeatures:['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']实例:[5.1, 3.5, 1.4, 0.2]target...
  • ROC结果源数据:鸢尾花数据集(仅采用其中的两种类别的花进行训练和检测)Summaryfeatures:[‘sepal length (cm)’, ‘sepal width (cm)’, ‘petal length (cm)’, ‘petal width (cm)’]实例:[5.1, 3.5, 1.4, 0.2...
  • python绘制roc曲线计算阈值

    千次阅读 2018-03-20 15:56:47
    thresh.npy为正样例与反样例分别算出来的值,删去错误的预测样本,通过画roc曲线来计算阈值 # -*- coding: utf-8 -*- import matplotlib.pyplot as plt import numpy as np from sklearn.metrics import roc_curve,...
  • stats_roc = xlrd.open_workbook("stats_roc.xls"); sheet1 = stats_roc.sheets()[0]; #获取sheet1 size = sheet1.nrows; #获取行数 y_Actual = sheet1.col_values(0) [1:size]; #获取标签,第零行是标题,数据...
  • 给大家介绍了如何利用PythonROC曲线,以及AUC值的计算,有需要的朋友们可以参考借鉴,下面来一起看看吧。
  • Python绘制ROC

    千次阅读 2020-03-29 21:37:27
    本案例以sklearn中自带的鸢尾花数据集为例,主要使用sklearn.metric库中的方法来绘制ROC图 所用sklearn中函数的方法具体参数可以看官网文档: ... 环境:python...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,391
精华内容 956
关键字:

python绘制roc曲线

python 订阅