2015-04-22 91 views
1

我在MATLAB中製作了一個CBIR系統,並使用相似性度量作爲歐氏距離。 使用此爲每個查詢圖像我檢索前20名圖像。計算王數據庫的精度和召回率

我用WANG Dataset來測試我的系統。
它包含10個類(如非洲人,公交車,玫瑰等),每個包含100個圖像(共1000張圖像)。我使用相關圖,共現矩陣(CCM)和像素掃描模式(DBPSP)之間的區別來構建我的矢量(分別爲64 + 196 + 28 = 288尺寸)。

  1. 1000 db圖像的每一個我都事先構建了它的向量。
  2. 現在查詢圖像來了,我也構造它的矢量(再次228維)。
  3. 我使用歐幾里德距離來進行相似性處理,並按照其歐幾里德距離的降序對db圖像向量進行排序。
  4. 顯示前20條結果。

  5. 在那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)= 0.75(是不是?)
召回一類--->的滯留??
PR曲線---->卡住??有些鏈接說我需要一個分類器,有些則不是......我真的很困惑。

+0

您是否有混淆矩陣,或者您只有TP/FP? – krisdestruction

+0

只有TP和FP。如果圖像屬於正確的類別,則在20張圖像中,我將TP增加1,如果不是,則將FP增加1。如何檢查圖像的類別是否正確非常簡單,因爲A類圖像的範圍是0-99,然後B類的範圍是100-199,依此類推。所以一個簡單的if-else循環給了我答案。 – CoderBoy

+0

gahh好吧我的解決方案不會工作然後:( – krisdestruction

回答

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

如何計算FN和TN?我能做的唯一操作是拍攝一幅圖像,然後查找20幅圖像中的前20幅圖像,如果圖像屬於正確的類別,則將TP增加1,如果不是,則增加FP 如果不使用分類器,我不能做到這一點嗎?如果不是,您可以建議一些內置的MATLAB? – CoderBoy

+0

對於FN,那些被分類爲no,但實際上是yes的,對於TN,這些是那些被歸類爲否,並且實際上是否定的。你需要6個變量中的4個(TN,FN,TP,FP,總真,總假)來計算精度和召回。您需要重寫代碼來解釋其中一個變量,但我建議您改爲創建一個混淆矩陣。它使分析更容易:) – krisdestruction

+0

這也不難。只要你知道這些類被歸類爲什麼,以及基本事實(它應該是什麼),你可以將它提供給'confusionmat'函數。 – krisdestruction

相關問題