Как вычислить точность / отзыв для классификации мультикласса и мультиметки?


72

Мне интересно, как рассчитать точность и вспомнить меры для мультиклассовой классификации с несколькими метками, то есть классификации, где существует более двух меток, и где каждый экземпляр может иметь несколько меток?


1
Многолинейная часть делает это намного сложнее, и я тоже заинтересован в этом. Я думаю, что это не относится к многослойным проблемам, но не доверяю мне вообще.
user798719

1
Фактически все проблемы с несколькими метками являются мультиклассами, поэтому вы можете использовать пакет utiml в R, например, или Mulan в Java.
Адриано Риволли

Ответы:


19

Еще одним популярным инструментом для измерения эффективности классификатора является ROC / AUC ; у этого тоже есть расширение мультикласса / мультиметки: см. [Hand 2001]

[Рука 2001]: простое обобщение области под кривой ROC для множественных задач классификации классов


Это популярно, но может содержать ошибки. Я не совсем верю в это. stats.stackexchange.com/questions/93901/…
EngrStudent

3
Никогда не меняйте переполнение стека! Парень задает проблему, большинство проголосовавших на самом деле не отвечает на его вопрос, но указывает на какой-то другой инструмент / библиотеку, который был бы лучше
ragvri

Да, как этот ответ может иметь +20? Он даже не содержит слов точность и отзыв.
Саймон Дирмайер

если вы тщательно продумаете, вы поймете, что точность и отзыв фактически захвачены AUC.
oDDsKooL

16

Вот некоторая дискуссия на форуме, конечно, о матрице путаницы и мультиклассовом измерении точности / отзыва.

Основная идея состоит в том, чтобы вычислить всю точность и вспомнить все классы, а затем усреднить их, чтобы получить одно измерение действительного числа.

Путаница позволяет легко вычислить точность и вызвать класс.

Ниже приведены некоторые основные объяснения о путанице матрицы, скопированной из этого потока:

Матрица путаницы - это способ классификации истинных положительных, отрицательных, ложных и отрицательных результатов, когда существует более двух классов. Он используется для вычисления точности и отзыва и, следовательно, f1-показателя для задач нескольких классов.

Фактические значения представлены столбцами. Предсказанные значения представлены строками.

Примеры:

10 обучающих примеров, которые на самом деле 8, классифицированы (предсказаны) неправильно как 5
13 обучающих примеров, которые на самом деле 4, неправильно классифицированы как 9

Матрица путаницы

см =
     0 1 2 3 4 5 6 7 8 9 10
     1 298 2 1 0 1 1 3 1 1 0
     2 0 293 7 4 1 0 5 2 0 0
     3 1 3 263 0 8 0 0 3 0 2
     4 1 5 0 261 4 0 3 2 0 1
     5 0 0 10 0 254 3 0 10 2 1
     6 0 4 1 1 4 300 0 1 0 0
     7 1 3 2 0 0 0 264 0 7 1
     8 3 5 3 1 7 1 0 289 1 0
     9 0 1 3 13 1 0 11 1 289 0
    10 0 6 0 1 6 1 2 1 4 304

Для класса х:

  • Правда положительный: диагональная позиция, см (х, х).

  • Ложное значение: сумма столбца х (без главной диагонали), сумма (см (:, х)) - см (х, х).

  • Ложный минус: сумма строки x (без главной диагонали), сумма (см (x, :), 2) -см (x, x).

Вы можете вычислить точность, вспомнить и F1 балл по формуле курса.

Усреднение по всем классам (с или без взвешивания) дает значения для всей модели.


2
Вы топали свои топоры. Исходя из того, что вы написали, ваш CM должен быть транспонирован.
Спейси

@Tarantula Почему ты так думаешь? Я думаю, что он прав.
Шахенша

@shahensha Попробуйте один столбец, это неправильно.
Спейси

1
Ссылка на тему Coursera не работает
shark8me

8
я не верю, что этот ответ решает проблему с несколькими метками. это относится к мультиклассовым задачам. Что такое понятие ложноположительного или ложноотрицательного в многослойных задачах?
user798719

13

Для классификации по нескольким меткам у вас есть два пути. Сначала рассмотрите следующее.

  • n
  • Yiith
  • xiith
  • h(xi)ith

Пример на основе

Метрики рассчитываются для каждого типа данных. Для каждой прогнозируемой метки вычисляется только ее оценка, а затем эти оценки агрегируются по всем точкам данных.

  • 1ni=1n|Yih(xi)||h(xi)|
  • 1ni=1n|Yih(xi)||Yi|

Есть и другие метрики.

На основе метки

Здесь все сделано по меткам. Для каждой метки вычисляются метрики (например, точность, отзыв), а затем эти метрики по меткам агрегируются. Следовательно, в этом случае вы в конечном итоге вычисляете точность / отзыв для каждой метки по всему набору данных, как вы делаете для двоичной классификации (так как каждая метка имеет двоичное назначение), а затем агрегируете ее.

Самый простой способ - представить общую форму.

Это просто расширение стандартного многоклассового эквивалента.

  • 1qj=1qB(TPj,FPj,TNj,FNj)

  • B(j=1qTPj,j=1qFPj,j=1qTNj,j=1qFNj)

TPj,FPj,TNj,FNjjth

B

