Путаница по поводу (средней) средней точности
В этом вопросе я попросил разъяснений о кривой точности-отзыва.
В частности, я спросил, нужно ли нам учитывать фиксированное количество рейтингов, чтобы нарисовать кривую, или мы можем разумно выбирать сами. Согласно ответу, второй является правильным.
Однако теперь у меня есть большие сомнения относительно значения средней точности (AP): AP используется для численной оценки того, насколько хорош наш алгоритм с учетом определенного запроса. Средняя средняя точность (MAP) - это средняя точность для нескольких запросов.
Я сомневаюсь: если AP изменяется в зависимости от того, сколько объектов мы извлекаем, мы можем настроить этот параметр в наших интересах, чтобы мы показали наилучшее возможное значение AP. Например, предположив, что кривая pr работает замечательно до 10 элементов, а затем ужасно, мы могли бы "обмануть" вычисление значения (M)AP, учитывая только первые 10 элементов.
Я знаю, что это может показаться странным, но я нигде не нашел ничего об этом.
2 ответа
AP - это область под кривой точного вызова, и предполагается, что кривая точного вызова рассчитывается по всему возвращенному ранжированному списку.
Невозможно обмануть точку доступа, изменив размер возвращенного ранжированного списка. AP - это область под кривой точности-отзыва, которая отображает точность как функцию отзыва, где отзыв - это число возвращенных позитивов относительно общего числа позитивов, которые существуют в основной истине, а не относительно количества позитивов в возвращенный список. Поэтому, если вы обрезаете список, все, что вы делаете, это обрезаете кривую точности-отзыва и игнорируете, чтобы построить ее хвост. Поскольку AP - это область под кривой, обрезка списка уменьшает AP, поэтому нет смысла изменять размер ранжированного списка - максимальный AP достигается, если вы возвращаете весь список. Это видно, например, из кода, который вы цитировали в своем другом вопросе - обрезка списка просто соответствует
for ( ; i<ranked_list.size(); ++i) {
меняется на
for ( ; i<some_number; ++i) {
что приводит к меньшему приращению ap
(все приращения неотрицательны как old_precision
а также precision
неотрицательны и recall
не уменьшается) и, следовательно, меньшее значение AP.
На практике, по чисто вычислительным причинам, вы можете захотеть обрезать список под некоторым разумным числом, например, 10k, поскольку маловероятно, что AP сильно изменится, так как precision @ large_number, вероятно, будет равен 0, если у вас нет необычно большого числа положительных результатов.,
Ваша путаница может быть связана с тем, как некоторые популярные функции, такие как VLFeat's vl_pr
вычислите кривые точности-отзыва, поскольку они предполагают, что вы предоставили им весь ранжированный список, и, следовательно, вычислите общее количество положительных результатов в основной правде, просто взглянув на ранжированный список вместо самой основной правды. Так что если вы использовали vl_pr
наивно в обрезанных списках вы действительно могли бы его обмануть, но это было бы неверным вычислением. Я согласен, что это не на 100% ясно из описания функции, но если вы изучите документацию более подробно, вы увидите, что она упоминает NUMNEGATIVES
а также NUMPOSITIVES
, так что, если вы даете неполный ранжированный список, вы должны установить эти две величины, чтобы функция знала, как правильно рассчитать кривую точного возврата / AP. Теперь, если вы строите различные культуры ранжированного списка, используя vl_pr
но с теми же NUMNEGATIVES и NUMPOSITIVES для всех вызовов функций, вы увидите, что кривые точного вызова - это просто обрезки друг друга, как я объяснял выше (я еще не проверял это, так как у меня нет matlab здесь, но я уверен, что это так, и если это не так, мы должны сообщить об ошибке).
То, что вы сказали, частично верно. Если вы получаете разумную карту или AP в топ N
извлеченные документы, это нормально. Это не обман, потому что ваша система IR получает большое количество соответствующих документов в топ N
возвращенные документы, но да, по-прежнему отсутствуют некоторые соответствующие документы. Обратите внимание, что для системы IR лучше, если она не может получить все соответствующие документы, но оценивает все полученные соответствующие документы в более высоком ранге, и это то, что измеряет AP. (более высокий ранг означает ранг 1 или 2 вместо 100 или 101)
Рассмотрим пример: у вас есть два соответствующих документа: один возвращается на 1-м ранге, а другой - на 50-м. Теперь, если вы вычисляете MAP или AP для 10 лучших возвращенных документов, вы должны сообщить об ответе как MAP@10
или же AP@10
, Обычно AP означает среднюю точность по всем возвращенным документам, но если вы считаете верх N
документы, ваша метрика будет AP@N
вместо того, чтобы только AP и заметьте, что это не обман! Но да, если вы рассчитываете AP@N
и сообщить как AP, тогда вы даете частичную информацию читателям.
Важный факт о MAP: если соответствующий документ никогда не будет получен, мы предполагаем, что точность, соответствующая этому соответствующему документу, равна нулю. При вычислении AP мы делим накопленную точность на общее количество соответствующих документов. Итак, когда вы вычисляете MAP@N
или же AP@N
Это означает, что вы заботитесь только о вершине N
возвращенные документы по системе IR. Например, я использовал MAP@100
в одной из моих исследовательских работ.
Если у вас есть путаница в отношении AP или MAP, вы можете увидеть мой краткий ответ, объясняющий их здесь. Надеюсь, это поможет вам прояснить вашу путаницу.