我在MATLAB中制作了一个CBIR系统,并使用相似度测量作为欧氏距离。 对每个查询图像使用它,我检索前20个图像。
我使用WANG Dataset来测试我的系统 它包含10个类(如非洲人,公共汽车,玫瑰等),每个类别包含100个图像。(总共1000个图像)。
我的方法:
1.我使用Correlogram,共现矩阵(CCM)和像素扫描模式(DBPSP)之间的差异来构建我的向量(分别为64 + 196 + 28 = 288维)。
显示前20个结果。
在那20个我可以有TP或FP。
对于单个查询图像,我可以使用此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曲线---->卡住 ??有些链接说我需要一个分类器,有些不是......我真的很困惑。
答案 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 );