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

Для простоты объяснения давайте рассмотрим простую проблему классификации нескольких классов с набором данных радужной оболочки глаза в этом посте. Есть три типа цветов setosa, versicolor и virginica, которые обозначены здесь как 0, 1 и 2.

Недостатки точности

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

  • Давайте рассмотрим сценарий, в котором 90 образцов относятся к классам versicolor и setosa и только 10 образцов virginica в нашем выборочном наборе данных. Модель правильно классифицирует образцы обоих классов с точностью 90%. Это может показаться высоким, но мы упускаем из виду 10 неправильно классифицированных образцов виргиники.
  • Как мы увидим в последующих разделах, точность одинаково взвешивает все виды ошибочных классификаций, поскольку некоторые виды ошибок могут быть более вредными, чем другие, в зависимости от ситуации.

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

Некоторые из упомянутых выше проблем можно решить, исследуя меры, отображаемые в матрице путаницы. Эти термины очень интуитивно понятны, но их может быть сложно запомнить.

True Positives (TP): это экземпляры, классифицированные правильно, т. е. тестовые экземпляры, которые были классифицированы с их истинными классами.

True Negatives (TN): это тестовые экземпляры, которые относятся к классу Negative и были правильно предсказаны.

Эти два можно запомнить, поскольку «Верно», что они положительные или отрицательные соответственно.

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

Ложные срабатывания (FP): это экземпляры, которые были неправильно классифицированы как положительные, но их фактический класс отрицательный.

Ложноотрицательные (FN): это экземпляры, которые были неправильно классифицированы как отрицательные, но их фактический класс положительный.

Эти два можно запомнить как «Ложь», что они положительные или отрицательные соответственно, и, следовательно, они указывают на неверные прогнозы.

С помощью приведенного ниже кода, взятого из GeeksForGeeks, мы подгоним классификатор дерева решений к данным радужной оболочки и получим прогноз.

from sklearn import datasets
from sklearn.metrics import confusion_matrix, plot_confusion_matrix
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeClassifier
# loading the iris dataset
iris = datasets.load_iris()
X = iris.data
y = iris.target
# dividing X, y into train and test data
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0)
dtree_model = DecisionTreeClassifier(max_depth = 2).fit(X_train, y_train)
plot_confusion_matrix(dtree_model, X_test, y_test)

Это матрица путаницы из приведенного выше кода.

Теперь давайте пометим TP, FP, TN, FN из этой матрицы. Поскольку существует 3 класса, эти значения рассчитываются для каждого класса. Диагональные элементы показывают правильные прогнозы.

Для класса 0 TP равно 13, т. е. все они классифицированы правильно и, следовательно, TN = FN = FP = 0. Для класса 1 TP = 15, FN = 1, FP = 3. В качестве упражнения придумайте значения для класса 2 (TP = 6, FN = 3, FP = 1).

Отзывать

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

Recall = True Positives / (True Positives + False Negatives)

Точность

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

Precision = True Positives / (True Positives + False Positives)

Напомним против (и) точности

В приведенном выше примере класс 0 содержит 13 образцов, и все они были классифицированы правильно. Теперь, скажем, наряду с этими 13 образцами, 7 экземпляров класса 2 также были классифицированы как класс 0. В этом случае у нас есть полнота 100%, но точность составляет всего 65%. Если бы мы использовали только отзыв для оценки модели, это могло бы ввести в заблуждение. Следовательно, нам необходимо изучить оба для оценки наших моделей. Иногда бывает и так, что увеличение точности приводит к уменьшению полноты и наоборот.

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

F1-счет

Поскольку отзыв и точность могут противоречить друг другу, для достижения баланса мы можем объединить их в единую меру, известную как F1-Score.

Показатель F1 определяется как среднее гармоническое для точности и полноты, и, как и для полноты и точности, он находится в диапазоне от 0 до 1. Чем ближе значение к 1, тем лучше наша модель. Оценка F1 зависит как от отзыва, так и от точности.

