【问题标题】:Calculate precision and recall on WANG database在 WANG 数据库上计算准确率和召回率
【发布时间】:2015-06-30 21:19:06
【问题描述】:

我在 MATLAB 中制作了一个 CBIR 系统,并使用相似度测量作为欧几里得距离。 对每个查询图像使用它,我检索前 20 个图像。

我使用WANG Dataset 测试我的系统。
它包含 10 个类别(如非洲人、巴士、玫瑰等),每个类别包含 100 张图片。(总共 1000 张图片)。

我的方法:
1. 我正在使用相关图、共现矩阵(CCM)和像素扫描模式(DBPSP)之间的差异来构建我的向量(分别为 64+196+28=288 维)。

  1. 1000 db 图像中的每一个我都预先构建了它的向量。
  2. 现在出现了一个查询图像,我也构建了它的向量(再次为 228 维)。
  3. 我使用欧几里得距离来表示相似性,并按欧几里得距离的降序对 db 图像向量进行排序。
  4. 显示前 20 个结果。

  5. 在这 20 个人中,我可以有 TP 或 FP。

对于单个查询图像,我可以使用 link 轻松计算 Precision 和 Recall 并绘制 PR 曲线。

我怎样才能为全班做同样的事情?

我的方法:对于属于 A 类的每个图像,找到前 20 个图像,它们分别是 TP(真阳性)和 FP(假阳性)。

        TP   FP

Image1  17   3  
Image2  15   5  
...  
...  
Image100  10  10  
Total   1500 500  

A 类精度 =1500/(2000) = .75(对吗??)
召回 A 类 ---> 卡住 ??
PR曲线---->卡住了??有些链接说我需要一个分类器,有些则不需要……我真的很困惑。

【问题讨论】:

  • 你有混淆矩阵还是只有TP/FP?
  • 只有 TP 和 FP。在 20 张图像中,如果图像属于正确的类别,我将 TP 增加 1,如果不是,我将 FP 增加 1。如何检查图像的类别是否正确很简单,因为 A 类图像是从 0 到 99,然后 B 类是从 100 到 199,依此类推。所以一个简单的 if-else 循环给了我答案。
  • 呸呸呸呸呸我的解决方案将无法正常工作:(
  • 让我发一个新的
  • FN或者false数怎么样?您需要计算召回率

标签: matlab image-processing cbir precision-recall


【解决方案1】:

如您所述,您可以按如下方式计算精度。

P = TP ./ ( TP + FP );

但是,您需要有 FN 或总假数才能计算召回率。作为discussed in chat,您需要找到一种方法来确定您的 FN 和 FP 数据。然后你可以使用下面的公式来计算召回率。

R = TP ./ ( TP + FN )

如果你有混淆矩阵或数据,可以使用我自定义的confusionmat2f1.m 来计算精度、召回率和f1 分数。这假设混淆矩阵的格式为Matlab defines it。每行的解释是内联的。如果您需要更多说明,请告诉我。

function [F,P,R] = confusionmat2f1( C )
    %% confusionmat2f1( C )
    %
    % Inputs
    % C - Confusion Matrix
    %
    % Outputs
    % F - F1 score column vector
    % P - Precision column vector
    % R - Recall column vector
    
    %% 
    
    % Confusion Matrix to Probability
    M = sum( C, 3 );
    
    % Calculate Precision
    P = diag(M) ./ sum(M,1)';
    
    % Calculate Recall
    R = diag(M) ./ sum(M,2);

    % Calculate F1 Score
    F = f1( P, R );

【讨论】:

  • 如何计算 FN 和 TN?我能做的唯一操作是拍摄一张图像并找到前 20 张图像,然后在 20 张图像中,如果该图像属于正确的类别,我将 TP 增加 1,如果不是,我将 FP 增加 1。不使用分类器我不能这样做吗?如果不能,你能建议一些 MATLAB 内置的吗?
  • 对于 FN,那些被归类为否,但实际上是。对于 TN,那些被归类为否,实际上是否。您需要 6 个变量中的 4 个(TN、FN、TP、FP、total true、total false)来计算精度和召回率。您需要重写代码以考虑其中一个变量,但我建议您创建一个混淆矩阵。它使分析变得更加容易:)
  • 这也不难。只要您知道类被归类为什么,以及基本事实(应该是什么)是什么,您就可以将其输入confusionmat 函数。
  • 同时拥有类预测和类预期向量将使调试更加容易:D
  • 我没有使用任何分类。我只是在 queryImageVector 和所有 dbImageVector 之间找到欧几里得距离。 Atlast 我按降序排序,检索前 20 名。那我是不是不能计算召回率了?
猜你喜欢
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
  • 2020-02-25
  • 2022-12-17
  • 2016-07-02
  • 2017-06-21
  • 2021-10-13
  • 1970-01-01
相关资源
最近更新 更多