混淆矩阵tf.math.confusion_matrix

匆匆过客 提交于 2020-01-31 21:39:45

二维矩阵每一列预测标签中的数字代表该类别预测值,每一行真实标签中的数字的总和代表的是该类别的真实总数量。
假设有一个用来对猫cat、狗dog、兔子rabbit进行分类的系统,混淆矩阵就是为了进一步分析性能而对该算法测试结果做出的总结。
假设总共有 27 只动物:8只猫, 6条狗, 13只兔子。结果的混淆矩阵如上图,在这个混淆矩阵中:
	第一行猫类别实际真实有8只,但是分类系统将其中3只预测成了狗;
	第二行狗类别实际真实有6只,但是分类系统将其中1只预测成了兔子,2只预测成了猫;
	第三行兔子类别实际真实有13只,但是分类系统将其中2只预测成了狗;
从混淆矩阵中我们可以看出分类系统对于区分猫、狗存在一些问题,但是区分兔子的效果还算可以的。
分类系统所有正确的预测结果都在从左上角到右下角的斜对角线上,所以从混淆矩阵中可以很方便直观的看出预测哪里有错误。
监督学习:混淆矩阵
confusion_matrix(labels, predictions, num_classes=None, weights=None, dtype=tf.int32, name=None)
    根据真实标签labels和预测标签predictions计算混淆矩阵。

    矩阵的列表示预测标签predictions,矩阵的行表示真实标签labels。
	混淆矩阵总是一个二维的形状数组[n,n],其中n是给定分类任务的有效标签数。
	预测标签predictions和真实标签labels必须是相同形状的一维数组,才能使此函数工作。
 
	如果num_classes是None,那么num_classes将被设置为一个加上预测标签predictions或真实标签labels中的最大值。
	类别标签应该从0开始。例如,如果num_classes是3,那么可能的标签是[0,1,2]。
	如果weights不是None,则每个预测将其相应的权重贡献给混淆矩阵单元的总值。
 
    例子:
		tf.math.confusion_matrix([1, 2, 4], [2, 2, 4]) 
		  [[0 0 0 0 0]
		   [0 0 1 0 0]
		   [0 0 1 0 0]
		   [0 0 0 0 0]
		   [0 0 0 0 1]]
		注意,可能的标签假定为[0,1,2,3,4],产生5x5混淆矩阵。
 
    Args:
      labels: 用于分类任务的真实标签的一维张量。
      predictions: 给定分类的一维预测张量。
      num_classes: 分类任务可能具有的标签数。如果未提供此值,则将使用预测和标签数组计算该值。
      weights: 形状与预测相符的可选张量
      dtype: 混淆矩阵的数据类型
      name: 作用域名称
 
    Returns:
      dtype类型的张量,其形状为[n,n]表示混淆矩阵,其中n是分类任务中可能的标签数目。

    Raises:
      ValueError:如果预测和标签都不是一维向量且形状不匹配,或者如果权重不是None且其形状与预测不匹配。

>>> import tensorflow as tf
>>> tf.math.confusion_matrix([1, 2, 4], [2, 2, 4]) #假设可能的标签是[0, 1, 2, 3, 4],导致5x5混淆矩阵。
<tf.Tensor: id=27, shape=(5, 5), dtype=int32, numpy=
array([[0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 1]])>
	   
>>> tf.math.confusion_matrix([1, 2, 4], [2, 2, 4], num_classes=5)
<tf.Tensor: id=92, shape=(5, 5), dtype=int32, numpy=
array([[0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 1]])>


 

 

 

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!