Матрица путаницы для значений, помеченных как TP, TN, FP, FN

У меня есть фрейм данных Pandas, и я хочу нарисовать матрицу путаницы для столбца.

Значения этого столбца представляют собой строки, уже помеченные как «Ложноотрицательные», «Ложноположительные», «Истинноотрицательные» и «Истинноположительные».

Поскольку это не типичные значения True/False, как я могу сгенерировать матрицу путаницы (аналогичную матрице, созданной scikit-learn/matplotlib) с этими значениями?

(Отредактировано для уточнения) Предположим, что у меня есть следующие значения в столбце:

['True Positive', 'True Negative', 'False Positive', 'False Negative', 'True Negative', ..., True Positive', 'False Negative']

Я могу объединить эти значения в общее количество TP, TN, FP, FN. Тем не менее, я хотел бы отобразить матрицу путаницы, аналогичную той, которая создается с помощью следующего:

disp = sklearn.metrics.ConfusionMatrixDisplay(confusion_matrix=cm)
disp = disp.plot(cmap = "Blues")
matplot.lib.pyplot.plt.show()

Заранее спасибо!

Привет @Irina, пожалуйста, предоставьте воспроизводимые данные для ваших вопросов. Несправедливо ожидать помощи, не предоставив фрагмент кода, который помогает другим генерировать упомянутые вами данные, см. Как спросить. Кроме того, предоставьте ожидаемый результат, который предпочтительнее для вашей попытки.

Akshay Sehgal 22.12.2020 06:13

Спасибо, @AkshaySehgal - добавлено больше деталей. Надеюсь, это поможет прояснить вопрос. Спасибо!

Irina 22.12.2020 06:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
3 425
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Самый простой способ справиться с этим будет примерно таким:

TP = 0
TN = 0
FP = 0
FN = 0

for label in df.ColumnName:
    
    if label == "True Positive":
        TP  += 1
    elif label == "True Negative":
        TN += 1
    elif label == "False Positive":
        FP += 1
    else:
        FN += 1

print("Confusion Matrix : ")
print(f"[{TP}] [{FP}]")
print(f"[{FN}] [{TN}]")

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

Другой гораздо меньший способ сделать то же самое заключается в следующем:

print(df['ColumnName'].value_counts()

Затем, чтобы построить значения, используя следующий код

import matplotlib.pyplot as plt
import numpy as np

data = [[TP, FP],[FN, TN]]
heatmap = plt.pcolor(data)
plt.colorbar(heatmap)
plt.show()

спасибо. Имея эти значения, можно ли построить графическую матрицу путаницы (аналогично использованию ConfusionMatrixDisplay из sklearn.metrics, а затем disp.plot)?

Irina 22.12.2020 06:22

Нет, вы не можете этого сделать, так как ConfusionMatrixDisplay строит кривую ROC, которая рассчитывается для обучаемой модели. Мы вычисляем значение истинных положительных показателей и ложноположительных показателей, варьируя пороги для классификации. Таким образом, попытки найти ROC для набора данных не имеют никакого смысла. Кроме того, матрица путаницы - это показатель оценки для анализа производительности модели, поэтому я не уверен, почему вы хотите распечатать ее для набора данных. Если этот ответ помог, пожалуйста, примите и поддержите ответ.

Tanishq Vyas 22.12.2020 06:35

Спасибо за Ваш ответ! В настоящее время я не собираюсь отображать кривую ROC; Я пытаюсь отобразить матрицу, подобную этой: res.cloudinary.com/practicaldev/image/fetch/s--v8krdHq4--/…

Irina 22.12.2020 06:43

@Irina Я отредактировал ответ, включив в него ответ на вопрос о построении графика. Если это то, что вы искали, и это помогло, проголосуйте и примите ответ. По любому последующему вопросу, пожалуйста, прокомментируйте.

Tanishq Vyas 22.12.2020 06:54

Спасибо! Можно ли сделать ее похожей на типичную матрицу путаницы (с числом s для каждого квадранта внутри каждого квадрата, метками 1/0 и цветом?

Irina 22.12.2020 16:48

Да, это возможно. Для этого изучите seaborn.pydata.org/generated/seaborn.heatmap.html или matplotlib.org/3.1.1/gallery/images_contours_and_fields/…

Tanishq Vyas 22.12.2020 17:45

Другие вопросы по теме