Оценка качества в задачах классификации — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(ROC кривая: ссылка на англовики заменена на существующую статьи на русской вики)
(Обновление конспекта (Часть 1): Добавлена информация про Precison-recall кривую, кое-где исправлены опечатки и формулировки.)
Строка 1: Строка 1:
 
= Общие понятия =
 
= Общие понятия =
* '''TP''' — true positive, классификатор верно отнёс объект к рассматриваемому классу.
+
* '''TP''' — true positive: классификатор верно отнёс объект к рассматриваемому классу.
* '''TN''' — true negative, классификатор верно утверждает, что объект не принадлежит к рассматриваемому классу.
+
* '''TN''' — true negative: классификатор верно утверждает, что объект не принадлежит к рассматриваемому классу.
* '''FP''' — false positive, классификатор неверно отнёс объект к рассматриваемому классу.
+
* '''FP''' — false positive: классификатор неверно отнёс объект к рассматриваемому классу.
* '''FN''' — false negative, классификатор неверно утверждает, что объект не принадлежит к рассматриваемому классу.
+
* '''FN''' — false negative: классификатор неверно утверждает, что объект не принадлежит к рассматриваемому классу.
  
 
'''Confusion matrix''' ('''матрица несоответствий''') наглядно показывает суть этих показателей:
 
'''Confusion matrix''' ('''матрица несоответствий''') наглядно показывает суть этих показателей:
Строка 44: Строка 44:
 
| style="color: #22aa22;" | T₃
 
| style="color: #22aa22;" | T₃
 
|}
 
|}
В этом случае TP, TN, FP и FN считаются относительно некоторого класса (i) следующим образом:
+
В этом случае TP, TN, FP и FN считаются относительно некоторого класса <math>(i)</math> следующим образом:
 
: <tex>TP_i = T_i</tex>
 
: <tex>TP_i = T_i</tex>
 
: <tex>FP_i = \sum\limits_{c \in Classes} F_{i,c}</tex>
 
: <tex>FP_i = \sum\limits_{c \in Classes} F_{i,c}</tex>
Строка 51: Строка 51:
  
 
= Простые оценки =
 
= Простые оценки =
* '''Accuracy''' (точность), показывает долю правильных классификаций. Несмотря на очевидность и простоту является одной из самых малоинформативных оценок классификаторов.
+
* '''Accuracy''' (точность) показывает долю правильных классификаций. Несмотря на очевидность и простоту, является одной из самых малоинформативных оценок классификаторов.
 
: <tex>Acc = \dfrac{TP + TN}{TP + TN + FP + FN}</tex>
 
: <tex>Acc = \dfrac{TP + TN}{TP + TN + FP + FN}</tex>
* '''Recall''' (полнота), так же '''sensitivity''' и '''TPR''' (true positive rate), показывает долю найденных объектов класса к общему числу объектов класса. Иначе говоря то, насколько хорошо наш классификатор находит объекты из класса.
+
* '''Recall''' (полнота, '''sensitivity''', '''TPR''' (true positive rate)) показывает отношение верно классифицированных объектов класса к общему числу элементов этого класса.
 
: <tex>Recall = \dfrac{TP}{TP + FN}</tex>
 
: <tex>Recall = \dfrac{TP}{TP + FN}</tex>
* '''Precision''' (да, тоже точность), показывает долю объектов класса среди объектов выделенных классификатором.
+
* '''Precision''' (точность, перевод совпадает с accuracy)показывает долю верно классифицированных объектов среди всех объектов, которые к этому классу отнес классификатор.
 
: <tex>Prec = \dfrac{TP}{TP + FP}</tex>
 
: <tex>Prec = \dfrac{TP}{TP + FP}</tex>
* '''Specificity''', показывает долю верных срабатываний классификатора к общему числу объектов за пределами класса. Иначе говоря то, насколько часто классификатор правильно '''не''' относит объекты к классу.
+
* '''Specificity''' показывает отношение верных срабатываний классификатора к общему числу объектов за пределами класса. Иначе говоря, то, насколько часто классификатор правильно '''не''' относит объекты к классу.
 
