在我们的机器学习教程(前面的章节Python和NumPy的神经网络和神经网络从头开始),我们实现的各种算法,但是我们没有正确地测量输出的质量。主要原因是我们使用非常简单的小数据集来学习和测试。在Neural Network: Testing with MNIST一章中,我们将使用大型数据集和 10 个类,因此我们需要适当的评估工具。本章我们将介绍混淆矩阵的概念:

混淆矩阵是可用于测量机器学习算法的性能的矩阵(表),通常是一个监督学习一个。混淆矩阵的每一行代表一个实际类的实例,每一列代表一个预测类的实例。这是我们在教程的这一章中保留它的方式,但也可以是相反的方式,即预测类的行和实际类的列。名称混淆矩阵反映了这样一个事实,即它让我们很容易看到我们的分类算法中发生了什么样的混淆。例如,算法应该将样本预测为C一世 因为实际的类是 C一世,但算法出来了 Cj. 在这种错误标记元素的情况下C米[一世,j] 构造混淆矩阵时,将增加 1。

我们将在以下课程中定义计算混淆矩阵、精度和召回率的方法。

2级案例

在 2 类情况下,即“负”和“正”,混淆矩阵可能如下所示:

预料到的
实际的 消极的 积极的
消极的 11 0
积极的 1 12

矩阵的字段含义如下:

预料到的
实际的 消极的 积极的
消极的 TN
真阳性
FP
误报
积极的 FN
假阴性
TP
真阳性

我们现在可以定义机器学习中使用的一些重要性能指标:

准确度

一个C=吨N+吨磷吨N+F磷+FN+吨磷

准确性并不总是一个足够的性能衡量标准。假设我们有 1000 个样本。其中 995 例为阴性,5 例为阳性。让我们进一步假设我们有一个分类器,它将任何将呈现为否定的内容分类。即使分类器无法识别任何正样本,准确率也会达到惊人的 99.5%。

回想一下。真阳性率:

r电子C一个升升=吨磷FN+吨磷

真负利率

吨N电阻=F磷吨N+F磷

精度

pr电子C一世秒一世○n:吨磷F磷+吨磷

多类案例

要衡量机器学习算法的结果,之前的混淆矩阵是不够的。我们需要对多类情况进行概括。

让我们假设我们有一个包含 25 种动物的样本,例如 7 只猫、8 只狗和 10 条蛇,最有可能是蟒蛇。我们识别算法的混淆矩阵可能如下表所示:

预料到的
实际的
6 2 0
1 6 0
1 1 8

在这个混淆矩阵中,系统正确预测了 8 只实际狗中的 6 只,但在两种情况下,它用一只狗代替了一只猫。在 6 个案例中,这 7 只猫被正确识别,但在一个案例中,一只猫被认为是一只狗。通常,很难为狗或猫取蛇,但这就是我们的分类器在两种情况下发生的情况。然而,十分之八的蛇被正确识别。(这个机器学习算法很可能不是用 Python 程序编写的,因为 Python 应该正确识别它自己的物种:-))

您可以看到所有正确的预测都位于表的对角线上,因此很容易在表中找到预测错误,因为它们将由对角线外的值表示。

我们可以将其推广到多类情况。为此,我们总结了混淆矩阵的行和列。鉴于矩阵如上定向,即矩阵的给定行对应于“真相”的特定值,我们有:

磷r电子C一世秒一世○n一世=米一世一世∑j米j一世电阻电子C一个升升一世=米一世一世∑j米一世j

这意味着,精度是算法正确预测类别 i 在算法预测 i(正确和错误)的所有实例中的比例。另一方面,召回率是算法在所有标记为 i 的案例中正确预测 i 的案例的比例。

让我们将其应用到我们的示例中:

我们动物的精度可以计算为

pr电子C一世秒一世○nd○G秒=6/(6+1+1)=3/4=0.75pr电子C一世秒一世○nC一个吨秒=6/(2+6+1)=6/9=0.67pr电子C一世秒一世○n秒n一个克电子秒=8/(0+0+8)=1

召回率计算如下:

r电子C一个升升d○G秒=6/(6+2+0)=3/4=0.75r电子C一个升升C一个吨秒=6/(1+6+0)=6/7=0.86r电子C一个升升秒n一个克电子秒=8/(1+1+8)=4/5=0.8

例子

