混淆矩阵

混淆矩阵

Deadly 提交于 2020-03-06 17:44:24
预测0 预测1 实际0 True negative False positive 实际1 False negative True positive 简单的说就是混淆矩阵有四个部分,这四个部分由预测结果和实际标签两个部分交叉出来的结果。 首先说按照老外的思维:对于结果有两个态度,一个是积极的(positive),一个是消极的(negative)。 所以预测为1的时候,被称为positive,被预测为消极的时候,被称为negative。 当实际值为1,但预测为消极的时候,这时的结论就是假消极,(False negative)。当实际值为0,预测值也为0的时候,这时的结论就是真消极(True nagative)。 当实际值为0,但预测为积极的时候,这时的结论就是假积极,(False positive)。 当实际值为1,预测值也为1的时候,这时的结论就是真积极(True positive) from sklearn.metrics import confusion_matrix y_true = [0,1,0,1,1,1,0,1,0,0] y_pred = [0,0,0,1,1,0,0,1,0,1] confusion_matrix(y_true, y_pred) return: array([[4, 1], [2, 3]], dtype=int64) cm = confusion

混淆矩阵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是给定分类任务的有效标签数。

使用python绘制混淆矩阵

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-14 04:48:28
使用python绘制混淆矩阵 # 可视化分类器性能 # load libraries import matplotlib . pyplot as plt import seaborn as sns from sklearn import datasets from sklearn . linear_model import LogisticRegression from sklearn . model_selection import train_test_split from sklearn . metrics import confusion_matrix import pandas as pd # load data 加载数据 iris = datasets . load_iris ( ) # create feature matrix features = iris . data # create target vector target = iris . target # create list of target class names class_names = iris . target_names # split into training and test sets # 创建 训练集 测试集 features_train , features_test ,

从混淆矩阵中计算每一类的分类精度,Recall或Sensitivity,Positive predictive value (PPV),speciall----python实现

五迷三道 提交于 2019-12-18 04:05:11
我们接下来使用sklearn.metrics 提供的混淆矩阵的计算 from sklearn.metrics import confusion_matrix #引用方式 y_true = [2, 0, 2, 2, 0, 1] y_pred = [0, 0, 2, 2, 0, 2] confusion_matrix(y_true, y_pred)#官方提供的示例代码 然后就得到了多类别的混淆矩阵,其实多类别和二类别的混淆矩阵只是在计算一些变量的时候复杂 实现代码如下,分别计算 Recall或Sensitivity,Positive predictive value (PPV),speciall,其实这个是改变自https://blog.csdn.net/u012193416/article/details/79454351,但是他错了,导致我前几次都算错了,所以我才写了这一篇更正一下,我也提醒了这位博主。 confusion = confusion_matrix(y_true, y_pred) print(confusion) list_diag = np.diag(confusion) print('list_diag=', list_diag) list_raw_sum = np.sum(confusion, axis=1) print('list_raw_sum=', list

论文笔记(一)SecureML: A System for Scalable Privacy-Preserving Machine Learning

风格不统一 提交于 2019-12-08 20:57:38
SecureML:A system for Scalable Privacy-Preserving Machine Learning 1 摘要及介绍 1.1 模型的大致架构 首先,主要模型中主要有客户端和两台服务器,假设这两台服务器不会恶意合作。   整个训练过程大致分为在线和离线两个阶段,在线阶段的主要任务就是利用本文提出的安全算数技术在共享的十进制数上进行模型的更新,根据混淆电路的思想,除了最后能得到的模型,什么数据也不会暴露出来;离线阶段的主要任务是服务于在线阶段的乘法运算——利用线性同态加密或者不经意传输生成必要的三元组,因为这个开销比较大,后期还提出了一种改进,用客户端来辅助生成三元组; 1.2 主要贡献 为线性回归、逻辑回归、神经网络这三种机器学习算法开发出了新型的隐私保护的深度学习协议 开发出了支持在共享的十进制数上的安全算数操作的技术 对于那些非线性激活函数,如sigmoid softmax,提出了一种支持安全多方计算的替代方案 以上提出的所有技术相较于目前的技术,在保证安全的前提下,速度上都有很大的提升 1.2.1 为三种机器学习算法开发出的隐私保护的协议 线性回归、逻辑回归和神经网络这三种机器学习方案非常简单但也非常常用,而且他们之间思想类似且一种递进的趋势。 所谓思想类似指的是他们都是有监督的机器学习算法,思路都是先前馈,算出交叉熵之后,在利用随机梯度下降

Python中生成并绘制混淆矩阵(confusion matrix)

