今天晚上,笔者接到客户的一个需要,那就是:对多分类结果的每个类别进行指标评价,也就是需要输出每个类型的精确率(precision),召回率(recall)以及F1值(F1-score)。

  对于这个需求,我们可以用sklearn来解决,方法并没有难,笔者在此仅做记录,供自己以后以及读者参考。

  我们模拟的数据如下:

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

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

  示例的Python代码如下:

  1. # -*- coding: utf-8 -*-
  2. from sklearn.metrics import classification_report
  3. y_true = ['北京', '上海', '成都', '成都', '上海', '北京', '上海', '成都', '北京', '上海']
  4. y_pred = ['北京', '上海', '成都', '上海', '成都', '成都', '上海', '成都', '北京', '上海']
  5. t = classification_report(y_true, y_pred, target_names=['北京', '上海', '成都'])
  6. print(t)

输出结果如下:

  1. precision recall f1-score support
  2. 北京 0.75 0.75 0.75 4
  3. 上海 1.00 0.67 0.80 3
  4. 成都 0.50 0.67 0.57 3
  5. accuracy 0.70 10
  6. macro avg 0.75 0.69 0.71 10
  7. 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方法可以输出该多分类问题的混淆矩阵,代码如下:

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

输出结果如下:

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

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

  1. # -*- coding: utf-8 -*-
  2. # author: Jclian91
  3. # place: Daxing Beijing
  4. # time: 2019-11-14 21:52
  5. from sklearn.metrics import confusion_matrix
  6. import matplotlib.pyplot as plt
  7. import matplotlib as mpl
  8. # 支持中文字体显示, 使用于Mac系统
  9. zhfont=mpl.font_manager.FontProperties(fname="/Library/Fonts/Songti.ttc")
  10. y_true = ['北京', '上海', '成都', '成都', '上海', '北京', '上海', '成都', '北京', '上海']
  11. y_pred = ['北京', '上海', '成都', '上海', '成都', '成都', '上海', '成都', '北京', '上海']
  12. classes = ['北京', '上海', '成都']
  13. confusion = confusion_matrix(y_true, y_pred)
  14. # 绘制热度图
  15. plt.imshow(confusion, cmap=plt.cm.Greens)
  16. indices = range(len(confusion))
  17. plt.xticks(indices, classes, fontproperties=zhfont)
  18. plt.yticks(indices, classes, fontproperties=zhfont)
  19. plt.colorbar()
  20. plt.xlabel('y_pred')
  21. plt.ylabel('y_true')
  22. # 显示数据
  23. for first_index in range(len(confusion)):
  24. for second_index in range(len(confusion[first_index])):
  25. plt.text(first_index, second_index, confusion[first_index][second_index])
  26. # 显示图片
  27. plt.show()

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

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

