Я обучил модель в keras и сделал несколько прогнозов. Чтобы оценить производительность моей модели, я рассчитал показатели точности и полноты, а также матрицу путаницы с помощью библиотеки sklearn. Это мой код:
final_predictions = model.predict_generator(generator_test, steps=steps_per_epoch_test)
rounded_pred = [0 if x<=0.5 else 1 for x in final_predictions]
test_precision_score = round(precision_score(y_test, rounded_pred), 3)
test_recall_score = round(recall_score(y_test, rounded_pred), 3)
test_confusion_matrix = confusion_matrix(y_test, rounded_pred)
Это мои результаты:
Test confusion matrix :
[[1555 13]
[ 9 49]]
Precision and recall:
Test Precision :: 0.845
Test Recall :: 0.79
Кто-нибудь знает, почему оценка точности рассчитывается неправильно? (Должно быть (1555/(1555+13)
вместо (13/(13+49))
)
По умолчанию pos_label
из precision_score
и recall_score
равны 1
.
from sklearn.metrics import confusion_matrix,precision_score,recall_score,classification_report
y_true = [0]*1568 + [1]*58
y_pred = [0]*1555 + [1]*13 + [0]* 9+ [1]* 49
print('confusion matrix :\n',confusion_matrix(y_true,y_pred))
print('precision_score :\n',precision_score(y_true,y_pred,pos_label=1))
print('recall_score :\n',recall_score(y_true,y_pred,pos_label=1))
print('classification_report :\n',classification_report(y_true,y_pred))
confusion matrix :
[[1555 13]
[ 9 49]]
precision_score :
0.7903225806451613
recall_score :
0.8448275862068966
classification_report :
precision recall f1-score support
0 0.99 0.99 0.99 1568
1 0.79 0.84 0.82 58
micro avg 0.99 0.99 0.99 1626
macro avg 0.89 0.92 0.90 1626
weighted avg 0.99 0.99 0.99 1626
Если вы хотите получить precision_score
и recall_score
из label=1
. Вы можете установить pos_label=0
, чтобы установить класс.
print('precision_score :\n',precision_score(y_true,y_pred,pos_label=0))
print('recall_score :\n',recall_score(y_true,y_pred,pos_label=0))
precision_score :
0.9942455242966752
recall_score :
0.9917091836734694
Спасибо за ваш ответ, но при установке python label=0
я получаю неверные результаты для оценки отзыва. Я получаю 0,991, а должно быть 0,844.
@Negreanu 0.8448
— это показатель отзыва для label=1
. Вы можете увидеть classification_report
в ответе.
О, да! Спасибо!
Разве это не «Если вы хотите получить точность_оценки и отзыв_оценки для метки = 0. Вы можете установить pos_Label = 0, чтобы установить класс»? вместо метки=1? Я запутался. Однако фрагменты кода точны.
Вы пробовали переключать аргументы
confusion_matrix()
. Мне кажется, что точность и полнота рассчитываются с 49, рассматриваемыми как истинно положительные, а не как истинно отрицательные.