1

我在 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。

对于单个查询图像,我可以使用此链接轻松计算 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曲线---->卡住了??一些链接说我需要一个分类器,而有些则不需要......我真的很困惑。

4

1 回答 1

2

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

P = TP ./ ( TP + FP );

但是,您需要有 FN 或总假数才能计算召回率。正如聊天中所讨论的,您需要找到一种方法来确定您的 FN 和 FP 数据。然后您可以使用以下公式来计算召回率。

R = TP ./ ( TP + FN )

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

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 );
于 2015-04-22T23:59:05.853 回答