计算王数据库的精度和召回率

时间:2015-04-22 23:24:27

标签: matlab image-processing cbir precision-recall

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

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

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

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

  5. 在那20个我可以有TP或FP。

  6. 对于单个查询图像,我可以使用此link轻松计算精度和召回并绘制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曲线---->卡住 ??有些链接说我需要一个分类器,有些不是......我真的很困惑。

1 个答案:

答案 0 :(得分:2)

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

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