#python #pandas #confusion-matrix
#python #панды #путаница-матрица
Вопрос:
У меня есть приведенный ниже код для генерации матрицы путаницы, где он генерирует тепловую карту и accuracy_score
Источник
код
import pandas as pd
import seaborn as sn
import matplotlib.pyplot as plt
from sklearn.metrics import accuracy_score
from sklearn import metrics
data = pd.read_excel(r"Confusion Matrix.xlsx")
df = pd.DataFrame(data)
confusion_matrix = pd.crosstab(df['Actual'], df['Pred'], rownames=['Actual'], colnames=['Predicted'], margins = True)
sn.heatmap(confusion_matrix, annot=True)
plt.show()
accuray_score_in_percentage = accuracy_score(['Actual'], ['Pred'])
accuray_score_in_count = accuracy_score(['Actual'], ['Pred'], normalize=False)
print('The Precentage Accuracy is : ', accuray_score_in_percentage)
print('The Count of corrects are : ', accuray_score_in_count)
ВЫВОД
Из приведенного выше вывода вы можете видеть, что точность преценденции равна: 0.0, а количество исправлений равно: 0 но это должно быть , точность преценденции равна: 0.3, а количество исправлений равно: 3. Может ли кто-нибудь помочь мне изменить код, чтобы он показывал мне правильные показатели точности.
С уважением,
Бхарат Викас
Комментарии:
1. При вызове ‘accuracy_score’ вы забыли упомянуть фрейм данных. Вы упомянули только имя столбца.
Ответ №1:
Вам не нужна матрица путаницы для вычисления точности.
Попробуйте :
accuray_score_in_percentage = accuracy_score(df['Actual'], df['Pred'])
accuray_score_in_count = accuracy_score(df['Actual'], df['Pred'], normalize=False)
Если вы действительно хотите использовать свою матрицу путаницы, вы можете сделать :
accuray_score_in_percentage = (confusion_matrix.loc[0,0] confusion_matrix.loc[1,1])/confusion_matrix.loc["All","All"]
accuray_score_in_count = confusion_matrix.loc[0,0] confusion_matrix.loc[1,1]
Комментарии:
1. Я заменил
accuray_score_in_percentage = accuracy_score(['Actual'], ['Pred'])
наaccuracy_score(confusion_matrix['Actual'], confusion_matrix['Pred'])
, но выдал мне ошибку**KeyError: Actual**
2. Извините, я допустил ошибку в своем предыдущем ответе. Я обновил его.