在 WANG 数据库上计算精度和召回率

Calculate precision and recall on WANG database

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

我已经使用 WANG Dataset 来测试我的系统。
它包含 10 classes(如非洲人、公共汽车、玫瑰等)每个包含 100 张图像。(总共 1000 张图像)。

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

  1. 我预先构建了每个 1000 db 图像的矢量。
  2. 现在查询图像来了,我也构建了它的矢量(又是 228 维)。
  3. 我使用欧几里德距离计算相似度,并按欧几里德距离的降序对数据库图像向量进行排序。
  4. 显示前 20 个结果。

  5. 这20个我可以有TP或者FP

对于单个查询图像,我可以使用此 link.

轻松计算 Precision 和 Recall 并绘制 PR 曲线

如何对整个 class 执行相同的操作?

我的方法:对于属于 class A 的每个图像,找到前 20 个图像及其各自的 TP(真阳性)和 FP(假阳性)。

        TP   FP

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

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

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

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