: <tex>Spc = \dfrac{TN}{FP + TN}</tex>
 
: <tex>Spc = \dfrac{TN}{FP + TN}</tex>
* '''Fall-out''', так же '''FPR''' (false positive rate), показывает долю неверных срабатываний классификатора к общему числу объектов за пределами класса. Иначе говоря то, насколько часто классификатор ошибается при отнесении того или иного объекта к классу.
+
* '''Fall-out''' — ('''FPR''' (false positive rate)) показывает долю неверных срабатываний классификатора к общему числу объектов за пределами класса. Иначе говоря то, насколько часто классификатор ошибается при отнесении того или иного объекта к классу.
 
: <tex>FPR = \dfrac{FP}{FP + TN}</tex>
 
: <tex>FPR = \dfrac{FP}{FP + TN}</tex>
  
В виду того, что такие оценки никак не учитывают изначальное распределение классов в выборке (что может существенно влиять на полученное значение), так же существуют взвешенные варианты этих оценок (в терминах многоклассовой классификации):
+
Ввиду того, что такие оценки никак не учитывают изначальное распределение классов в выборке (что может существенно влиять на полученное значение), также существуют взвешенные варианты этих оценок (в терминах многоклассовой классификации):
 
* '''Precision'''
 
* '''Precision'''
 
: <tex>Prec_W = \dfrac{\sum\limits_{i = 1}^{N} \dfrac{T_i P_i}{C_i}}{All}</tex>
 
: <tex>Prec_W = \dfrac{\sum\limits_{i = 1}^{N} \dfrac{T_i P_i}{C_i}}{All}</tex>
Строка 71: Строка 71:
 
[[Файл:ROC.png|thumb|300px|ROC кривая; оранжевым показан идеальный алгоритм, фиолетовым — типичный, а синим — худший]]
 
[[Файл:ROC.png|thumb|300px|ROC кривая; оранжевым показан идеальный алгоритм, фиолетовым — типичный, а синим — худший]]
  
