2015-04-22 2 views
1

Я создал систему CBIR в MATLAB и использовал измерение подобия как евклидово расстояние. Используя это для каждого изображения запроса, я получаю 20 верхних изображений.Вычислить точность и отзыв на базе WANG

Я использовал WANG Dataset для тестирования своей системы.
Он содержит 10 классов (например, африканские люди, автобусы, розы и т. Д.), Каждый из которых содержит 100 изображений (всего 1000 изображений).

Мой метод:
1. Я использую коррелограмму, Co-Matrix встречаемости (CCM) и разницу между Pixel Pattern Scan (DBPSP) для построения моего вектора (64 + 196 + 28 = 288 размеров соответственно).

  1. Каждое из изображений 1000 db у меня есть свой вектор, который был создан заранее.
  2. Теперь появляется изображение запроса и я строю его вектор (228 измерений снова).
  3. Я использую Euclidean Расстояние для сходства и сортировку векторов изображений в порядке убывания их эвклидного расстояния.
  4. Показаны 20 результатов.

  5. В этих 20 я могу иметь TP или FP.

Для одного изображения запроса можно легко вычислить точность и отклик и участок PR-кривой с помощью этого link.

Как я могу сделать то же самое для всего класса?

Мой подход: для каждого изображения, принадлежащего классу A, найдите 20 лучших изображений и соответствующие TP (истинные положительные значения) и FP (False Positive).

 TP FP 

Image1 17 3 
Image2 15 5 
... 
... 
Image100 10 10 
Total 1500 500 

Точность класса A = 1500/(2000) = +0,75 (Правильно ли ??)
Отзыв класса А ---> Штука ??
PR-Curve ----> Застрял ?? Некоторые ссылки говорят, что мне нужен классификатор для этого, а некоторые нет ... Я действительно смущен.

+0

У вас есть матрица замешательства или у вас есть только TP/FP? – krisdestruction

+0

Только TP и FP. Из 20 изображений, если изображение принадлежит правильному классу, я увеличиваю TP на единицу, а если нет, я увеличиваю FP на единицу. Как проверить, что изображение имеет правильный класс, просто, поскольку изображения класса A от 0 до 99, а класс B - от 100-199 и так далее. Так что простой цикл if-else дает мне ответ. – CoderBoy

+0

gahh okay мое решение не будет работать тогда :( – krisdestruction

ответ

2

Как вы отметили, вы можете рассчитать точность следующим образом.

P = TP ./ (TP + FP); 

Однако, вам нужно иметь либо иметь FN или общее количество falses вычислить отзыв. Как 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 на один, а если нет, увеличу FP Не могу это сделать без использования классификатора? Если нет, можете ли вы предложить некоторые встроенные в MATLAB? – CoderBoy

+0

Для FN это те, которые классифицируются как нет, но на самом деле да. Для TN это те, которые классифицируются как нет и на самом деле нет. Вам нужно 4 из 6 переменных (TN, FN, TP, FP, total true, total false) для вычисления как точности, так и напомнить. Вам нужно либо переписать свой код для учета одной из переменных, но я предлагаю вам создать матрицу замешательства. Это делает анализ намного проще :) – krisdestruction

+0

Это тоже не сложно. До тех пор, пока вы знаете, что классифицируются по классам, и какова основная истина (что она должна быть), вы можете подавать ее в функцию «confusionmat». – krisdestruction

Смежные вопросы