#python #scikit-learn #confusion-matrix
#python #scikit-learn #путаница-матрица
Вопрос:
Я делаю двоичную классификацию. Всякий раз, когда мое предсказание равно основной истине, я считаю sklearn.metrics.confusion_matrix
, что возвращаю одно значение. Нет ли проблемы?
from sklearn.metrics import confusion_matrix
print(confusion_matrix([True, True], [True, True])
# [[2]]
Я ожидал бы чего-то вроде:
[[2 0]
[0 0]]
Ответ №1:
Вы должны заполнить labels=[True, False]
:
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_true=[True, True], y_pred=[True, True], labels=[True, False])
print(cm)
# [[2 0]
# [0 0]]
Почему?
Из документов следует, confusion_matrix(y_true, y_pred)
что вывод:
C: ndarray формы (n_classes, n_classes)
Переменная n_classes
является либо:
- угадывается как количество уникальных значений в
y_true
илиy_pred
- берется из длины необязательных параметров
labels
В вашем случае, поскольку вы не заполнили labels
поле, переменная n_classes
угадывается по количеству уникальных значений, в [True, True]
которых равно 1. Отсюда и результат.
Ответ №2:
Вы получаете 1 число, потому что вы не указали свои метки. Я думаю, что этот код поможет вам получить true_positives, true negative, прецессию, отзыв, оценку f1 и т. Д
Код
from sklearn import metrics
A = [True, True]
B = [True, True]
label = [True, False]
# True positives and False Negatives
cm = metrics.confusion_matrix(y_true=A, y_pred=B, labels=label)
print(cm)
# Report (f1-score, precesion, recall, support)
report = metrics.classification_report([True, False], [False, True], digits=3,output_dict=True)
df = pd.DataFrame(report).transpose()
df
Результаты
[[2 0]
[0 0]]
Комментарии:
1. Это явный дубликат моего ответа, опубликованного ранее, где я, по-видимому, также получил отрицательный результат. Насколько это возможно несправедливо?
2. Да! Я взял ваш ответ и изменил его для получения дополнительной информации
3. Но то, что вы добавили, не соответствует заданному вопросу.