Для наглядной оценки качества алгоритма применяется [https://ru.wikipedia.org/wiki/ROC-кривая ROC кривая]. Кривая строится на плоскости, определённой осями полноты (recall, TPR) по вертикали и частоты ложных срабатываний (FPR, 1-Spc).  
+
Для наглядной оценки качества алгоритма применяется [https://ru.wikipedia.org/wiki/ROC-кривая ROC кривая]. Кривая строится на плоскости, определённой '''TPR''' (по оси ординат) и '''FPR''' (по оси абсцисс).  
  
Чтобы построить кривую:
+
Алгоритм построения кривой:
 
# Запустить классификатор на тестовой выборке
 
# Запустить классификатор на тестовой выборке
 
# Отсортировать результаты по уверенности классификатора в принадлежности объекта к классу
 
# Отсортировать результаты по уверенности классификатора в принадлежности объекта к классу
Строка 83: Строка 83:
 
# Построить кривую по точкам
 
# Построить кривую по точкам
  
Таким образом число точек не превосходит число объектов, идеальный алгоритм проходит через точку (0;1), худший (например, монетка) прямая TPR = FPR.
+
Таким образом:
Для численной же оценки алгоритма по ROC кривой используется значение площади под ней ('''AUC''', area under curve). Таким образом идеальный алгоритм имеет AUC равный 1, а плохой 0,5.
+
число точек не превосходит число объектов
 +
идеальному алгоритму соответствует ROC-кривая, проходящая через точку <math>(0;1)</math>
 +
худшему алгоритму (например, монетке) соответствует прямая TPR = FPR.
 +
 
 +
Для численной оценки алгоритма по ROC-кривой используется значение площади под ней ('''AUC''', area under curve). Идеальный алгоритм имеет AUC, равный 1, худший — 0,5.
 +
 
 +
= Precision-Recall кривая =
 +
[[Файл:PR_curve.png|thumb|400px|PR кривая]]
 +
 
 +
'''Обоснование: Чувствительность к соотношению классов.'''
 +
 
 +
Рассмотрим задачу выделения математических статей из множества научных статей. Допустим, что всего имеется 1.000.100 статей, из которых лишь 100 относятся к математике. Если нам удастся построить алгоритм <math>a(x)</math>, идеально решающий задачу, то его TPR будет равен единице, а FPR — нулю. Рассмотрим теперь "плохой" алгоритм, дающий положительный ответ на 95 математических и 50.000 нематематических статьях. Такой алгоритм совершенно бесполезен, но при этом имеет TPR = 0.95 и FPR = 0.05, что крайне близко к показателям идеального алгоритма.
 +
Таким образом, если положительный класс существенно меньше по размеру, то AUC-ROC может давать неадекватную оценку качества работы алгоритма, поскольку измеряет долю неверно принятых объектов относительно общего числа отрицательных. Так, алгоритм <math>b(x)</math>, помещающий 100 релевантных документов на позиции с 50.001-й по 50.101-ю, будет иметь AUC-ROC 0.95.
 +
 
 +
'''Precison-recall (PR) кривая.''' Избавиться от указанной проблемы с несбалансированными классами можно, перейдя от ROC-кривой к PR-кривой. Она определяется аналогично ROC-кривой, только по осям откладываются не FPR и TPR, а полнота (по оси абсцисс) и точность (по оси ординат). Критерием качества семейства алгоритмов выступает '''площадь под PR-кривой''' (англ. '''Area Under the Curve — AUC-PR''')
 +
 
  
 
= F₁ score =
 
= F₁ score =

Версия 17:43, 14 июня 2022

Общие понятия

  • TP — true positive: классификатор верно отнёс объект к рассматриваемому классу.
  • TN — true negative: классификатор верно утверждает, что объект не принадлежит к рассматриваемому классу.
  • FP — false positive: классификатор неверно отнёс объект к рассматриваемому классу.
  • FN — false negative: классификатор неверно утверждает, что объект не принадлежит к рассматриваемому классу.

Confusion matrix (матрица несоответствий) наглядно показывает суть этих показателей:

Принадлежит классу (P) Не принадлежит классу (N)
Предсказана принадлежность классу TP FP
Предсказано отсутствие принадлежности к классу FN TN

Для многоклассовой классификации матрица несоответствий строится по тому же принципу:

Предсказанный класс Класс 1 (C₁) Класс 2 (C₂) Класс 3 (C₃)
1 (P₁) T₁ F₁₂ F₁₃
2 (P₂) F₂₁ T₂ F₂₃
3 (P₃) F₃₁ F₃₂ T₃

В этом случае TP, TN, FP и FN считаются относительно некоторого класса [math](i)[/math] следующим образом:

[math]TP_i = T_i[/math]
[math]FP_i = \sum\limits_{c \in Classes} F_{i,c}[/math]
[math]FN_i = \sum\limits_{c \in Classes} F_{c,i}[/math]
[math]TN_i = All - TP_i - FP_i - FN_i[/math]

Простые оценки

  • Accuracy — (точность) показывает долю правильных классификаций. Несмотря на очевидность и простоту, является одной из самых малоинформативных оценок классификаторов.
[math]Acc = \dfrac{TP + TN}{TP + TN + FP + FN}[/math]
  • Recall — (полнота, sensitivity, TPR (true positive rate)) показывает отношение верно классифицированных объектов класса к общему числу элементов этого класса.
[math]Recall = \dfrac{TP}{TP + FN}[/math]
  • Precision — (точность, перевод совпадает с accuracy)показывает долю верно классифицированных объектов среди всех объектов, которые к этому классу отнес классификатор.
[math]Prec = \dfrac{TP}{TP + FP}[/math]
  • Specificity — показывает отношение верных срабатываний классификатора к общему числу объектов за пределами класса. Иначе говоря, то, насколько часто классификатор правильно не относит объекты к классу.
[math]Spc = \dfrac{TN}{FP + TN}[/math]
  • Fall-out — (FPR (false positive rate)) показывает долю неверных срабатываний классификатора к общему числу объектов за пределами класса. Иначе говоря то, насколько часто классификатор ошибается при отнесении того или иного объекта к классу.
[math]FPR = \dfrac{FP}{FP + TN}[/math]

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

  • Precision
[math]Prec_W = \dfrac{\sum\limits_{i = 1}^{N} \dfrac{T_i P_i}{C_i}}{All}[/math]
  • Recall
[math]Recall_W = \dfrac{\sum\limits_{i = 1}^{N} T_i}{All}[/math]

ROC кривая

ROC кривая; оранжевым показан идеальный алгоритм, фиолетовым — типичный, а синим — худший

Для наглядной оценки качества алгоритма применяется ROC кривая. Кривая строится на плоскости, определённой TPR (по оси ординат) и FPR (по оси абсцисс).

Алгоритм построения кривой:

  1. Запустить классификатор на тестовой выборке
  2. Отсортировать результаты по уверенности классификатора в принадлежности объекта к классу
  3. Пока не кончились элементы:
    1. Взять объект с максимальной уверенностью
    2. Сравнить метку с реальной
    3. Пересчитать TPR и FPR на взятых объектах
    4. Поставить точку, если обе характеристики не NaN / ±∞
  4. Построить кривую по точкам

Таким образом: число точек не превосходит число объектов идеальному алгоритму соответствует ROC-кривая, проходящая через точку [math](0;1)[/math] худшему алгоритму (например, монетке) соответствует прямая TPR = FPR.

Для численной оценки алгоритма по ROC-кривой используется значение площади под ней (AUC, area under curve). Идеальный алгоритм имеет AUC, равный 1, худший — 0,5.

Precision-Recall кривая

PR кривая

Обоснование: Чувствительность к соотношению классов.

Рассмотрим задачу выделения математических статей из множества научных статей. Допустим, что всего имеется 1.000.100 статей, из которых лишь 100 относятся к математике. Если нам удастся построить алгоритм [math]a(x)[/math], идеально решающий задачу, то его TPR будет равен единице, а FPR — нулю. Рассмотрим теперь "плохой" алгоритм, дающий положительный ответ на 95 математических и 50.000 нематематических статьях. Такой алгоритм совершенно бесполезен, но при этом имеет TPR = 0.95 и FPR = 0.05, что крайне близко к показателям идеального алгоритма. Таким образом, если положительный класс существенно меньше по размеру, то AUC-ROC может давать неадекватную оценку качества работы алгоритма, поскольку измеряет долю неверно принятых объектов относительно общего числа отрицательных. Так, алгоритм [math]b(x)[/math], помещающий 100 релевантных документов на позиции с 50.001-й по 50.101-ю, будет иметь AUC-ROC 0.95.

Precison-recall (PR) кривая. Избавиться от указанной проблемы с несбалансированными классами можно, перейдя от ROC-кривой к PR-кривой. Она определяется аналогично ROC-кривой, только по осям откладываются не FPR и TPR, а полнота (по оси абсцисс) и точность (по оси ординат). Критерием качества семейства алгоритмов выступает площадь под PR-кривой (англ. Area Under the Curve — AUC-PR)


F₁ score

Для общей оценки качества классификатора часто используют F₁ меру — среднее гармоническое между precision и recall:

[math]F_1 = \left ( \dfrac{Prec^{-1} + Recall^{-1}}{2} \right )^{-1} = 2 \cdot \dfrac{Prec \cdot Recall}{Prec + Recall}[/math]

F₁ мера так же может быть обобщена до Fβ:

[math]F_β = (1 + β^2) \dfrac{Prec \cdot Recall}{β^2 \cdot Prec + Recall}[/math]

Fβ измеряет эффективность классификатора учитывая recall в β раз более важным чем precision.

Для многоклассовой классификации с учётом изначального распределения по классам имеет смысл рассматривать микро- и макро- F меру:

[math]micro F_β = \sum\limits_{c \in Classes} \dfrac{P_c F_β(c)}{All}[/math]
[math]macro F_β = (1 + β^2) \dfrac{Prec_W \cdot Recall_W}{β^2 \cdot Prec_W + Recall_W}[/math]