利用sklearn对多分类的每个类别进行指标评价的更多相关文章

  1. 利用sklearn对MNIST手写数据集开始一个简单的二分类判别器项目(在这个过程中学习关于模型性能的评价指标,如accuracy,precision,recall,混淆矩阵)

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  2. 利用Sklearn实现加州房产价格预测,学习运用机器学习的整个流程(包含很多细节注解)

    Chapter1_housing_price_predict .caret, .dropup > .btn > .caret { border-top-color: #000 !impor ...

  3. 利用sklearn实现k-means

    基于上面的一篇博客k-means利用sklearn实现k-means #!/usr/bin/env python # coding: utf-8 # In[1]: import numpy as np ...

  4. 利用sklearn计算文本相似性

    利用sklearn计算文本相似性,并将文本之间的相似度矩阵保存到文件当中.这里提取文本TF-IDF特征值进行文本的相似性计算. #!/usr/bin/python # -*- coding: utf- ...

  5. sklearn CART决策树分类

    sklearn CART决策树分类 决策树是一种常用的机器学习方法,可以用于分类和回归.同时,决策树的训练结果非常容易理解,而且对于数据预处理的要求也不是很高. 理论部分 比较经典的决策树是ID3.C ...

  6. OC分类(类目/类别) 和 类扩展 - 全解析

    OC分类(类目/类别) 和 类扩展 - 全解析   具体见: oschina -> MyDemo -> 011.FoundationLog-OC分类剖析 http://blog.csdn. ...

  7. sklearn特征选择和分类模型

    sklearn特征选择和分类模型 数据格式: 这里.原始特征的输入文件的格式使用libsvm的格式,即每行是label index1:value1 index2:value2这样的稀疏矩阵的格式. s ...

  8. Flutter实战视频-移动电商-21.分类页_类别信息接口调试

    21.分类页_类别信息接口调试 先解决一个坑 取消上面的GridVIew的回弹效果.就是在拖这个gridview的时候有一个滚动的效果 physics: NeverScrollableScrollPh ...

  9. sklearn实现多分类逻辑回归

    sklearn实现多分类逻辑回归 #二分类逻辑回归算法改造适用于多分类问题1.对于逻辑回归算法主要是用回归的算法解决分类的问题,它只能解决二分类的问题,不过经过一定的改造便可以进行多分类问题,主要的改 ...

随机推荐

  1. 【故障公告】数据库服务器 CPU 近 100% 引发的故障

    抱歉,今天上午 10:48 ~ 10:33 期间,我们所使用的数据库服务(阿里云 RDS 实例 SQL Server 2016 标准版)又出现了 CPU 近 100% 问题,由此给您带来麻烦,请您谅解 ...

  2. day 07 复习总结

    今日主要内容 1. 补充基础数据类型的相关知识点 1. str. join() 把列表变成字符串 对应的是split () 表示把字符串变成列表.  ()里面为分隔符,不写默认为空格分隔 1.吧 2. ...

  3. hasChildNodes()

    hasChildNodes():方法可以用来检查一个给定的元素是否有子节点. booleanValue = element.hasChildNodes 这个方法将返回一个布尔值true或false.如 ...

  4. Python使用百度地图API根据地名获取相应经纬度

    今天有个需求,要根据地名获取经纬度坐标值. 于是我第一想法:打开百度地图,手动输入地名,获取.显然当地名较少时,可实施.然而,当地名较多时,此方法显然工作量很大. 于是,第二想法:代码获取,请求百度地 ...

  5. CSS3选择器归类整理

    CSS3选择器归类整理(附CSS优先级要点) CSS是用于网页设计可用的最强大的工具之一.使用它我们可以在几分钟内改变一个网站的界面,而不用改变页面的标签.在深入研究CSS选择器之前,我们应该先搞懂C ...

  6. 【SSL1194】最优乘车

    题面: 正文: 把每个边用链式前向星存起来,边权为\(1\),就可以愉♂快♂地最短路了

  7. 普通用户修改时间 sudo

    sudo date neokylinV7.0  desktop 1.给/etc/sudoers加权限 # chmod u+w /etc/sudoers 2.添加配置 # vim /etc/sudoer ...

  8. 请问1^x+2^x+3^x+\cdots +n^x的算式是什么呢?

    目录 总结 请问\(1^x+2^x+3^x+\cdots +n^x\)的算式是什么呢? 一.求和式\(\sum\limits_{i=1}^n{i}\)的算式 如何证明求和简式\(\sum_{i=1}^ ...

  9. 2019-2020-1 20199304《Linux内核原理与分析》第四周作业

    第三章 MenuOs的构造 一.前情回顾 计算机的三大法宝: -存储程序计算机 -函数调用堆栈 -中断 操作系统的两把宝剑: -中断上下文的切换(保存现场和恢复现场) -进程上下文的切换 二.3.1 ...

  10. python中for循环删除不全的问题

    以前遇到过一次,删除列表中符合条件的元素,for循环挨个判断是否符合条件,符合就删除,删完结果发现有一个符合条件的没有删掉. 那么如果想删除某些列表中的元素,比如有一个a列表,a=[11,22,33, ...