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

Вопрос или проблема

Я использую Google Colab для решения задачи мульти-классификации. Я пытаюсь построить матрицу ошибок для этой задачи, я пробовал сделать это, используя:

from sklearn.metrics import multilabel_confusion_matrix, ConfusionMatrixDisplay
import matplotlib.pyplot as plt

confusion_matrix=multilabel_confusion_matrix(test_labels, y_pred)
disp=ConfusionMatrixDisplay(confusion_matrix,display_labels=test_labels)
disp.plot(include_values=True, cmap="viridis", ax=None, xticks_rotation="vertical")
plt.show()

Однако я получаю следующую ошибку:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-25-3fe075d4503c> in <module>()
      5 confusion_matrix=multilabel_confusion_matrix(test_labels, y_pred)
      6 disp=ConfusionMatrixDisplay(confusion_matrix,display_labels=test_labels)
----> 7 disp.plot(include_values=True, cmap="viridis", ax=None, xticks_rotation="vertical")
      8 plt.show()

5 frames
/usr/local/lib/python3.7/dist-packages/matplotlib/image.py in set_data(self, A)
    697                 or self._A.ndim == 3 and self._A.shape[-1] in [3, 4]):
    698             raise TypeError("Invalid shape {} for image data"
--> 699                             .format(self._A.shape))
    700 
    701         if self._A.ndim == 3:

TypeError: Invalid shape (8, 2, 2) for image data

Результатом multilabel_confusion_matrix являются несколько матриц. ConfusionMatrixDisplay отображает только одну матрицу. Один из вариантов — пройтись в цикле по матрицам, чтобы построить каждую отдельно. Что-то вроде этого:

from sklearn.metrics import multilabel_confusion_matrix, ConfusionMatrixDisplay
import matplotlib.pyplot as plt


test_labels = [0, 1, 2, 1, 0]
y_pred      = [0, 1, 2, 1, 1]
confusion_matrices = multilabel_confusion_matrix(test_labels, y_pred)
for confusion_matrix in confusion_matrices:
    disp = ConfusionMatrixDisplay(confusion_matrix, display_labels=test_labels)
    disp.plot(include_values=True, cmap="viridis", ax=None, xticks_rotation="vertical")
    plt.show()


Ответ или решение

Для решения задачи построения матрицы ошибок для задачи многоклассовой классификации в Google Colab, вы столкнулись с проблемой, вызванной неоднозначностью между многоматричной и единственной матрицей, которую можно отобразить с помощью ConfusionMatrixDisplay. Рассмотрим шаги, которые помогут вам правильно визуализировать матрицу ошибок для многоклассовой классификации.

Обзор проблемы

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

Решение проблемы

Шаги для правильного построения матрицы ошибок

  1. Импорт необходимых библиотек:
    Убедитесь, что вы импортировали multilabel_confusion_matrix и ConfusionMatrixDisplay из sklearn.metrics, а также matplotlib.pyplot для визуализации.

  2. Расчет матриц ошибок:
    Используйте multilabel_confusion_matrix(test_labels, y_pred) для расчета матриц ошибок, где test_labels и y_pred — это истинные и предсказанные метки соответственно.

  3. Отображение каждой матрицы отдельно:
    Используйте цикл for для перебора каждой индивидуальной матрицы ошибок и отображения ее с помощью ConfusionMatrixDisplay.

from sklearn.metrics import multilabel_confusion_matrix, ConfusionMatrixDisplay
import matplotlib.pyplot as plt

# Пример данных
test_labels = [0, 1, 2, 1, 0]
y_pred = [0, 1, 2, 1, 1]

# Расчет матриц ошибок
confusion_matrices = multilabel_confusion_matrix(test_labels, y_pred)

# Отображение каждой матрицы
for confusion_matrix in confusion_matrices:
    disp = ConfusionMatrixDisplay(confusion_matrix)
    disp.plot(include_values=True, cmap="viridis", ax=None, xticks_rotation="vertical")
    plt.show()

Рекомендации и дополнительные шаги

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

  • Настройка параметров диалога: Если у вас много классов, настройте параметры отображения, такие как размер фигуры (figsize), чтобы все матрицы влезли в экран и были хорошо видны.

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

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

Оцените материал
Добавить комментарий

Капча загружается...