时光怂恿深爱的人放手 提交于 2019-12-07 22:21:46
在机器学习中经常会用到混淆矩阵(confusion matrix),不了解的同学请参考这篇博文: ML01 机器学习后利用混淆矩阵Confusion matrix 进行结果分析 本文参考: 使用python绘制混淆矩阵(confusion_matrix) 首先import一些必要的库: from sklearn.metrics import confusion_matrix # 生成混淆矩阵函数 import matplotlib.pyplot as plt # 绘图库 import numpy as np import tensorflow as tf 然后定义绘制混淆矩阵函数: def plot_confusion_matrix(cm, labels_name, title): cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis] # 归一化 plt.imshow(cm, interpolation='nearest') # 在特定的窗口上显示图像 plt.title(title) # 图像标题 plt.colorbar() num_local = np.array(range(len(labels_name))) plt.xticks(num_local, labels_name, rotation=90) #

机器学习之混淆矩阵

萝らか妹 提交于 2019-12-04 14:01:32
再分类任务下,预测结果和真实情况之间存在四种不同的组合,这四种组合构成了混淆矩阵。 举个例子,看下图。当真实情况是猫,预测结果也是猫的时候,这个时候定义为真正例;当真实情况是猫,而预测结果不是猫的时候定义为伪反例子; 当真实情况不是猫,而预测结果是猫时定义为伪正例;当真实情况不是猫预测结果也不是猫时定义为真反例。这个矩阵就叫做混淆矩阵。 再来看与之相关的两个评估标准:精确率与召回率。 精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP),也就是 而召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)。也就是: 来源: https://www.cnblogs.com/GouQ/p/11869427.html

分类与预测算法的评价

左心房为你撑大大i 提交于 2019-12-03 13:37:43
分类与预测的任务是在数据挖掘中经常完成的任务,那么这带来的一个问题是我们如何对一个分类与预测的模型进行评价那? 评价有很多的方式,你比如说:均方误差法,这应该是误差分析的综合指标的方式之一,这在神经网络是经常用到的. 这里我们主要关注分类或者预测的结果与实际值之间的差距,有一个很重要的模型,是经常用到关于其分类的评价的,即 ROC曲线 . ROC曲线在我以前的博客中已经有实现的具体代码,这里要详细展开详细分析. ROC的模型的构建的基础是 混淆矩阵 .从混淆矩阵中,混淆矩阵是模式识别领域中一种常用的表达形式,它描绘了样本数据的真实属性与识别结果之间类型的关系。(如果评价结果合理,其对角线上的值总是非常大的)* ROC曲线的横轴与纵轴就是基于混淆矩阵而产生。纵轴称为“真正例率(TPR)”,横轴称为“假正例率(FPR)” 对应的混淆矩阵如下; 其对应的定义为: 其绘制的评价的ROC曲线为: 上面的大多数东西在网上都能够找到,那么我们怎么样评价模型的好坏那? 即引出AUC的概念,它的意思是曲线与横轴围成的面积,直观一点说就是,如果曲线越靠近我们的y轴,那么其模型的评价就是越好的.,因为越靠近y轴,其面积也就越大..(具体计算可以积分) 这带来的一个启发就是,我们针对一个分类与预测问题,可以分别用不同的算法是对其实现(比如可以用决策树与神经网络分别对其实现),分别构造这两者的 混淆矩阵

混淆矩阵 (Confusion Matrix)

匿名 (未验证) 提交于 2019-12-03 00:37:01
混淆矩阵是除了ROC曲线和AUC之外的另一个判断分类好坏程度的方法。 以下有几个概念需要先说明: TP(True Positive): 真实为0,预测也为0 FN(False Negative): 真实为0,预测为1 FP(False Positive): 真实为1,预测为0 TN(True Negative): 真实为1,预测也为1 :分类模型总体判断的准确率(包括了所有class的总体准确率) : 预测为0的准确率 : 真实为0的准确率 : 真实为1的准确率 : 预测为1的准确率 : 另外一个综合Precision和Recall的标准,F1-Score的变形 举个经典的二分类例子: 如果是多分类的呢?举一个三分类的例子: 因此我们知道,计算Specificity,Recall,Precision等只是计算某一分类的特性,而Accuracy和F1-Score这些是判断分类模型总体的标准。我们可以根据实际需要,得出不同的效果。 文章来源: 混淆矩阵 (Confusion Matrix)

python画混淆矩阵

匿名 (未验证) 提交于 2019-12-02 22:51:30
混淆矩阵M的每一行代表每个真实类(GT),每一列表示预测的类。即:Mij表示GroundTruth类别为i的所有数据中被预测为类别j的数目。 这里采用画图像的办法,绘制混淆矩阵的表示图。颜色越深,值越大。 # -*- coding: utf-8 -*- # By Changxu Cheng, HUST from __future__ import division import numpy as np from skimage import io, color from PIL import Image, ImageDraw, ImageFont import os def drawCM(matrix, savname): # Display different color for different elements lines, cols = matrix.shape sumline = matrix.sum(axis=1).reshape(lines, 1) ratiomat = matrix / sumline toplot0 = 1 - ratiomat toplot = toplot0.repeat(50).reshape(lines, -1).repeat(50, axis=0) io.imsave(savname, color.gray2rgb(toplot)) #