利用sklearn对多分类的每个类别进行指标评价

  今天晚上,笔者接到客户的一个需要,那就是:对多分类结果的每个类别进行指标评价,也就是需要输出每个类型的精确率(precision),召回率(recall)以及F1值(F1-score)。
  对于这个需求,我们可以用sklearn来解决,方法并没有难,笔者在此仅做记录,供自己以后以及读者参考。
  我们模拟的数据如下:

y_true = ['北京', '上海', '成都', '成都', '上海', '北京', '上海', '成都', '北京', '上海']
y_pred = ['北京', '上海', '成都', '上海', '成都', '成都', '上海', '成都', '北京', '上海']

其中y_true为真实数据,y_pred为多分类后的模拟数据。使用sklearn.metrics中的classification_report即可实现对多分类的每个类别进行指标评价。
  示例的Python代码如下:

# -*- coding: utf-8 -*-
from sklearn.metrics import classification_report

y_true = ['北京', '上海', '成都', '成都', '上海', '北京', '上海', '成都', '北京', '上海']
y_pred = ['北京', '上海', '成都', '上海', '成都', '成都', '上海', '成都', '北京', '上海']

t = classification_report(y_true, y_pred, target_names=['北京', '上海', '成都'])

print(t)

输出结果如下:

              precision    recall  f1-score   support

          北京       0.75      0.75      0.75         4
          上海       1.00      0.67      0.80         3
          成都       0.50      0.67      0.57         3

    accuracy                           0.70        10
   macro avg       0.75      0.69      0.71        10
weighted avg       0.75      0.70      0.71        10

需要注意的是,输出的结果数据类型为str,如果需要使用该输出结果,则可将该方法中的output_dict参数设置为True,此时输出的结果如下:

{‘北京’: {‘precision’: 0.75, ‘recall’: 0.75, ‘f1-score’: 0.75, ‘support’: 4},
‘上海’: {‘precision’: 1.0, ‘recall’: 0.6666666666666666, ‘f1-score’: 0.8, ‘support’: 3},
‘成都’: {‘precision’: 0.5, ‘recall’: 0.6666666666666666, ‘f1-score’: 0.5714285714285715, ‘support’: 3},
‘accuracy’: 0.7,
‘macro avg’: {‘precision’: 0.75, ‘recall’: 0.6944444444444443, ‘f1-score’: 0.7071428571428572, ‘support’: 10},
‘weighted avg’: {‘precision’: 0.75, ‘recall’: 0.7, ‘f1-score’: 0.7114285714285715, ‘support’: 10}}

  使用confusion_matrix方法可以输出该多分类问题的混淆矩阵,代码如下:

from sklearn.metrics import confusion_matrix
y_true = ['北京', '上海', '成都', '成都', '上海', '北京', '上海', '成都', '北京', '上海']
y_pred = ['北京', '上海', '成都', '上海', '成都', '成都', '上海', '成都', '北京', '上海']
print(confusion_matrix(y_true, y_pred, labels = ['北京', '上海', '成都']))

输出结果如下:

[[2 0 1]
 [0 3 1]
 [0 1 2]]

  为了将该混淆矩阵绘制成图片,可使用如下的Python代码:

# -*- coding: utf-8 -*-
# author: Jclian91
# place: Daxing Beijing
# time: 2019-11-14 21:52

from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt
import matplotlib as mpl

# 支持中文字体显示, 使用于Mac系统
zhfont=mpl.font_manager.FontProperties(fname="/Library/Fonts/Songti.ttc")

y_true = ['北京', '上海', '成都', '成都', '上海', '北京', '上海', '成都', '北京', '上海']
y_pred = ['北京', '上海', '成都', '上海', '成都', '成都', '上海', '成都', '北京', '上海']


classes = ['北京', '上海', '成都']
confusion = confusion_matrix(y_true, y_pred)

# 绘制热度图
plt.imshow(confusion, cmap=plt.cm.Greens)
indices = range(len(confusion))
plt.xticks(indices, classes, fontproperties=zhfont)
plt.yticks(indices, classes, fontproperties=zhfont)
plt.colorbar()
plt.xlabel('y_pred')
plt.ylabel('y_true')

# 显示数据
for first_index in range(len(confusion)):
    for second_index in range(len(confusion[first_index])):
        plt.text(first_index, second_index, confusion[first_index][second_index])

# 显示图片
plt.show()

生成的混淆矩阵图片如下:

生成的混淆矩阵图
  本次分享到此结束,感谢大家阅读,也感谢在北京大兴待的这段日子,当然还会再待一阵子~

  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
sklearn中,多分类模型的评价指标包括准确率、混淆矩阵、精确率、召回率、F1-score、支持度等。 首先,准确率是评价多分类模型性能的常用指标之一。它表示模型预测正确的样本占总样本数量的比例。准确率越高,模型的性能越好。 其次,混淆矩阵是多分类模型评价的重要工具。它是一个正方形矩阵,行表示实际类别,列表示预测类别。矩阵的每个元素表示被分为某个类别的样本数量。通过分析混淆矩阵可以得到模型在不同类别上的预测情况。 除了准确率和混淆矩阵之外,精确率和召回率也是常用的多分类模型评价指标之一。精确率表示在所有被预测为某一类别的样本中,实际属于该类别的比例。召回率表示在所有实际属于某一类别的样本中,被正确预测为该类别的比例。 F1-score是综合衡量精确率和召回率的指标,它是二者的调和均值,可以更全面地评估模型的性能。F1-score越高,模型的性能越好。 最后,支持度指标表示每个类别在样本中的出现次数。该指标可以衡量模型对各个类别的预测能力。支持度越高,表示该类别在样本中的比例越大。 在sklearn中,我们可以使用相应的函数或方法计算这些多分类模型评价指标,如准确率可以使用accuracy_score函数,混淆矩阵可以使用confusion_matrix函数,精确率和召回率可以使用classification_report函数,F1-score可以使用f1_score函数,支持度可以使用value_counts方法等。通过这些评价指标,我们可以对多分类模型的性能进行全面的评估和比较。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值