混淆矩阵(Confusion matrix)的原理及使用(scikit-learn 和 tensorflow)

原理

  在机器学习中, 混淆矩阵是一个误差矩阵, 常用来可视化地评估监督学习算法的性能. 混淆矩阵大小为 num_classes x num_classes 的方阵, 其中 num_classes 表示类的数量. 这个矩阵的每一行表示真实类中的实例, 而每一列表示预测类中的实例 (Tensorflow 和 scikit-learn 采用的实现方式). 也可以是, 每一行表示预测类中的实例, 而每一列表示真实类中的实例 (Confusion matrix From Wikipedia 中的定义). 通过混淆矩阵, 可以很容易看出系统是否会弄混两个类, 这也是混淆矩阵名字的由来.

  混淆矩阵是一种特殊类型的列联表(contingency table)或交叉制表(cross tabulation or crosstab). 其有两维 (真实值 "actual" 和 预测值 "predicted" ), 这两维都具有相同的类("classes")的集合. 在列联表中, 每个维度和类的组合是一个变量. 列联表以表的形式, 可视化地表示多个变量的频率分布.

使用混淆矩阵( scikit-learn 和 Tensorflow)

  下面先介绍在 scikit-learn 和 tensorflow 中计算混淆矩阵的 API (Application Programming Interface) 接口函数, 然后在一个示例中, 使用这两个 API 函数.

scikit-learn 混淆矩阵函数 sklearn.metrics.confusion_matrix API 接口

skearn.metrics.confusion_matrix(
    y_true,   # array, Gound true (correct) target values
    y_pred,  # array, Estimated targets as returned by a classifier
    labels=None,  # array, List of labels to index the matrix.
    sample_weight=None  # array-like of shape = [n_samples], Optional sample weights
)

在 scikit-learn 中, 计算混淆矩阵用来评估分类的准确度.

  按照定义, 混淆矩阵 C 中的元素 Ci,j 等于真实值为组 i , 而预测为组 j 的观测数(the number of observations). 所以对于二分类任务, 预测结果中, 正确的负例数(true negatives, TN)为 C0,0; 错误的负例数(false negatives, FN)为 C1,0; 真实的正例数为 C1,1; 错误的正例数为 C0,1.

  如果 labels 为 None, scikit-learn 会把在出现在 y_true 或 y_pred 中的所有值添加到标记列表 labels 中, 并排好序.

Tensorflow 混淆矩阵函数 tf.confusion_matrix API 接口

tf.confusion_matrix(
    labels,   # 1-D Tensor of real labels for the classification task
    predictions,   # 1-D Tensor of predictions for a givenclassification
    num_classes=None,  #  The possible number of labels the classification task can have
    dtype=tf.int32,   # Data type of the confusion matrix
    name=None,    # Scope name
    weights=None,    # An optional Tensor whose shape matches predictions
)

  Tensorflow tf.confusion_matrix 中的 num_classes 参数的含义, 与 scikit-learn sklearn.metrics.confusion_matrix 中的 labels 参数相近, 是与标记有关的参数, 表示类的总个数, 但没有列出具体的标记值. 在 Tensorflow 中一般是以整数作为标记, 如果标记为字符串等非整数类型, 则需先转为整数表示. 如果 num_classes 参数为 None, 则把 labels 和 predictions 中的最大值 + 1, 作为 num_classes 参数值.

  tf.confusion_matrix 的 weights 参数和 sklearn.metrics.confusion_matrix 的 sample_weight 参数的含义相同, 都是对预测值进行加权, 在此基础上, 计算混淆矩阵单元的值.

使用示例

#!/usr/bin/env python
# -*- coding: utf8 -*-"""Author: klchangDescription:   A simple example for tf.confusion_matrix and sklearn.metrics.confusion_matrix.Date: 2018.9.8"""from __future__ import print_function
import tensorflow as tf
import sklearn.metrics

y_true = [1, 2, 4]
y_pred = [2, 2, 4]

# Build graph with tf.confusion_matrix operation
sess = tf.InteractiveSession()
op = tf.confusion_matrix(y_true, y_pred)
op2 = tf.confusion_matrix(y_true, y_pred, num_classes=6, dtype=tf.float32, weights=tf.constant([0.3, 0.4, 0.3]))
# Execute the graph
print ("confusion matrix in tensorflow: ")
print ("1. default: \n", op.eval())
print ("2. customed: \n", sess.run(op2))

# Use sklearn.metrics.confusion_matrix function
print ("\nconfusion matrix in scikit-learn: ")
print ("1. default: \n", sklearn.metrics.confusion_matrix(y_true, y_pred))
print ("2. customed: \n", sklearn.metrics.confusion_matrix(y_true, y_pred, labels=range(6), sample_weight=[0.3, 0.4, 0.3]))

参考资料

1. Confusion matrix. In Wikipedia, The Free Encyclopedia. https://en.wikipedia.org/wiki/Confusion_matrix

2. Contingency table. In Wikipedia, The Free Encyclopedia. https://en.wikipedia.org/wiki/Contingency_table

3. Tensorflow API - tf.confusion_matrix. https://www.tensorflow.com/api_docs/python/tf/confusion_matrix

4.  scikit-learn API - sklearn.metrics.confusion_matrix. http://scikit-learn.org/stable/modules/generated/sklearn.metrics.confusion_matrix.html

原文地址:https://www.cnblogs.com/klchang/p/9608412.html

时间: 2024-09-30 06:35:30

混淆矩阵(Confusion matrix)的原理及使用(scikit-learn 和 tensorflow)的相关文章

