Как добавить правильные метки для Seaborn Confusion Matrix - PullRequest
0 голосов
/ 30 апреля 2020

Я поместил свои данные в матрицу путаницы, используя seaborn, но столкнулся с проблемой. Проблема в том, что на обеих осях отображаются только цифры от 0 до 11, потому что у меня 12 разных меток.

Мой код выглядит следующим образом:

cf_matrix = confusion_matrix(y_test, y_pred)
fig, ax = plt.subplots(figsize=(15,10)) 
sns.heatmap(cf_matrix, linewidths=1, annot=True, ax=ax, fmt='g')

Здесь вы можете увидеть моя матрица путаницы:

Confusion matrix

Я получаю матрицу путаницы, как и должна. Единственная проблема - названия меток, которые не отображаются. Я довольно долго искал по inte rnet и безуспешно. Есть ли какие-либо параметры, которые могут прикрепить метки или как это можно сделать?

Кто-нибудь может мне помочь?

Спасибо!

// Rasmus

1 Ответ

0 голосов
/ 01 мая 2020

Когда вы разлагаете свои категории на категории, вы должны были сохранить уровни, чтобы использовать их вместе с pd.crosstab вместо confusion_matrix для построения графика. Используя радужную оболочку в качестве примера:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.metrics import classification_report, confusion_matrix

df = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data",
                 header=None,names=["s.wid","s.len","p.wid","p.len","species"])
X = df.iloc[:,:4]
y,levels = pd.factorize(df['species'])

В этой части вы получите метки y в [0, .. 1, .. 2] и уровни в качестве исходных меток, которым 0,1,2 соответствует :

Index(['Iris-setosa', 'Iris-versicolor', 'Iris-virginica'], dtype='object')

Итак, мы подходим и делаем то, что у вас есть:

clf = RandomForestClassifier(max_depth=2, random_state=0)
clf.fit(X,y)
y_pred = clf.predict(X)
print(classification_report(y,y_pred,target_names=levels))

enter image description here

И матрица путаницы с 0 , 1,2:

cf_matrix = confusion_matrix(y, y_pred)
sns.heatmap(cf_matrix, linewidths=1, annot=True, fmt='g')

enter image description here

Мы go возвращаемся и используем уровни:

cf_matrix = pd.crosstab(levels[y],levels[y_pred])
fig, ax = plt.subplots(figsize=(5,5))
sns.heatmap(cf_matrix, linewidths=1, annot=True, ax=ax, fmt='g')

enter image description here

...