Вы можете быть заинтересованы , чтобы посмотреть в код для метрики мульт-метки здесь , которая входит в состав пакета млдр в R . Также вам может быть интересно заглянуть в библиотеку Java с несколькими метками MULAN .

Это хорошая статья, посвященная различным метрикам: обзор алгоритмов обучения по нескольким меткам


Было бы хорошо, если бы вы дали ссылки на подлинность метрик, которые вы написали, как некоторые ссылки в Википедии. Ссылки, которые вы упомянули, являются частью кода метрики или исследовательской работы.
hacker315

2
Обзорный документ уже связан в конце ответа (обзор алгоритмов обучения с несколькими метками ) ieeexplore.ieee.org/document/6471714 . Это хорошо известные в литературе метрики, на основе которых осуществляются реализации. Я не уверен, как я могу продемонстрировать подлинность.
Фоксис

8

Я не знаю о части с несколькими метками, но для классификации с помощью нескольких классов эти ссылки помогут вам

Эта ссылка объясняет, как построить матрицу путаницы, которую можно использовать для расчета точности и отзыва для каждой категории.

И эта ссылка объясняет, как рассчитать показатели micro-f1 и macro-f1 для оценки классификатора в целом.

надеюсь, что вы нашли это полезным.


4
Ключевым моментом является: существует несколько возможных допустимых способов вычисления этих метрик (например, микро-F1 против макро-F1), потому что есть несколько способов определить, что является правильным. Это зависит от вашего заявления и критериев действия.
Джек Таннер

Ахмед: Спасибо за ссылки! @JackTanner Не могли бы вы иметь ссылку на это (для случая мультиклассовой классификации с несколькими метками)?
Вам

1
@MaVe, извините, нет ссылок. Это только из личного опыта. Вы добьетесь этого, просто подумав о том, что представляет собой, скажем, истинный позитив и ложный позитив для ваших целей.
Джек Таннер

4
Первая ссылка умерла
Nikana Reklawyks

1

эта ссылка помогла мне .. https://www.youtube.com/watch?v=HBi-P5j0Kec Я надеюсь, что это поможет и вам

скажем распределение как ниже

    A   B   C   D
A   100 80  10  10
B   0    9   0   1
C   0    1   8   1
D   0    1   0   9

точность для А будет

P (A) = 100/100 + 0 + 0 +0 = 100

P (B) = 9/9 + 80 + 1 + 1 = 9/91 psst ... по сути, взять истинный положительный класс и разделить на данные столбца по строкам

Напомним, что будет

R (A) = 100 / 100+ 80 + 10 + 10 = 0,5

R (B) = 9 / 9+ 0 + 0 + 1 = 0,9

psst ... по сути взять истинный положительный класс и разделить на данные строки по столбцам

как только вы получите все значения, возьмите макросреднее

avg (P) = P (A) + P (B) + P (C) + P (D) / 4

avg (R) = R (A) + R (B) + R (C) + R (D) / 4

F1 = 2 * avg (P) * avg (R) / avg (P) + avg (R)


0

Проверьте эти слайды с cs205.org в Гарварде . Как только вы попадаете в раздел «Измерения ошибок», обсуждается точность и отзыв в настройках нескольких классов (например, «один против всех» или «один против одного») и в матрицах путаницы. Путаница матриц это то, что вы действительно хотите здесь.

К вашему сведению, в программном пакете Python scikits.learn есть встроенные методы для автоматического вычисления таких вещей, как матрица путаницы, из классификаторов, обученных на многоклассовых данных. Возможно, он также может напрямую рассчитывать графики точного вызова. Стоит посмотреть.


4
К сожалению, ссылка на слайды не работает, и я мог найти слайды в другом месте.
f3lix

Он пополнится, когда они дойдут до этой лекции в этом году. Если бы я мог скопировать PDF-файл в место постоянной ссылки, я бы сделал это, но не смогу, поэтому его периодическое прерывание неизбежно, и не будет другого места, где можно найти заметки, они относятся к этому курсу.
Ely

sklearn не поддерживает мульти-метки для матрицы путаницы github.com/scikit-learn/scikit-learn/issues/3452
Франк Дернонкур

0

Из Озгура и др. (2005) можно увидеть, что вы должны вычислять Precision и Recall, следуя нормальным выражениям, но вместо усреднения по общему количеству N экземпляров в вашем наборе данных, вы должны использовать N = [экземпляров, по крайней мере с одной меткой с рассматриваемый класс назначен на].

вот упомянутое упоминание: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.104.8244&rep=rep1&type=pdf


0

Точно так же, как в обычном случае, с наборами:

http://en.wikipedia.org/wiki/F1_score

http://en.wikipedia.org/wiki/Precision_and_recall

Вот простые функции Python, которые делают именно это:

def precision(y_true, y_pred):
    i = set(y_true).intersection(y_pred)
    len1 = len(y_pred)
    if len1 == 0:
        return 0
    else:
        return len(i) / len1


def recall(y_true, y_pred):
    i = set(y_true).intersection(y_pred)
    return len(i) / len(y_true)


def f1(y_true, y_pred):
    p = precision(y_true, y_pred)
    r = recall(y_true, y_pred)
    if p + r == 0:
        return 0
    else:
        return 2 * (p * r) / (p + r)


if __name__ == '__main__':
    print(f1(['A', 'B', 'C'], ['A', 'B']))
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.