Чтобы лучше понять, как рассчитывается счет, давайте приведем простой пример. Представьте, что мы помечаем изображения, которые могут содержать кошек, собак и / или птиц. Массив классов выглядит как [Cat, Dog, Bird]. Поэтому, если у нас есть изображение, содержащее только кота, массив истины будет иметь вид [1, 0, 0].
Мы подаем модели это изображение, содержащее только Cat, и оно выводит [.9, .2, .3]. Сначала мы оцениваем метки, которые предсказывала модель. Кошка заняла 1 место, Берд - 2 место, а Собака - 3 место. Теперь мы посчитаем, сколько ярлыков требуется, чтобы попасть в настоящий класс интересов (Cat), начиная с 1-го места. У модели было Cat на 1-м месте, так что это просто принимает значение 1. Затем мы подсчитываем, сколько других истинных меток было, пока мы не достигли правильной метки (Cat). Поначалу это может показаться странным, но это будет необходимо для примеров с несколькими метками позже. В этом случае метка Cat была правильной, и нам не нужно было двигаться дальше, поэтому она также принимает значение 1. Оценка рассчитывается путем взятия второго значения и деления его на первое значение. В этом случае оценка составляет 1/1 = 1.
Так что же произойдет, если модель выведет его из строя? Давайте поместим то же самое изображение Cat через другую модель. Он выводит [.6, .8, .1]. Ранжируйте метки от первого до последнего. Пес занял 1 место, Кот - 2 место, а Птица - 3 место. Узнайте, сколько ярлыков требуется, чтобы добраться до нужного класса интересов (снова Cat), начиная с 1-го места. Для этого сценария требуется две метки, поэтому первое значение равно 2. Затем выясните, сколько правильных меток было на этом пути. Было только 1, поэтому второе значение равно 1. Для этого случая показатель равен 1/2 = 0,50.
Хорошо, вот простые примеры. Я не собираюсь быть столь многословным для следующих двух, но применяю ту же логику, что и выше. Основное отличие состоит в том, что каждая правильная метка должна рассчитываться отдельно.
Правильное ранжирование двух меток: Изображение содержит кошку и птицу [1, 0, 1]. Модель выводит [.8, .2, .9]. Рейтинг Птица, Кот, Собака. Для метки Cat первое значение равно 2 (потребовалось две метки, чтобы добраться до него), а второе значение равно 2 (на пути было две правильные метки, Bird и Cat). Оценка = 2/2 = 1. Для метки Bird первое значение равно 1, а второе значение равно 1. Оценка = 1/1 = 1.
Неправильно ранжированы две метки: Изображение содержит кошку и собаку [1, 1, 0]. Модель выводит [.1, .2, .8]. Рейтинг Птица, Собака, Кошка. Для метки Cat первое значение равно 3, а второе - 2. Оценка = 2/3 = 0,66. Для метки Собаки первое значение равно 2, а второе - 1. Оценка = 1/2 = 0,50.
Хорошо, как мы можем получить итоговый балл за каждый класс ? Самый простой способ - взять среднее. Давайте использовать два предыдущих примера, чтобы вычислить это. Для Cat у нас были баллы 1 и 0,66. Итоговая оценка кошек = (1 + 0,66) / 2 = 0,83. Для собаки у нас было только 0,50 балла, поэтому итоговая оценка собаки = 0,50. Для Bird у нас было только 1,0 балла, поэтому Final Bird Score = 1. Этот показатель отлично подходит для анализа эффективности класса.
Как мы можем сжать эти классные баллы в один окончательный балл ? Мы могли бы просто усреднить все итоговые оценки класса, но это ослабило бы оценки общих классов и увеличило бы менее частые классы. Вместо этого мы можем просто использовать средневзвешенное значение! Используя два примера изображения, у нас было 2 кошки, 1 собака и 1 птица. Окончательный результат = (2 кошки / 4 ярлыка) * 0,83 + (1 собака / 4 ярлыка) * 0,50 + (1 птица / 4 ярлыка) * 1,0 = 0,79. Удобно, что в итоге получается то же самое, что и усреднение всех отдельных баллов, поэтому нам даже не нужно хранить веса классов. Напомним, что у нас были индивидуальные оценки 1 и 1 для кошки и птицы первого изображения, а затем 0,66 и 0,50 для кошки и собаки второго изображения. (1 + 1 + 0,66 + 0,50) / 4 = 0,79.
Надеюсь, это даст вам лучшее понимание расчетов. Я оставлю код другому постеру, так как дронировался достаточно долго. Возможно, если никто не ответит на эту часть в ближайшее время, я могу добавить описание.