混淆矩阵(Confusion Matrix)分析

Content ConfusionMatrix Example Talbe ofconfusion Preference Confusion Matrix 在机器学习领域,混淆矩阵(confusion matrix),又称为可能性表格或是错误矩阵.它是一种特定的矩阵用来呈现算法性能的可视化效果,通常是监督学习(非监督学习,通常用匹配矩阵:matching matrix).其每一列代表预测值,每一行代表的是实际的类别.这个名字来源于它可以非常容易的表明多个类别是否有混淆(也就是一个class被预测

混淆矩阵、准确率、精确率/查准率、召回率/查全率、F1值、ROC曲线的AUC值

准确率.精确率(查准率).召回率(查全率).F1值.ROC曲线的AUC值,都可以作为评价一个机器学习模型好坏的指标(evaluation metrics),而这些评价指标直接或间接都与混淆矩阵有关,前四者可以从混淆矩阵中直接计算得到,AUC值则要通过ROC曲线进行计算,而ROC曲线的横纵坐标又和混淆矩阵联系密切,所以在了解这些评价指标之前,先知道什么是混淆矩阵很有必要,也方便记忆. 1.混淆矩阵 对于一个二分类问题,我们可以得到如表 1所示的的混淆矩阵(confusion matrix): 表

混淆矩阵

混淆矩阵(Confusion Matrix) 混淆矩阵是一个列表,里面包含了实际值和判断值的情况.下图是信息更加丰富的一张混淆矩阵图: 作为良好的学习模型,TN和TP值是高的,FP和FN值=0:但是很多场景下FP和FN都不是0,那么怎么评价个分类学习的效果(performance)呢? Accuracy:全准率 (TP+TN)/total = (100+50)/165 = 0.91 Misclassification Rate:差错率 (FP+FN)/total = (10+5)/165 = 0

机器学习入门-混淆矩阵-准确度-召回率-F1score 1.itertools.product 2. confusion_matrix(test_y, pred_y)

1. itertools.product  进行数据的多种组合 intertools.product(range(0, 1), range(0, 1))  组合的情况[0, 0], [0, 1], [1, 0], [1, 1] 2. confusion_matrix(test_y, pred_y)  # 构造混淆矩阵 混淆矩阵是TP(正的预测成正的), FP(正的预测成负的), TN(负的预测成负的), FN(负的预测成正的) 从混淆矩阵中,我们可以很清楚的看出这个信息,这是一个信用欺诈的案例,

【Math for ML】矩阵分解(Matrix Decompositions) (上)

I. 行列式(Determinants)和迹(Trace) 1. 行列式(Determinants) 为避免和绝对值符号混淆,本文一般使用\(det(A)\)来表示矩阵\(A\)的行列式.另外这里的\(A∈R^{n×n}\)默认是方阵,因为只有方阵才能计算行列式. 行列式如何计算的就不在这里赘述了,下面简要给出行列式的各种性质和定理. 定理1:当且仅当一个方阵的行列式不为0,则该方阵可逆. 定理2:方阵\(A\)的行列式可沿着某一行或某一列的元素展开,形式如下: 沿着第\(i\)行展开:\[de

OpenGL投影矩阵(Projection Matrix)构造方法

(翻译,图片也来自原文) 一.概述 绝大部分计算机的显示器是二维的(a 2D surface).在OpenGL中一个3D场景需要被投影到屏幕上成为一个2D图像(image).这称为投影变换(参见这或这),需要用到投影矩阵(projection matrix). 首先,投影矩阵会把所有顶点坐标从eye coordinates(观察空间,eye space或view space)变换到裁剪坐标(clip coordinated,属于裁剪空间,clip space).然后,这些裁剪坐标被变换到标准化设

图像分类中混淆矩阵精度验证法中的几个指标说明

ToolBox->Classification->PostClassification->Confusion Matrix->Using Ground Truth ROIs,可以得到如下的分类精度验证的混淆矩阵. 要看懂这个精度验证结果,需要了解几个混淆矩阵中的几项评价指标: 1.总体分类精度(Overall Accuracy) 等于被正确分类的像元总和除以总像元数.被正确分类的像元数目沿着混淆矩阵的对角线分布,总像元数等于所有真实参考源的像元总数,如本次精度分类精度表中的Over

10. 混淆矩阵、总体分类精度、Kappa系数

一.前言 表征分类精度的指标有很多,其中最常用的就是利用混淆矩阵.总体分类精度以及Kappa系数. 其中混淆矩阵能够很清楚的看到每个地物正确分类的个数以及被错分的类别和个数.但是,混淆矩阵并不能一眼就看出类别分类精度的好坏,为此从混淆矩阵衍生出来各种分类精度指标,其中总体分类精度(OA)和卡帕系数(Kappa)应用最为广泛. 总体分类精度(OA):指被正确分类的类别像元数与总的类别个数的比值:OA值虽然能很好的表征分类精度,但是对类别像元个数极度不平衡的多类地物来说,其值收到像元数据较多类别的影

【转】 矩阵键盘的工作原理

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,在矩阵键盘中每条水平线和垂直线在交叉处不直接相连,而是通过一个按键相连接,这样在由N条水平线和M条垂直线最多可以有N *M 个按键,大大的减少了对于芯片I/O的占用. 键盘矩阵的按键识别方法 图1   矩阵键盘的结构 方法一 行扫描法 1.判断键盘中有无键按下 将全部行线P1.4-P1.7置低电平,当然P1.0-P1.3为高电平(或许芯片内部已经将这些引脚它上拉),然后检测列线的状态.只要有一列的电平为低,则表示键盘中有键