У меня есть фрейм данных 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()
Заранее спасибо!
Спасибо, @AkshaySehgal - добавлено больше деталей. Надеюсь, это поможет прояснить вопрос. Спасибо!
Самый простой способ справиться с этим будет примерно таким:
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)?
Нет, вы не можете этого сделать, так как ConfusionMatrixDisplay строит кривую ROC, которая рассчитывается для обучаемой модели. Мы вычисляем значение истинных положительных показателей и ложноположительных показателей, варьируя пороги для классификации. Таким образом, попытки найти ROC для набора данных не имеют никакого смысла. Кроме того, матрица путаницы - это показатель оценки для анализа производительности модели, поэтому я не уверен, почему вы хотите распечатать ее для набора данных. Если этот ответ помог, пожалуйста, примите и поддержите ответ.
Спасибо за Ваш ответ! В настоящее время я не собираюсь отображать кривую ROC; Я пытаюсь отобразить матрицу, подобную этой: res.cloudinary.com/practicaldev/image/fetch/s--v8krdHq4--/…
@Irina Я отредактировал ответ, включив в него ответ на вопрос о построении графика. Если это то, что вы искали, и это помогло, проголосуйте и примите ответ. По любому последующему вопросу, пожалуйста, прокомментируйте.
Спасибо! Можно ли сделать ее похожей на типичную матрицу путаницы (с числом s для каждого квадранта внутри каждого квадрата, метками 1/0 и цветом?
Да, это возможно. Для этого изучите seaborn.pydata.org/generated/seaborn.heatmap.html или matplotlib.org/3.1.1/gallery/images_contours_and_fields/…
Привет @Irina, пожалуйста, предоставьте воспроизводимые данные для ваших вопросов. Несправедливо ожидать помощи, не предоставив фрагмент кода, который помогает другим генерировать упомянутые вами данные, см. Как спросить. Кроме того, предоставьте ожидаемый результат, который предпочтительнее для вашей попытки.