Рубрики
Без рубрики

Понимание матрицы путаницы

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

Матрица путаницы – это таблица, которая описывает производительность модели классификатора/классификации. Он содержит информацию о Фактические и прогнозирующие классификации Сделано классификатором, и эта информация используется для оценки производительности классификатора.

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

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

  • Классификатор: Классификатор – это в основном алгоритм, который использует «знания», полученные от учебных данных, чтобы отобразить входные данные в определенную категорию или класс. Классификаторы являются либо двоичными классификаторами, либо многоклассными/многокатегоричными/многокачественными/многопрофильными классификаторами.
  • Данные обучения и тестирования: при создании классификационной модели/классификатора наборы данных разделены на Данные обучения и Данные тестирования которые имеют ассоциированные этикетки. Метка – это ожидаемый выход, который является категорией или данными класса.
  • Фактические классификации: Это ожидаемый выход (метки) на данных.
  • Классификации прогнозирования: Это вывод, данный классификатором для конкретных входных данных.

Пример : Допустим, мы создали классификатор для классификации входного изображения автомобиля как седана или нет, и у нас есть изображение в нашем наборе данных, которое было помечено как не-седан, но классификационная модель классифицируется как седан. В этом сценарии фактическая классификация – не седан в то время как классификация прогнозирования седан .

Типы матриц путаницы

Есть два типа матриц путаницы:

  • 2-х класса матрица путаницы
  • Многокласная матрица путаницы

2-х класса матрица путаницы

2-й класс, как следует из названия, является матрицей путаницы, которая описывает производительность бинарной классификационной модели. Матрица 2 класса для Седан классификатор Я описал ранее, можно визуализировать как таковой:

В этой визуализации у нас есть два раздела, которые были изложены. У нас есть прогнозируется Раздел классификаций, который содержит два подраздела для каждого из классов и Фактическое раздел классификации, который имеет два подраздела для каждого из классов.

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

Переменная а

Переменная A подпадает под Не седан подраздел в обоих Фактическое и Прогнозируется разделы классификации. Это означает A Были сделаны прогнозы, которые правильно классифицировали изображение не-седяна [как не-седяна].

Переменная б

Переменная b подпадает под Не седан подраздел в Фактическое раздел классификации и под Седан подраздел в Прогнозируется раздел классификации. Это означает b Были сделаны прогнозы, которые неправильно классифицировали изображение не-седяна как седана.

Переменная c

Переменная C подпадает под Седан подраздел в Фактическое раздел классификации и под Не седан подраздел в Прогнозируется раздел классификации. Это означает C Были сделаны прогнозы, которые неправильно классифицировали изображение седана как не-седяна.

Переменная d

Переменная D подпадает под Седан подраздел в обоих Фактическое и Прогнозируется разделы классификации. Это означает D Были сделаны прогнозы, которые правильно классифицировали изображение седана [как седан].

Легкий Peasy Lemon Squeezy. (Я надеюсь? 😅)

Но подождите, мы еще не закончили …….

Теперь у нас есть наша матрица путаницы для нашей Седан Классификатор, но как это помогает нам определить производительность/эффективность нашего классификатора? Чтобы выяснить производительность классификатора с использованием матрицы путаницы и данных, которые он содержит, существуют некоторые стандартные метрики, которые мы можем рассчитать [для] с использованием данных (переменных) в матрице путаницы.

Точность

Точность в матрице путаницы с двумя классами-это отношение общего количества правильных прогнозов к общему количеству прогнозов. Из нашей матрицы путаницы мы видим, что A и D Были сделаны прогнозы, которые правильно классифицировали входное изображение и b и C Были сделаны прогнозы, которые неправильно классифицировали входное изображение.

Следовательно, точность может быть рассчитана как:

Точность знак равно ( a + d )/( a + b + c + d )

Где, a + d это общее количество правильных прогнозов и A + B + C + D это общее количество сделанных прогнозов.

Истинные позитивы, истинные негативы, ложные позитивы и Ложный негатив

