在 WANG 数据库上计算精度和召回率
Calculate precision and recall on WANG database
我在 MATLAB 中做了一个 CBIR 系统,并使用相似性测量作为欧氏距离。
对每个查询图像使用它,我检索前 20 个图像。
我已经使用 WANG Dataset 来测试我的系统。
它包含 10 classes(如非洲人、公共汽车、玫瑰等)每个包含 100 张图像。(总共 1000 张图像)。
我的方法:
1. 我正在使用相关图、共现矩阵 (CCM) 和像素扫描模式 (DBPSP) 之间的差异来构建我的向量(分别为 64+196+28=288 维)。
- 我预先构建了每个 1000 db 图像的矢量。
- 现在查询图像来了,我也构建了它的矢量(又是 228 维)。
- 我使用欧几里德距离计算相似度,并按欧几里德距离的降序对数据库图像向量进行排序。
显示前 20 个结果。
这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 );
我在 MATLAB 中做了一个 CBIR 系统,并使用相似性测量作为欧氏距离。 对每个查询图像使用它,我检索前 20 个图像。
我已经使用 WANG Dataset 来测试我的系统。
它包含 10 classes(如非洲人、公共汽车、玫瑰等)每个包含 100 张图像。(总共 1000 张图像)。
我的方法:
1. 我正在使用相关图、共现矩阵 (CCM) 和像素扫描模式 (DBPSP) 之间的差异来构建我的向量(分别为 64+196+28=288 维)。
- 我预先构建了每个 1000 db 图像的矢量。
- 现在查询图像来了,我也构建了它的矢量(又是 228 维)。
- 我使用欧几里德距离计算相似度,并按欧几里德距离的降序对数据库图像向量进行排序。
显示前 20 个结果。
这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 );