我们现在准备将其编码到 Python 中。以下代码显示了具有十个标签的多类机器学习问题的混淆矩阵,例如用于识别手写字符中的十位数字的算法。

如果您不熟悉 Numpy 和 Numpy 数组,我们推荐我们的Numpy教程。

 numpy 导入 np厘米 = 纳米。阵列(
[[ 5825 ,    1 ,   49 ,   23 ,    7 ,   46 ,   30 ,   12 ,   21 ,   26 ],[    1 , 6654 ,   48 ,   25 ,   10 ,   32 ,   19 ,   62 ,  111 ,   10 ],[    2 ,   20 ,  5561 ,    69 ,    13,   10 ,    2 ,   45 ,   18 ,    2 ],[    6 ,   26 ,   99 , 5786 ,    5 ,  111 ,    1 ,   41 ,  110 ,   79 ],[    4 ,   10 ,   43 ,    6 , 5533 ,   32 ,   11 ,   53 ,    34 ,    79 ], [    3 ,     1 ,     2,   56 ,    0 , 4954 ,   23 ,    0 ,   12 ,    5 ],[   31 ,    4 ,   42 ,   22 ,   45 ,  103 , 5806 ,    3 ,   34 ,    3 ],[    0 ,    4 ,   30 ,   29 ,    5 ,    6 ,     0 ,  5817 ,     2 ,    28 ], [   35,    6 ,   63 ,   58 ,    8 ,   59 ,   26 ,   13 , 5394 ,   24 ],[   16 ,   16 ,   21 ,   57 ,  216 ,   68 ,    0 ,  219 ,  115 , 5693 ]])

函数“precision”和“recall”计算标签的值,而函数“precision_macro_average”计算整个分类问题的精度。

定义 精度(标签, 混淆矩阵):col  = 混淆矩阵[:, 标签]返回 混淆矩阵[标签, 标签]  /  col 。总和()定义 召回(标签, 混淆矩阵):行 = 混淆矩阵[标签, :]返回 混淆矩阵[标签, 标签]  / 行。总和()def  precision_macro_average (混淆_矩阵):行, 列 = 混淆_矩阵。形状sum_of_precisions  =  0 标签  范围(行):sum_of_precisions  + = 精度(标签, confusion_matrix )返回 sum_of_precisions  / 行def 召回宏_平均(混淆矩阵):行, 列 = 混淆矩阵。形状sum_of_recalls  =  0 标签  范围(列):sum_of_recalls  + = 召回(标签, confusion_matrix )返回 sum_of_recalls  / 列
打印(“标签精度召回” )
 标签  范围(10 ):打印(˚F “ {标签:图5d } {精度(标签,厘米):9.3f } {召回(标签,厘米):6.3F } ” )

输出:

标签精确召回0 0.983 0.9641 0.987 0.9542 0.933 0.9683 0.944 0.9244 0.947 0.9535 0.914 0.9806 0.981 0.9537 0.928 0.9828 0.922 0.9499 0.957 0.887

打印(“精度总计:” , precision_macro_average (厘米))打印(“召回总数:” , recall_macro_average (厘米))

输出:

总精度:0.9496885564052286
召回总数:0.9514531547877969

定义 精度(混淆_矩阵 ):对角线总和= 混淆_矩阵。跟踪()sum_of_all_elements  = 混淆矩阵。sum ()返回 diagonal_sum  /  sum_of_all_elements
精度(厘米)

输出:

0.9503833333333334