По отношению к нашей матрице классификатора и путаницы:

Истинные позитивы (TP) количество прогнозов, где изображение седана правильно классифицируется [как седан]. Из нашей матрицы путаницы переменная D также TP Анкет

Истинные негативы (TN) это количество прогнозов, где изображение не седяна правильно классифицируется [как не-седан]. Из нашей матрицы путаницы переменная A также наш Tn Анкет

Ложные позитивы (FP) количество прогнозов, где изображение не-седяна неправильно классифицируется как седан. Из нашей матрицы путаницы переменная b также наш Fp Анкет

Ложные негативы (FN) количество прогнозов, где изображение седана неправильно классифицируется как не-седан. Из нашей матрицы путаницы переменная C также наш Fn Анкет

Истинный положительный скорость

Истинная положительная скорость – это отношение Истинные позитивы к сумме Истинные позитивы и Ложные негативы Анкет Он показывает, как часто классификатор классифицирует изображение седана как седан.

Следовательно, истинная положительная скорость может быть рассчитана как:

Истинная положительная скорость = D /( C + D ) Где D это Тк и C это Фн

Истинная положительная скорость также известна как Вспомните или чувствительность

Ложная положительная скорость

Ложная положительная скорость является соотношением Ложные позитивы к сумме Настоящие негативы и Ложные позитивы Анкет Он показывает, как часто классификатор классифицирует изображение не седана как седан.

Следовательно, ложная положительная скорость может быть рассчитана как:

Ложная положительная скорость = b /( a + b ) Где A это Tn и б Фп

Истинная отрицательная скорость

Истинная отрицательная скорость – это отношение Настоящие негативы к сумме Настоящие негативы и Ложные позитивы Анкет Он показывает, как часто классификатор классифицирует изображение не-седяна как не-седяна.

Следовательно, ложная положительная скорость может быть рассчитана как:

Истинная негативная скорость = A /( a + b ) Где A это Tn и б Фп

Истинная негативная скорость также известна как специфичность Анкет

Ложная отрицательная скорость

Ложная отрицательная скорость является соотношением Ложные негативы к сумме Ложные негативы и Истинные позитивы Анкет Он показывает, как часто классификатор классифицирует изображение седана как не-седяна.

Следовательно, ложная положительная скорость может быть рассчитана как:

Ложная отрицательная скорость = C /( C + D ) Где D это Тк и C это Фн

Точность

Точность является соотношением Истинные позитивы к сумме Истинные позитивы и Ложные позитивы Анкет Он показывает, как часто классификатор классифицирует входное изображение как седан, и он оказывается правильным.

Это рассчитывается как:

Точность = d / (B + D) Где D это Тк а также b это Фп

Пример

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

Из матрицы путаницы мы видим это:

  • 4252 были сделаны прогнозы, которые правильно классифицировали не-седан [как не-седан]. Поэтому наша переменная A и Истинный отрицательный (TN) 4252.
  • 875 были сделаны предсказания, которые неправильно классифицировали не-седан как седан. Поэтому наша переменная b и Ложный положительный (FP) 875.
  • 421 были сделаны прогнозы, которые неправильно классифицировали седан как не-седан. Поэтому наша переменная C и Ложный отрицательный (fn) 421.
  • 4706 были сделаны прогнозы, которые правильно классифицировали седан [как седан]. Поэтому наша переменная d и Истинный положительный (TP) 4706

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

Точность

Точность = (A + D) / (A + B + C + D) = (4252 + 4706) / (4252 + 875 + 421 + 4706) = (8958) / (10254) ​ = 0.8736102984201287 Точность = 0,87

Поэтому классификатор имеет точность 0,87, что составляет 87%

Истинный положительный скорость

Tpr = TP/(TP + FN) = 4706 / (4706 + 421) = 4706 / 5127 = 0,917885703140238 Tpr = 0,92

Поэтому классификатор имеет истинную положительную скорость 0,92, что составляет 92%

Ложная положительная скорость

