理解metrics.classification_report
混淆矩阵是一个矩阵,类别个数可以有多个,a[i][j]表示将类别i的样本误判为类别j的个数。
classification_report用来分析不同类别的准确率,召回率,F1值等,从而便于按照类别查看准确率、召回率。
总体的正确率跟classification_report中的正确率是不一样。
import numpy as np
import sklearn.metrics as metrics
def report(mine, real):
if len(mine) != len(real):
print("mine和real长度不一样")
exit(0)
all_classes = set(list(mine) + list(real))
precision = dict()
recall = dict()
f1 = dict()
support = dict()
for c in all_classes:
if np.count_nonzero(mine == c):
precision[c] = np.count_nonzero(np.logical_and(mine == real, real == c)) / np.count_nonzero(mine == c)
else:
precision[c] = 0
if np.count_nonzero(real == c):
recall[c] = np.count_nonzero(np.logical_and(mine == real, real == c)) / np.count_nonzero(real == c)
else:
recall[c] = 0
if precision[c] and recall[c]:
f1[c] = 2 / (1 / precision[c] + 1 / recall[c])
else:
f1[c] = 0
support[c] = np.count_nonzero(real_ans == c)
s = ''
s += "%10s%10s%10s%10s%10s\n" % ("class", "precision", "recall", "f1", "support")
fmtstr2 = "%10s%10.2f%10.2f%10.2f%10d\n"
for c in all_classes:
s += (fmtstr2 % (c, precision[c], recall[c], f1[c], support[c]))
s += fmtstr2 % ("avg",
np.sum([precision[c] * support[c] for c in all_classes]) / len(mine),
np.sum([recall[c] * support[c] for c in all_classes]) / len(mine),
np.sum([f1[c] * support[c] for c in all_classes]) / len(mine),
len(mine)
)
return s
my_ans = np.random.randint(0, 2, 10)
real_ans = np.random.randint(0, 2, 10)
print(my_ans)
print(real_ans)
print("分类报告是按照类别分开的")
print('=' * 10)
print(metrics.classification_report(real_ans, my_ans))
print('=' * 10)
print(report(my_ans, real_ans))
print("准确率跟上面的正确率不一样")
print(metrics.accuracy_score(real_ans, my_ans))
print(np.count_nonzero(my_ans == real_ans) / len(my_ans))
理解metrics.classification_report的更多相关文章
- 机器学习笔记,使用metrics.classification_report显示精确率,召回率,f1指数
sklearn中的classification_report函数用于显示主要分类指标的文本报告.在报告中显示每个类的精确度,召回率,F1值等信息. 主要参数: y_true:1维数组,或标签指示器数组 ...
- 量化预测质量之分类报告 sklearn.metrics.classification_report
classification_report的调用为:classification_report(y_true, y_pred, labels=None, target_names=None, samp ...
- scikit-learn - 分类模型的评估 (classification_report)
使用说明 参数 sklearn.metrics.classification_report(y_true, y_pred, labels=None, target_names=None, sample ...
- np2016课程总结
林牧 SA16222166 课程目标 课程安排 A1a A2 A3 项目集成 环境搭建 其他方面的收获 本课心得 课程目标 通过实现一个医学辅助诊断的专家系统原型,具体为实现对血常规检测报告OCR识别 ...
- scikit_learn入门
原文:http://www.cnblogs.com/taceywong/p/4568806.html 原文地址:http://scikit-learn.org/stable/tutorial/basi ...
- Kaggle新手入门之路
学完了Coursera上Andrew Ng的Machine Learning后,迫不及待地想去参加一场Kaggle的比赛,却发现从理论到实践的转变实在是太困难了,在此记录学习过程. 一:安装Anaco ...
- Scikit-learn:模型评估Model evaluation
http://blog.csdn.net/pipisorry/article/details/52250760 模型评估Model evaluation: quantifying the qualit ...
- Examples of Scikit-learn Usages
Examples of Scikit-learn Usages KFold K-折交叉验证 >>> import numpy as np >>> from skle ...
- Python机器学习实践与Kaggle实战(转)
https://mlnote.wordpress.com/2015/12/16/python%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%AE%9E%E8%B7%B5 ...
随机推荐
- SCIKIT-LEARN与GBDT使用案例
http://blog.csdn.net/superzrx/article/details/47073847 安装 SCIKIT-LEARN是一个基于Python/numpy/scipy的机器学习库 ...
- hadoop 2.2搭建常见错误
http://blog.csdn.net/haidao2009/article/details/14897813 hadoop 2.2 搭建 http://blog.csdn.net/pelick/a ...
- linux下获取硬盘使用情况[总结]
1.前言 在嵌入式设备中,硬盘空间非常有限,在涉及到经常写日志的进程时候,需要考虑日志的大小和删除,不然很快就硬盘写满,导致日志程序崩溃.为了捕获硬盘写满的异常场景,我们需要在写日志过程中判断硬盘空间 ...
- 如何在Centos7上安装和使用ZFS
导读 ZFS文件系统的英文名称为ZettabyteFileSystem,也叫动态文件系统(DynamicFileSystem),是第一个128位文件系统.最初是由Sun公司为Solaris10操作系统 ...
- -webkit-margin-before
原文:https://www.cnblogs.com/guyw/p/4369653.html ----------------------------------------------- -webk ...
- C++结构变量数据对齐问题
为了避免混淆.做例如以下规定,下面代码若不加特殊说明都执行于32位平台,结构体的默认对齐值是8,各数据类型所占字节数分别为 char占一个字节 int占四个字节 double占八个字节. 两个样例 请 ...
- MySQL8.0手动安装心得。
https://dev.mysql.com/downloads/mysql/ mysql从5.7一下子跳跃到了8.0,其中的改变还是很大,有点这里就不说了,小伙伴们自己去百度了解一下,这里重点说一下, ...
- 【Python】使用hashlib进行MD5和sha1摘要计算
代码: import hashlib hash = hashlib.md5() hash.update('http://www.cnblogs.com/xiandedanteng'.encode('u ...
- VC++中多字节字符集和Unicode之间的互换
在Visual C++.NET中,默认的字符集是Unicode,这和Windows默认的字符集是一致的,不过在老的VC6.0等工程中,默认的字符集形式是多字节字符集(MBCS:Multi-Byte C ...
- C#.NET常见问题(FAQ)-如何修改Form不能修改窗体大小
把FormBorderSytle改一下就可以了,改成FixedSingle或者Fixed3D都可以 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com ...