首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不使用scikit的情况下绘制ROC-AUC图形

如何在不使用scikit的情况下绘制ROC-AUC图形
EN

Stack Overflow用户
提问于 2021-08-27 09:54:56
回答 1查看 210关注 0票数 1

我有以下列表,其中包含(TP、FP、FN)的多个元组:

代码语言:javascript
复制
[(12, 0, 0), (5, 2, 2), (10, 0, 1), (7, 1, 1), (13, 0, 0), (7, 2, 2), (11, 0, 2)]

每个元组表示单个图像的分数。这意味着我有7个图像,我已经计算了一个目标检测任务的分数。现在,我使用以下函数计算每个图像(元组)的精确度和召回率:

代码语言:javascript
复制
def calculate_recall_precision(data):
    precisions_bundle = []
    recalls_bundle = []

    for tp, fp, fn in data:
        precision = tp / (tp + fp)
        recall = tp / (tp + fn)
        precisions_bundle.append(precision)
        recalls_bundle.append(recall)

    return (precisions_bundle, recalls_bundle)

此函数返回包含两个列表的元组。第一个是每个图像的精度值,第二个是每个图像的召回值。现在我的主要目标是用matplotlib绘制ROC和AUC曲线。请注意,我不想使用scikit-学习库。

EN

回答 1

Stack Overflow用户

发布于 2022-05-03 06:46:34

您可以简单地使用matplotlib.pyplot.plot方法。例如:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt

def plot_PR(precision_bundle, recall_bundle, save_path:Path=None):
    line = plt.plot(recall_bundle, precision_bundle, linewidth=2, markersize=6)
    line = plt.title('Precision/Recall curve', size =18, weight='bold')
    line = plt.ylabel('Precision', size=15)
    line = plt.xlabel('Recall', size=15 )
    
    random_classifier_line_x = np.linspace(0, 1, 10)
    random_classifier_line_y = np.linspace(1, 0, 10)
    _ = plt.plot(random_classifier_line_x, random_classifier_line_y, color='firebrick', linestyle='--')
    if save_path:
        outname = save_path / 'PR_curve_thresh_opt.png'
        _ = plt.savefig(outname, dpi = 100, bbox_inches='tight' )
    return line

然后使用它作为plot_PR(precision_bundle, recall_bundle)

注意:在这里,我还为随机分类器添加了虚线,并考虑了如果您想保存数字的可能性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68951426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档