F1-Score = 2 * Precision * Recall/(Precision + Recall)

Все вышеуказанные показатели для каждого класса можно рассчитать с помощью отчета о классификации sklearn:

print(classification_report(y_test, dtree_predictions, target_names=['class 0', 'class 1', 'class 2']))

Из приведенного выше отчета мы видим, что общая точность составляет 0,89, а точность, полнота и оценка f1 были рассчитаны для каждого класса. Давайте проверим баллы для класса 1 из наших расчетов TP, FP, FN, TN выше.

For Class 1, TP = 15, FN = 1, FP = 3
Recall = 15/(15 + 1) = 0.94
Precision = 15/(15 + 3) = 0.83
F1-Score = 2 * 0.94 * 0.83/(0.94 + 0.83) = 0.88

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

Кривая ROC-AUC

Другим популярным способом измерения производительности модели является кривая/оценка ROC-AUC. Кривая рабочих характеристик приемника показывает производительность модели при различных пороговых значениях, используемых для классификации. Он отображает истинную положительную частоту по оси y и ложноположительную частоту по оси x, которая была рассчитана для каждого порога вероятности. Эта кривая помогает измерить способность модели различать два класса. Как мы видели в предыдущих примерах, недостаточно просто иметь высокий отзыв, нам также нужно позаботиться о том, чтобы FP не были слишком высокими.

Помимо отзыва (чувствительности или истинного положительного показателя), существует множество других показателей, которые можно рассчитать из матрицы путаницы. Одним из них является показатель ложных срабатываний, который рассчитывается следующим образом. Этот процент ложных срабатываний также можно рассчитать как 1 — специфичность.

Specificity = True Negatives/(True Negatives + False Positives)
False Positive Rate = Number of False Positives/(Number of False Positives + True Negatives)

В общем, наша цель состоит в том, чтобы уменьшить процент ложных срабатываний и добиться высокого показателя истинных срабатываний. Чтобы измерить это, мы рассчитываем AUC, что означает площадь под ROC-кривой. Это значение находится между 0 и 1, и чем ближе AUC к 1, тем лучше наша модель. Если AUC равен нулю, все прогнозы являются ложными срабатываниями и производительность плохая. Если AUC равен единице, модель отлично различает два класса, а кривая представляет собой горизонтальную линию. Если AUC равен 0,5, TPR и FPR равны, и модель так же хороша, как случайный прогноз. Обычно показатель AUC 0,8 или 0,9 считается хорошим.

Кривая ROC-AUC может использоваться только для задачи бинарной классификации. В условиях множественной классификации нам нужно изменить задачу на OneVsRestClassification, т. е. для построения графиков мы сначала рассматриваем класс 0 как положительный класс, а классы 1 и 2 будем считать отрицательным классом. Точно так же мы рассматриваем класс 1 как положительный класс, а классы 0 и 1 как отрицательный класс, и это аналогично для класса 2. В качестве альтернативы мы также можем построить кривую ROC-AUC с помощью OneVsOneClassification и измерить способность модели различать любые два класса, игнорируя третий класс.

Давайте применим стратегию к нашей текущей проблеме, используя приведенный здесь код Scikit-Code-Multi-Class. Мы меняем код, чтобы использовать классификатор дерева решений с max_depth = 2 вместо SVM и строим кривую ROC-AUC для каждого класса.

На приведенном выше графике мы видим ROC-кривые разных классов. У класса 0 самая высокая AUC, а у класса 1 самая низкая AUC. Черная пунктирная линия представляет собой случайные прогнозы, а синяя линия показывает среднее значение AUC для всех трех классов. С помощью этой информации мы могли бы построить лучшие модели, которые улучшают AUC класса 1 и класса 2. Здесь AUC показывает, насколько хорошо модель отличает конкретный класс от остальных классов.

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

Рекомендации







Я студент магистра наук о данных @ TU Dortmund. Не стесняйтесь связаться со мной в LinkedIn для любых отзывов о моих сообщениях или любого профессионального общения.