Предполагая, что у меня есть набор данных следующих размеров:Невозможно выяснить заземляющий правду databased при расчете среднего Средний Precision Recall с помощью Matlab
train = 500,000 * 960 %number of training samples (vector) each of 960 length
B_base = 1000000*960 %number of base samples (vector) each of 960 length
Query = 1000*960 %number of query samples (vector) each of 960 length
truth_nn = 1000*100
truth_nn
содержит соседей подспутниковых в виде предварительно вычисленные k
ближайших соседей и их квадратное евклидово расстояние. Итак, столбцы truth_nn представляют ближайших соседей k = 100
. Мне трудно применить поиск ближайшего соседа в фрагменте кода. Может кто-нибудь, пожалуйста, покажите, как применять наземные истинные соседи truth_nn
в поиске средней средней точности-отзыва?
Это будет огромная помощь, если кто-нибудь может показать любой маленький пример, создав любую матрицу данных, матрицу запросов и земные истинные соседи в виде предварительно вычисленных k ближайших соседей и их квадратного евклидова расстояния. Я попытался создать образец базы данных.
Предположим, база данных
B_base = [1 1; 2 2; 3 2; 4 4; 5 6];
данных запроса
Query = [1 1; 2 1; 6 2];
[neighbors distances] = knnsearch(a,b,'k',2);
бы найти 2 ближайших соседей.
Вопрос 1: как создать данные об истине, содержащие наземные соседи правды и предварительно вычисленные k ближайших соседних расстояний? Это называется средним средним значением точности. Я попытался реализации knearest поиска соседа и средней точности вспомнить, как следует, но не может понять (неуверенный) как применить таблицу подспутниковых
Вопрос 2:
Я пытаюсь применить k
ближайшего поиска соседа путем преобразования первого вещественные функции в двоичные.
Я не могу применить понятие поиска k-ближайшего соседа для разных значений k = 10,20,50 и проверить, сколько данных было правильно вызвано с использованием базы данных GIST. В файле GIST truth_nn(), когда я задаю truth_nn(i,1:k)
для вектора запроса i, функция AveragePrecision выдает ошибку. Итак, если кто-то может показать с использованием любой примерной истины, которая имеет такую же структуру, что и в GIST, как правильно указать k и вычислить отзыв средней точности, тогда я смогу применить решение к базе данных GIST. На данный момент это мой подход и будет иметь огромную помощь, если правильный способ предоставляется с использованием любого примера, который будет легче для меня связать с базой данных GIST. Проблема в том, как я могу найти соседей из истины земли и сравнить ее с соседями, полученными после сортировки расстояний?
Меня также интересует, как я могу применить pdist2()
вместо настоящего расписания, поскольку это занимает много времени.
numQueryVectors = size(Query,1);
%Calculate distances
for i=1:numQueryVectors,
queryMatrix(i,:)
dist = sum((repmat(queryMatrix(i,:),numDataVectors,1)-B_base).^2,2);
[sortval sortpos] = sort(dist,'ascend');
neighborIds(i,:) = sortpos(1:k);
neighborDistances(i,:) = sqrt(sortval(1:k));
end
%Sorting calculated nearest neighbor distances for k = 50
%HOW DO I SPECIFY k = 50 in the ground truth, truth_nn
for i=1:numQueryVectors
AP(i) = AveragePrecision(neighborIds(i,:),truth_nn(i,:));
end
mAP = mean(AP);
function ap = AveragePrecision(rank_id, truth_id)
truth_num = length(truth_id);
truth_pos = zeros(truth_num,1);
for j=1:50 %% for k = 50 nearest neighbors
truth_pos(j) = find(rank_id == truth_id(j));
end
truth_pos = sort(truth_pos, 'ascend');
% compute average precision as the area below the recall-precision curve
ap = 0;
delta_recall = 1/truth_num;
for j=1:truth_num
p = j/truth_pos(j);
ap = ap + p*delta_recall;
end
end
end
UPDATE: на основе решения, я пытался вычислить среднюю среднюю точность, используя формулу, приводимую formula here и reference code. Но, не уверен, что мой подход правильный, потому что теория говорит, что мне нужно ранжировать возвращаемые запросы на основе индексов. Я не понимаю этого полностью. Среднее значение средней точности требуется для оценки качества поисковых алгоритмов.
precision = positives/total_data;
recal = positives /(positives+negatives);
precision = positives/total_data;
recall = positives /(positives+negatives);
truth_pos = sort(positives, 'ascend');
truth_num = length(truth_pos);
ap = 0;
delta_recall = 1/truth_num;
for j=1:truth_num
p = j/truth_pos(j);
ap = ap + p*delta_recall;
end
ap
Величина ар = бесконечности, значение положительных = 0 и негативов = 150. Это означает, что knnsearch() не работает.
Как это отличается от других вопросов или ответов на эту тему? – beaker
@beaker: В моем другом вопросе я спросил, как создать несколько хэш-таблиц для alogirhtm - Locality Sensitive Hashing. Затем я спросил, как я могу работать с базой данных GIST. В частности, я борюсь за то, как применять таблицу истины, состоящую из фактических меток и расстояния. Поскольку это был очень специфический вопрос, который я думал о том, чтобы задать общий, где я создал простой запрос и базовые данные. Теперь я не знаю, как я могу создать таблицу истины. Моя цель - применить поиск ближайшего соседа и оценить качество, используя метрику среднего значения точности. – SKM
Чтобы применить средний отзыв точности, я считаю, что нам нужна наземная таблица истинности. В базе данных GIST есть один, но я не понимаю, как его использовать. Поэтому я прошу здесь помочь в демонстрации того, как применять основную истину в ближайшем соседе и вычислять среднее значение точности, с помощью любой тестовой наземной таблицы, которая имеет ту же структуру, что и в таблице истины базы данных GIST. – SKM