python:多分类-计算混淆矩阵confusion_matrix、precision、recall、f1-score分数

1.目标:

多分类,计算混淆矩阵confusion_matrix,以及accuracy、precision、recall、f1-score分数。

2.代码:

  • 1)使用sklearn计算并画出混淆矩阵(confusion_matrix)

  • 2)使用sklearn计算accuracy(accuracy_score)

  • 3)使用sklearn计算多分类的precision、recall、f1-score分数。以及计算每个类别的precision、recall、f1-score。

  • 默认precision_score、recall_score、f1_score函数只能求出二分类问题的精准率(average参数默认为binary),不过如果要想能够求出多分类问题的精准率可以选择合理average参数的值,比如:micro、macro等。

  • 参数average有5个选项:{‘micro’微平均, ‘macro’宏平均, ‘samples’, ‘weighted’, ‘binary’},默认是default=’binary’二分类。

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score, precision_score, f1_score, recall_score, classification_report

# y_true为真实值,y_pred为预测值(此处y_true和y_pred仅作举例,随便取的值,有0~4共5个类别。)
y_true = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
y_pred = [1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 3, 3, 0, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4]

# 1.计算混淆矩阵
cm = confusion_matrix(y_true, y_pred)
conf_matrix = pd.DataFrame(cm, index=['1','2','3','4','5'], columns=['1','2','3','4','5'])  #数据有5个类别
# 画出混淆矩阵
fig, ax = plt.subplots(figsize=(4.5, 3.5))
sns.heatmap(conf_matrix, annot=True, annot_kws={"size": 14}, cmap="Blues")
plt.ylabel('True label', fontsize=14)
plt.xlabel('Predicted label', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.savefig('confusion.pdf', bbox_inches='tight')
plt.show()

# 2.计算accuracy
print('accuracy_score', accuracy_score(y_true, y_pred))

# 3.计算多分类的precision、recall、f1-score分数
print('Micro precision', precision_score(y_true, y_pred, average='micro'))
print('Micro recall', recall_score(y_true, y_pred, average='micro'))
print('Micro f1-score', f1_score(y_true, y_pred, average='micro'))

print('Macro precision', precision_score(y_true, y_pred, average='macro'))
print('Macro recall', recall_score(y_true, y_pred, average='macro'))
print('Macro f1-score', f1_score(y_true, y_pred, average='macro'))

# 下面这个可以显示出每个类别的precision、recall、f1-score。
print('classification_report\n',classification_report(y_true, y_pred))

3.结果:

参考:

https://blog.csdn.net/kan2281123066/article/details/103237273 利用sklearn 计算 precision、recall、F1 score

https://zhuanlan.zhihu.com/p/147663370 多分类模型Accuracy, Precision, Recall和F1-score的超级无敌深入探讨

https://cloud.tencent.com/developer/article/1632611 机器学习入门 10-8 多分类问题中的混淆矩阵

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Confusion matrix是评估分类模型性能的一种方法。它是一个二维矩阵,其中行表示实际类别,列表示预测类别。在二分类问题中,confusion matrix如下所示: | | 预测正类 | 预测负类 | | :----------: | :----------: | :----------: | | **实际正类** | TP | FN | | **实际负类** | FP | TN | 其中,TP表示真正例(True Positive),即实际为正例且被模型预测为正例的样本数;FN表示假反例(False Negative),即实际为正例但被模型预测为负例的样本数;FP表示假正例(False Positive),即实际为负例但被模型预测为正例的样本数;TN表示真反例(True Negative),即实际为负例且被模型预测为负例的样本数。 通过confusion matrix,可以计算出一些性能指标,如准确率、召回率、精确率和F1值等。这些指标可以帮助我们更全面地评估分类模型的性能。 例如,准确率可以表示为: $Accuracy = \frac{TP + TN}{TP + FP + FN + TN}$ 召回率可以表示为: $Recall = \frac{TP}{TP + FN}$ 精确率可以表示为: $Precision = \frac{TP}{TP + FP}$ F1值可以表示为: $F1 = \frac{2 \times Precision \times Recall}{Precision + Recall}$ 在实际应用中,我们可以使用Python中的sklearn.metrics库计算confusion matrix及其相关指标。例如,下面的代码演示了如何计算confusion matrix和准确率: ```python from sklearn.metrics import confusion_matrix, accuracy_score y_true = [0, 1, 0, 1, 0, 0, 1, 1] y_pred = [0, 1, 1, 1, 0, 0, 0, 1] cm = confusion_matrix(y_true, y_pred) accuracy = accuracy_score(y_true, y_pred) print("Confusion matrix:\n", cm) print("Accuracy:", accuracy) ``` 输出结果为: ``` Confusion matrix: [[3 1] [2 2]] Accuracy: 0.625 ``` 其中,confusion matrix为: | | 预测正类 | 预测负类 | | :--: | :--: | :--: | | 实际正类 | 3 | 1 | | 实际负类 | 2 | 2 | 准确率为0.625。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_39450145

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值