Точность / отзыв для классификации мультикласса - PullRequest
28 голосов
/ 25 января 2012

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

Ответы [ 5 ]

16 голосов
/ 10 сентября 2016

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

  • $n$ - количество примеров.
  • $Y_i$ - это назначение метки истинности земли для примера $i^{th}$ ..
  • $x_i$ является примером $i^{th}$.
  • $h(x_i)$ - это прогнозируемые метки для примера $i^{th}$.

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

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

  • Точность = $\frac{1}{n}\sum_{i=1}^{n}\frac{|Y_{i}\cap h(x_{i})|}{|h(x_{i})|}$ Отношение того, сколько из предсказанного является правильным. Числитель находит, сколько меток в предсказанном векторе имеет общее с основной истинностью, а соотношение вычисляет, сколько из предсказанных истинных меток на самом деле находится в основной истине.
  • Напомним = $\frac{1}{n}\sum_{i=1}^{n}\frac{|Y_{i}\cap h(x_{i})|}{|Y_{i}|}$ Отношение того, сколько фактических ярлыков было предсказано. Числитель определяет, сколько меток в прогнозируемом векторе имеет общее с основной истинностью (как указано выше), а затем находит отношение к числу фактических меток, получая, таким образом, какую долю фактических меток было предсказано.

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

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

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

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

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

  • Макро усредненное $\frac{1}{q}\sum_{j=1}^{q}B(TP_{j},FP_{j},TN_{j},FN_{j})$

  • Микро усредненный $B(\sum_{j=1}^{q}TP_{j},\sum_{j=1}^{q}FP_{j},\sum_{j=1}^{q}TN_{j},\sum_{j=1}^{q}FN_{j})$

Здесь $TP_{j},FP_{j},TN_{j},FN_{j}$ являются истинно положительным, ложно положительным, истинно отрицательным и ложно отрицательным значениями соответственно только для метки $j^{th}$ .

Здесь $ B $ обозначает любую метрику на основе матрицы смешения. В вашем случае вы бы использовали стандартную точность и вызывали формулы. Для макро-среднего значения вы передаете счетчик для каждой метки, а затем сумму, для микро-среднего значения вы сначала усредняете значения, а затем применяете свою метрическую функцию.

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

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

7 голосов
/ 14 мая 2012

Ответ в том, что вам нужно вычислить точность и вспомнить для каждого класса, а затем усреднить их вместе.Например, если у вас классы A, B и C, то ваша точность:

(precision(A) + precision(B) + precision(C)) / 3

То же самое для отзыва.

Я не эксперт, но это то, что я определил на основеследующие источники:

https://list.scms.waikato.ac.nz/pipermail/wekalist/2011-March/051575.html http://stats.stackexchange.com/questions/21551/how-to-compute-precision-recall-for-multiclass-multilabel-classification

5 голосов
/ 23 октября 2014
  • Предположим, что у нас есть проблема мультиклассификации 3-х классов с метками A, B и C.
  • Первое, что нужно сделать, - это создать матрицу путаницы.Обратите внимание, что значения в диагонали всегда являются истинными положительными значениями (TP).
  • Теперь, чтобы вычислить вспомните для метки A, вы можете считать значения из матрицы путаницы ивычислить:

    = TP_A/(TP_A+FN_A)
    = TP_A/(Total gold labels for A)
    
  • Теперь, давайте вычислим точность для метки А, вы можете прочитать значения из матрицы путаницы и вычислить:

    = TP_A/(TP_A+FP_A)
    = TP_A/(Total predicted as A)
    
  • Вам просто нужно сделать то же самое для остальных ярлыков B и C. Это относится к любой проблеме классификации нескольких классов.

Здесь - полная статья, в которой рассказывается о том, как вычислить точность и вспомнить для любой задачи классификации нескольких классов, включая примеры.

1 голос
/ 23 августа 2018

В питоне, используя sklearn и numpy:

from sklearn.metrics import confusion_matrix
import numpy as np

labels = ...
predictions = ...

cm = confusion_matrix(labels, predictions)
recall = np.diag(cm) / np.sum(cm, axis = 1)
precision = np.diag(cm) / np.sum(cm, axis = 0)
1 голос
/ 20 марта 2015

Простое усреднение будет выполнено, если классы сбалансированы.

В противном случае, для каждого реального класса необходимо вспомнить вес по преобладанию класса, а точность для каждого предсказанного ярлыка должна быть взвешена смещением (вероятность) для каждой метки.В любом случае вы получите Ранд Точность.

Более прямой способ - создать нормализованную таблицу непредвиденных обстоятельств (делить на N, чтобы таблица складывалась до 1 для каждой комбинации метки и класса) и добавить диагональ, чтобы получить Ранд Точность.

Но если классы не сбалансированы, смещение остается, и метод с коррекцией случайности, такой как каппа, более уместен, или, что еще лучше, анализ ROC или мера правильной вероятности, такая как информированность (высота над линией вероятности вROC).

...