Fpr = Fp/(fp + tn) = 875 / (875 + 4252) = 875 / 5127 = 0,1706651062999805 Fpr = 0,17

Поэтому классификатор имеет ложную положительную скорость 0,17, что составляет 17%

Истинная отрицательная скорость

Tnr = TN/(TN + FP) = 4252/(4252 + 875) = 4252/5127 = 0,8293348937000195 Tnr = 0,83

Поэтому классификатор имеет истинную отрицательную скорость 0,83, которая составляет 83%

Ложная отрицательная скорость

Fnr = Fn/(fn + tp) = 421/(421 + 4706) = 421/5127 ​ = 0.082114296859762 Fnr = 0,08

Поэтому классификатор имеет ложную отрицательную скорость 0,08, что составляет 8%

Точность

Точность = TP/(TP + FP) = 4706/(4706 + 875) = 4706/5581 = 0,8293348937000195 Точность = 0.83

Поэтому классификатор имеет точность 0,83, которая составляет 83%

Как генерировать матрицу путаницы с помощью Python

import matplotlib.pylab as plt
import itertools
import numpy as np
from sklearn.metrics import confusion_matrix

def plot_confusion_matrix(cm, classes,normalize=False):
    plt.figure(figsize = (5,5))
    plt.imshow(cm, interpolation='nearest', cmap=plt.cm.Blues)
    plt.title('Confusion matrix')
    plt.colorbar()
    tick_marks = np.arange(len(classes))
    plt.xticks(tick_marks, classes, rotation=90)
    plt.yticks(tick_marks, classes)
    if normalize:
        cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]

    thresh = cm.max() / 2.
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
        plt.text(j, i, cm[i, j],
                 horizontalalignment="center",
                 color="white" if cm[i, j] > thresh else "black")
    plt.tight_layout()
    plt.ylabel('Actual')
    plt.xlabel('Predicted')

dict_characters = {0: 'Non-sedan', 1: 'Sedan'}

y_pred = model.predict(test_data)
y_pred_classes = np.argmax(y_pred, axis=1)
y_true = np.argmax(test_labels, axis=1)

confusion_mat = confusion_matrix(y_true, y_pred_classes)
plot_confusion_matrix(confusion_mat, classes = list(dict_characters.values()))

Чтобы сгенерировать матрицу путаницы, мы используем Numpy, matplotlib.pylab для визуализации матрицы, функции путаницы_матрикса из пакета Sklearn.metrics для генерации матрицы путаницы и иртул для петли/итерации.

Сначала мы определяем функцию plot_confusion_matrix Это требует сгенерированной матрицы путаницы и ожидаемых/возможных классов в качестве аргументов и использования matplotlib.pylab для визуализации матрицы путаницы.

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

dict_characters является словарем двух возможных классов, в нашем случае « не седан » и « седан ». Y_PRED является массивом предсказаний, сделанных классификатором на тестовых данных модель Наш обученный классификатор/алгоритм test_data Наши тестовые данные y_pred_classes это массив индексов Numpy относительно Y_PRED который является массивом прогнозов, сделанных классификатором на тестовых данных. y_true является массивом индексов Numpy по сравнению с фактическими/правильными метками test_data. test_labels является списком меток тестовых данных.

Используя вышеизложенное, мы используем путаница_matrix функция из Sklearn.metrics Чтобы сгенерировать матрицу путаницы, передавая правильные значения ( y_true ) и оцененные значения, возвращаемые классификатором ( y_pred_classes ) и мы храним сгенерированную матрицу путаницы в переменной путаница_mat Анкет

Затем мы передаем матрицу путаницы ( confusm_mat ) и список значений наших возможных классов ( dict_characters ) в качестве аргументов для plot_confusion_matrix функция, которая затем визуализирует матрицу путаницы.

В моем следующем посте я [надеюсь] писать на многоклассной матрице путаницы.

Оригинал: “https://dev.to/overrideveloper/understanding-the-confusion-matrix-2dk8”