机器学习中的混淆矩阵相关推荐

  1. Python机器学习:评价分类结果008多分类问题中的混淆矩阵

    多分类问题中的混淆矩阵 #十分类问题 import matplotlib.pyplot as plt import numpy as np 数据 from sklearn import dataset ...

  2. 混淆矩阵评价指标_机器学习模型评价指标 -- 混淆矩阵

    机器学习模型评价指标 – 混淆矩阵 在机器学习领域中,混淆矩阵(confusion matrix)是一种评价分类模型好坏的形象化展示工具.其中,矩阵的每一列表示的是模型预测的样本情况:矩阵的每一行表示 ...

  3. 机器学习模型评价指标 -- 混淆矩阵

    机器学习模型评价指标 – 混淆矩阵 在机器学习领域中,混淆矩阵(confusion matrix)是一种评价分类模型好坏的形象化展示工具.其中,矩阵的每一列表示的是模型预测的样本情况:矩阵的每一行表示 ...

  4. 【机器学习】二分类问题中的混淆矩阵、准确率、召回率等 (Python代码实现)

    文章目录 混淆矩阵 召回率与准确率 准确度Accuracy sklearn代码示例 混淆矩阵 混淆矩阵(Confusion Matrix):将分类问题按照真实情况与判别情况两个维度进行归类的一个矩阵, ...

  5. 机器学习模型评估——混淆矩阵

    混淆矩阵 什么是混淆矩阵(Confusion Matrix)?我们在做分类问题时会用到机器学习分类模型,不管是二分类还是多分类问题,我们都要对模型的性能进行评估,看看模型的分类效果是否好,有多好!我们 ...

  6. 图像分割中的混淆矩阵和利用混淆矩阵计算指标

    目录 1. 介绍 2. 创建混淆矩阵 2.1 update 方法 2.2 compute 方法 2.3 str 方法 3. 测试 4. 完整代码 1. 介绍 语义分割中,性能指标可以利用混淆矩阵进行计 ...

  7. 机器学习知识总结系列-机器学习中的数学-矩阵(1-3-2)

    矩阵 SVD 矩阵的乘法 状态转移矩阵 状态转移矩阵 特征值和特征向量 对称阵 正交阵 正定阵 数据白化 矩阵求导 向量对向量求导 标量对向量求导 标量对矩阵求导 一.矩阵 1.1 SVD 奇异值分解 ...

  8. 机器学习中的数学——矩阵和向量相乘

    分类目录:<算法设计与分析>总目录 矩阵乘法是矩阵运算中最重要的操作之一.两个矩阵AAA和BBB的矩阵乘积是第三个矩阵CCC.为了使乘法定义良好,矩阵AAA的列数必须和矩阵BBB的行数相等 ...

  9. 机器学习(五)之评价指标:二分类指标、多分类指标、混淆矩阵、不确定性、ROC曲线、AUC、回归指标

    文章目录 0 本文简介 1 二分类指标 1.1 二分类时的错误类型 1.2 不平衡的数据 1.3 混淆矩阵 1.4 考虑不确定性 1.5 准确率-召回率曲线 1.6 ROC与AUC 2 多分类指标 3 ...

最新文章

  1. CSS粘住固定底部的5种方法
  2. 基于K-gram的winnowing特征提取剽窃查重检测技术(概念篇)
  3. 算法---------两个数的交集
  4. 绝地求生自定义服务器租一天多少钱,绝地求生自定义服务器怎么样?绝地求生自定义服务器使用攻略...
  5. python 需要多久能够学精通_python入门到精通需要学多久-史上最详细python学习路线-从入门到精通,只需5个月时间...
  6. python模拟网页点击_python怎么模拟点击网页按钮
  7. mllib逻辑回归 spark_《Spark大数据分析实战》笔记
  8. Windows系统appium移动端自动化真机环境搭建
  9. 【Oracle】解决问题:pl/sql developer 小钥匙图标下拉框中oracle连接串不加粗显示
  10. MySQL InnoDB中,乐观锁、悲观锁、共享锁、排它锁、行锁、表锁、死锁概念的理解
  11. lammps教程:delete_atoms 命令详解
  12. 计算机基础cpu知识,CPU基础知识大全详解
  13. html返回顶部开始隐藏,回到顶部并且监听顶部按钮显示或隐藏
  14. Cisco 路由器破解密码
  15. Python文本特征及分类
  16. MacBook键盘锁定、按键失效问题
  17. 360“隐私保护器”真相
  18. # 无法打开注册表项 UNKNOWN\Components\ #
  19. 推荐系统实践 0x11 NeuralCF
  20. Canvas——文字绘制

热门文章

  1. 中国python之父是谁-别了!Python之父!
  2. 华为机试之背包问题小结
  3. 为页面嵌入PDF文件—零基础自学网页制作
  4. 洛谷P1902 刺杀大使
  5. 计算机组成原理实验脱机运算器,实验三:脱机运算器实验报告.pdf
  6. GCD最大公约数算法
  7. Linux下并行计算库OpenMPI的配置和使用
  8. 使用matlab生成mif文件
  9. 洛谷P1049: 装箱问题
  10. uniapp 实现图片自动纵向轮播