混淆矩阵_混淆矩阵python - CSDN
混淆矩阵 订阅
混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。具体评价指标有总体精度、制图精度、用户精度等,这些精度指标从不同的侧面反映了图像分类的精度。 [1]  在人工智能中,混淆矩阵(confusion matrix)是可视化工具,特别用于监督学习,在无监督学习一般叫做匹配矩阵。在图像精度评价中,主要用于比较分类结果和实际测得值,可以把分类结果的精度显示在一个混淆矩阵里面。混淆矩阵是通过将每个实测像元的位置和分类与分类图像中的相应位置和分类相比较计算的。 展开全文
混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。具体评价指标有总体精度、制图精度、用户精度等,这些精度指标从不同的侧面反映了图像分类的精度。 [1]  在人工智能中,混淆矩阵(confusion matrix)是可视化工具,特别用于监督学习,在无监督学习一般叫做匹配矩阵。在图像精度评价中,主要用于比较分类结果和实际测得值,可以把分类结果的精度显示在一个混淆矩阵里面。混淆矩阵是通过将每个实测像元的位置和分类与分类图像中的相应位置和分类相比较计算的。
信息
外文名
Confusion Matrix
用    于
监督学习
中文名
混淆矩阵
性    质
可视化工具
混淆矩阵简介
混淆矩阵(Confusion Matrix):混淆矩阵的每一列代表了预测类别,每一列的总数表示预测为该类别的数据的数目;每一行代表了数据的真实归属类别,每一行的数据总数表示该类别的数据实例的数目。每一列中的数值表示真实数据被预测为该类的数目:如下图,第一行第一列中的43表示有43个实际归属第一类的实例被预测为第一类,同理,第一行第二列的2表示有2个实际归属为第一类的实例被错误预测为第二类。
收起全文
精华内容
参与话题
  • 简单理解混淆矩阵

    万次阅读 2015-02-25 17:35:14
    混淆矩阵(confusion matrix)刻画一个分类器的分类准确程度。“混淆”一词也形象地表达了分类器面对多个分类时可能造成的混淆。     实际值     样本总数 N Positive Negative 预测值 ...
    混淆矩阵(confusion matrix)刻画一个分类器的分类准确程度。“混淆”一词也形象地表达了分类器面对多个分类时可能造成的混淆。

    二元分类的混淆矩阵形式如下:
        实际值  
      样本总数 N Positive Negative
    预测值 Positive
    实际是Positive,预测成Positive的样本数,又叫true positive (TP)
    实际是Negative,预测成Positive的样本数,又叫false positive(FP)
      Negative 实际是Positive,预测成Negative的样本数,又叫false negative(FN) 实际是Negative,预测成Negative的样本数,又叫true negative(TN)
        实际Positive样本数=TP+FN 实际Negative样本数=FP+TN

    其中,实际值也称为target, reference, actural。相应地,预测值被称为model, prediction, predicted。
    此处二元分类标识为Positive和Negative,有时也标识为Normal/Abnormal, Accept/Reject或更简单的Yes/No。

    下面是一个二元分类混淆矩阵的实例。一共有30张动物图片,其中13只猫,17只狗,一个二元分类器识别结果如下表。这就是一个简单的混淆矩阵。
        实际  
        Cat Dog
    预测结果 Cat 10 2
      Dog 3 15

    有了TP,FP,FN,TN后,可以构造出很多指标,从不同角度反映分类器的分类准确程度,常用的有,

    1)正确率(Accuracy):正确分类数/样本总数,描述了分类器总体分类准确程度。
    accuracy = (TP+TN)/N, N=TP+FP+FN+TN
    上例中,accuracy = (10+15)/30 = 0.83
    2) 真阳性率(True Positive Rate): 如果一个实例类别是positive,分类器预测结果的类别也是positive的比例。这个指标也叫敏感度(sensitivity)或召回率(recall),描述了分类器对positive类别的敏感程度。
    TPR = TP/(TP+FN)
    上例中,TPR = 10 /(10+3)=0.70
    3) 假阳性率(False Positive Rate):如果一个实例类别是negative,分类器预测结果的类别是positive的比例。这个指标也叫错检率(fallout)。
    FPR = FP/(FP+TN)
    上例中,FPR = 2/(2+15)=0.12

    混淆矩阵的缺点:
    一些positive事件发生概率极小的不平衡数据集(imbalanced data),混淆矩阵可能效果不好。比如对信用卡交易是否异常做分类的情形,很可能1万笔交易中只有1笔交易是异常的。一个将所有交易都判定为正常的分类器,准确率是99.99%。这个数字虽然很高,但是没有任何现实意义。

    参考文章:
    展开全文
  • 混淆矩阵是ROC曲线绘制的基础,同时它也是衡量分类型模型准确度中最基本,最直观,计算最简单的方法。 一句话解释版本: 混淆矩阵就是分别统计分类模型归错类,归对类的观测值个数,然后把结果放在一个表里展示...

    简介

    混淆矩阵是ROC曲线绘制的基础,同时它也是衡量分类型模型准确度中最基本,最直观,计算最简单的方法。

    一句话解释版本:

    混淆矩阵就是分别统计分类模型归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。这个表就是混淆矩阵。

     

     

    数据分析与挖掘体系位置

    混淆矩阵是评判模型结果的指标,属于模型评估的一部分。此外,混淆矩阵多用于判断分类器(Classifier)的优劣,适用于分类型的数据模型,如分类树(Classification Tree)、逻辑回归(Logistic Regression)、线性判别分析(Linear Discriminant Analysis)等方法。

    在分类型模型评判的指标中,常见的方法有如下三种:

    1. 混淆矩阵(也称误差矩阵,Confusion Matrix)
    2. ROC曲线
    3. AUC面积

    本篇主要介绍第一种方法,即混淆矩阵,也称误差矩阵。

    此方法在整个数据分析与挖掘体系中的位置如下图所示。

     

    混淆矩阵的定义

    混淆矩阵(Confusion Matrix),它的本质远没有它的名字听上去那么拉风。矩阵,可以理解为就是一张表格,混淆矩阵其实就是一张表格而已。

    以分类模型中最简单的二分类为例,对于这种问题,我们的模型最终需要判断样本的结果是0还是1,或者说是positive还是negative。

    我们通过样本的采集,能够直接知道真实情况下,哪些数据结果是positive,哪些结果是negative。同时,我们通过用样本数据跑出分类型模型的结果,也可以知道模型认为这些数据哪些是positive,哪些是negative。

    因此,我们就能得到这样四个基础指标,我称他们是一级指标(最底层的):

    • 真实值是positive,模型认为是positive的数量(True Positive=TP)
    • 真实值是positive,模型认为是negative的数量(False Negative=FN):这就是统计学上的第二类错误(Type II Error)
    • 真实值是negative,模型认为是positive的数量(False Positive=FP):这就是统计学上的第一类错误(Type I Error)
    • 真实值是negative,模型认为是negative的数量(True Negative=TN)

    将这四个指标一起呈现在表格中,就能得到如下这样一个矩阵,我们称它为混淆矩阵(Confusion Matrix):

    混淆矩阵的指标

    预测性分类模型,肯定是希望越准越好。那么,对应到混淆矩阵中,那肯定是希望TP与TN的数量大,而FP与FN的数量小。所以当我们得到了模型的混淆矩阵后,就需要去看有多少观测值在第二、四象限对应的位置,这里的数值越多越好;反之,在第一、三象限对应位置出现的观测值肯定是越少越好。

    二级指标

    但是,混淆矩阵里面统计的是个数,有时候面对大量的数据,光凭算个数,很难衡量模型的优劣。因此混淆矩阵在基本的统计结果上又延伸了如下4个指标,我称他们是二级指标(通过最底层指标加减乘除得到的):

    • 准确率(Accuracy)—— 针对整个模型
    • 精确率(Precision)
    • 灵敏度(Sensitivity):就是召回率(Recall)
    • 特异度(Specificity)

    我用表格的方式将这四种指标的定义、计算、理解进行了汇总:

    通过上面的四个二级指标,可以将混淆矩阵中数量的结果转化为0-1之间的比率。便于进行标准化的衡量。

    在这四个指标的基础上在进行拓展,会产令另外一个三级指标

     

    三级指标

    这个指标叫做F1 Score。他的计算公式是:

     

    其中,P代表Precision,R代表Recall。

    F1-Score指标综合了Precision与Recall的产出的结果。F1-Score的取值范围从0到1的,1代表模型的输出最好,0代表模型的输出结果最差。

     

     

    混淆矩阵的实例

    当分类问题是二分问题是,混淆矩阵可以用上面的方法计算。当分类的结果多于两种的时候,混淆矩阵同时适用。

    一下面的混淆矩阵为例,我们的模型目的是为了预测样本是什么动物,这是我们的结果:

    通过混淆矩阵,我们可以得到如下结论:

    Accuracy

    在总共66个动物中,我们一共预测对了10 + 15 + 20=45个样本,所以准确率(Accuracy)=45/66 = 68.2%。

    以猫为例,我们可以将上面的图合并为二分问题:

    Precision

    所以,以猫为例,模型的结果告诉我们,66只动物里有13只是猫,但是其实这13只猫只有10只预测对了。模型认为是猫的13只动物里,有1条狗,两只猪。所以,Precision(猫)= 10/13 = 76.9%

    Recall

    以猫为例,在总共18只真猫中,我们的模型认为里面只有10只是猫,剩下的3只是狗,5只都是猪。这5只八成是橘猫,能理解。所以,Recall(猫)= 10/18 = 55.6%

    Specificity

    以猫为例,在总共48只不是猫的动物中,模型认为有45只不是猫。所以,Specificity(猫)= 45/48 = 93.8%。

    虽然在45只动物里,模型依然认为错判了6只狗与4只猫,但是从猫的角度而言,模型的判断是没有错的。

    (这里是参见了Wikipedia,Confusion Matrix的解释,https://en.wikipedia.org/wiki/Confusion_matrix)

    F1-Score

    通过公式,可以计算出,对猫而言,F1-Score=(2 * 0.769 *  0.556)/( 0.769 +  0.556) = 64.54%

    同样,我们也可以分别计算猪与狗各自的二级指标与三级指标值。

     

     

    ROC曲线在R中的实现

    library(ISLR)
    
    cor(Smarket[,-9])
    attach(Smarket)
    
    # logistic Model
    model_LR <- glm(Direction ~ Lag1 + Lag2 + Lag3 + Lag4 + Lag5 + Volume,
                    family = binomial,
                    data = Smarket)
    
    # Make prediction 
    prob_LR <- predict(model_LR, type = 'response', newdata = Smarket[1:300,])
    prob_LR <- predict(model_LR, type = 'response', newdata = Smarket[,])
    
    
    # create a vector of class predictions based on wether the predicted probability of a market increase is greater than or less than 0.5
    pred_LR <- rep("Down" , 1250)          
    pred_LR[prob_LR > 0.5] = 'Up'        
    
    # Confusion Matrix
    table(pred_LR, Direction)
    

     

    展开全文
  • 文章目录一瞥图形介绍重要概念混淆矩阵延伸出的各个评价指标关键术语 图形介绍 同样的道理,这里我们采用recall来计算模型的好坏,也就是说那些异常的样本我们的检测到了多少,这也是咱们最初的目的!这里通常用混淆...

    图形介绍

    同样的道理,这里我们采用recall来计算模型的好坏,也就是说那些异常的样本我们的检测到了多少,这也是咱们最初的目的!这里通常用混淆矩阵来展示。
    在这里插入图片描述

    混淆矩阵(confusion matrix)衡量的是一个分类器分类的准确程度。理解其概念本身容易理解,但一些特定术语易被混淆。
    混淆矩阵适用于包含多个分类器的问题,本文为了让读者理解更加容易,以二元分类的混淆矩阵为例进行讲解。
    观察混淆矩阵,可得如下结论:

    1. 示例是一个二元分类问题,产生两种可能的分类:“是”或者“不是”。当预测一个事件是否发生时,“是”意味着该事件已经发生,而“否”则相反,该事件没有发生。

    2. 该模型对这个事件进行了100次预测。

    3. 在这100次预测结果中,“是”有45次,“否”有55次。但实际上该事件发生了40次。

    重要概念

    1. 真阳性(True Positive,TP):样本的真实类别是正例,并且模型预测的结果也是正例

    2. 真阴性(True Negative,TN):样本的真实类别是负例,并且模型将其预测成为负例

    3. 假阳性(False Positive,FP):样本的真实类别是负例,但是模型将其预测成为正例

    4. 假阴性(False Negative,FN):样本的真实类别是正例,但是模型将其预测成为负例

    混淆矩阵延伸出的各个评价指标

    1. 正确率(Accuracy):被正确分类的样本比例或数量

    (TP+TN)/Total = (35+50)/100 = 85%

    1. 错误率(Misclassification/Error Rate):被错误分类的样本比例或数量

    (FP+FN)/Total = (5+10)/100 = 15%

    1. 真阳率(True Positive Rate):分类器预测为正例的样本占实际正例样本数量的比例,也叫敏感度(sensitivity)或召回率(recall),描述了分类器对正例类别的敏感程度。

    TP/ actual yes = 35/40 = 87%

    1. 假阳率(False Positive Rate):分类器预测为正例的样本占实际负例样本数量的比例。

    FP/actual no = 10/60 = 17%

    1. 特异性(Specificity):实例是负例,分类器预测结果的类别也是负例的比例。

    TN/actual no = 50/60 = 83%

    1. 精度(Precision):在所有判别为正例的结果中,真正正例所占的比例。

    TP/predicted yes = 35/45 = 77%

    1. 流行程度(Prevalence):正例在样本中所占比例。

    Actual Yes/Total = 40/100 = 40%

    关键术语

    1. 阳性预测值: 其术语概念与精度非常类似,只是在计算阳性预测值考虑了流行程度。在流行程度为50%的时候,阳性预测值(PPV)与精度相同。

    2. 空错误率: 当模型总是预测比例较高的类别,其预测错误的实例所占百分比。在上述示例中,空错误率为60/100 = 60%,因为如果分类器总是预测“是”,那么对于60个为“否”的事件则可能进行错误预测。该指标可用于分类器间的性能比较。然而,对于某些特定的应用程序来说,其最佳分类器的错误率有时会比空错误率更高。

    3. F值:F 值即为正确率和召回率的调和平均值。

    4. Roc曲线:即接收者操作特征曲线(receiver operating characteristic curve),反映了真阳性率(灵敏度)和假阳性率(1-特异度)之间的变化关系。Roc曲线越趋近于左上角,预测结果越准确。

    展开全文
  • 混淆矩阵及绘图

    万次阅读 热门讨论 2018-09-03 23:43:26
    混淆矩阵 概念  当说到召回率的时候就说到了混淆矩阵。  再回顾一下召回率吧,案例中有100个正例,猜中(预测对)了59个,我们就说召回率为59%。  召回率就是猜中率。  当时也讲到,正例和反例,加上猜中和猜...

    混淆矩阵

    概念

        当说到召回率的时候就说到了混淆矩阵。

        再回顾一下召回率吧,案例中有100个正例,猜中(预测对)了59个,我们就说召回率为59%。

        召回率就是猜中率。

        当时也讲到,正例和反例,加上猜中和猜错,总共有四种情况

      猜中true 猜错false
    正例positive TP FP
    反例negative TN FT

        所谓召回率,仅仅是其中的四分之一。在条件允许(资本充足)的情况下,我们关心的,也是实际有用的,的确是召回率。

        但是实际条件并不允许我们这么单一,现实对我们的要求不仅是增加猜中的概率,也需要降低猜错的概率。

        同时,关键的一个隐蔽点,在于数量的限制,50个男生,50个女生,我猜全部是男生,就会发现这种奇葩情况:

        召回率100%,但是其他分布惨不忍睹。

        隐藏的,就是可以猜的个数。

        当然,我们可以把猜的个数做一个限制,但是这只是在已知的情境下才有具体的作用,位置的情况下,谁也说不准100个人中到底有多少个男生,多少个女生,可取的范围的确是[0,100]。

        综上所述,对于一个模型的评估,所谓的召回率只能是在其他情况下都"不太差"的情况下才有对比的意义,或者说是只在乎"召回率",也就是错杀一千也不放过一个,不在乎浪费和消耗的情况下才有追逐的价值。

        普遍的情况,追求的当然是全面,用最少的资源做最多的事情。也就是说,我们需要对样本的分布和预测的分布进行综合的考量,从各方面对模型进行评估和约束,才能够达到预期的目标。

        而上面的2*2的分布表格,就是我们所谓的混淆矩阵。

        当样本分布为3类的时候,猜测也为3类

      0 1 2
    0 0-0 0-1 0-2
    1 1-0 1-1 1-2
    2 2-0 2-1 2-2

        其他先不管,至少我们可以先得出一个结论:

              混淆矩阵始终是方阵。

        把对错继续划分,样本除了猜对和猜错,具体可以划分为猜对,猜成?类,数据中类越多,这种也就更加具体规范。

        混淆矩阵的意义在于弥补错(and)误,我们也要明晰这个误区:不是成功率提高了错误率就会降低。

        或许更具体的说起,就是我们的"成功"也是有水分的,TP是成功,TN是FP水分,TN是错漏,FT是有效排除。

        真实的结果不仅在于找到对的,还在于排除错的。单方面的前进,或许会覆盖正确,但是也会错过正确,偏离正确。

        只有两头逼近,才能够真正的定位正确,或锁定在一个较小的区间范围内(夹逼定则)。

    函数

        首先看一下召回率

    from sklearn.metrics import confusion_matrix
    from sklearn.metrics import recall_score
    
    guess = [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
    fact = [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
    a = recall_score(guess, fact)
    print(a)
    '''
    0.0
    '''

        这个会自动计算,主要的过程就是"对号入座"

    1. 数据对
    2. 位置对

    首先,它会把实际结果和预测结果组成数据对,才到后来的判断阶段。

    判断的时候,只考虑对错,按照如下的表进行计算。

      0 1
    0 0-0(true) 0-1(fase)
    1 1-0(false) 1-1(true)

    全部的数组合成一个个数据对,然后按照这种分布情况表进行统计,正对角线上的都是预测正确的,这就加一,最后正确数的除以总数就得出来了所谓的召回率。

     

    然后是混淆矩阵

    from sklearn.metrics import confusion_matrix
    from sklearn.metrics import recall_score
    
    guess = [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
    fact = [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
    a = confusion_matrix(guess, fact)
    print(a)
    '''
    [[0 5]
     [5 0]]
    '''

    图表表示一下

      0 1
    0 0-0(true)(0) 0-1(false)(5)
    1 1-0(false)(5) 1-1(true)(0)

    恩...说了半天都觉得混淆矩阵比召回率高级多了,事实打脸了,的确是有了混淆矩阵(混淆统计)才计算召回率的。

    即使是召回率感觉高级一些,但是混淆矩阵更详细,这才是避免更大失误的关注点。

    尤其是多种分类的情况下

    from sklearn.metrics import confusion_matrix
    from sklearn.metrics import recall_score
    
    guess = [1, 0, 1, 2, 1, 0, 1, 0, 1, 0]
    fact = [0, 1, 0, 1, 2, 1, 0, 1, 0, 1]
    a = confusion_matrix(guess, fact)
    print(a)
    '''
    [[0 4 0]
     [4 0 1]
     [0 1 0]]
    '''

    绘图

    混淆矩阵重要吧,不过谁知道啊,谁关心啊,数据人家感触不到,也不一定深刻理解,怎么办,画图呗。

    from sklearn.metrics import confusion_matrix
    from sklearn.metrics import recall_score
    import matplotlib.pyplot as plt
    
    guess = [1, 0, 1]
    fact = [0, 1, 0]
    classes = list(set(fact))
    classes.sort()
    confusion = confusion_matrix(guess, fact)
    plt.imshow(confusion, cmap=plt.cm.Blues)
    indices = range(len(confusion))
    plt.xticks(indices, classes)
    plt.yticks(indices, classes)
    plt.colorbar()
    plt.xlabel('guess')
    plt.ylabel('fact')
    for first_index in range(len(confusion)):
        for second_index in range(len(confusion[first_index])):
            plt.text(first_index, second_index, confusion[first_index][second_index])
    
    plt.show()
    

    复杂一点

    from sklearn.metrics import confusion_matrix
    from sklearn.metrics import recall_score
    import matplotlib.pyplot as plt
    
    guess = [1, 0, 1, 2, 1, 0, 1, 0, 1, 0]
    fact = [0, 1, 0, 1, 2, 1, 0, 1, 0, 1]
    classes = list(set(fact))
    classes.sort()
    confusion = confusion_matrix(guess, fact)
    plt.imshow(confusion, cmap=plt.cm.Blues)
    indices = range(len(confusion))
    plt.xticks(indices, classes)
    plt.yticks(indices, classes)
    plt.colorbar()
    plt.xlabel('guess')
    plt.ylabel('fact')
    for first_index in range(len(confusion)):
        for second_index in range(len(confusion[first_index])):
            plt.text(first_index, second_index, confusion[first_index][second_index])
    
    plt.show()
    

    来,讲解一波

    from sklearn.metrics import confusion_matrix
    from sklearn.metrics import recall_score
    import matplotlib.pyplot as plt
    
    
    # 预测数据,predict之后的预测结果集
    guess = [1, 0, 1, 2, 1, 0, 1, 0, 1, 0]
    # 真实结果集
    fact = [0, 1, 0, 1, 2, 1, 0, 1, 0, 1]
    # 类别
    classes = list(set(fact))
    # 排序,准确对上分类结果
    classes.sort()
    # 对比,得到混淆矩阵
    confusion = confusion_matrix(guess, fact)
    # 热度图,后面是指定的颜色块,gray也可以,gray_x反色也可以
    plt.imshow(confusion, cmap=plt.cm.Blues)
    # 这个东西就要注意了
    # ticks 这个是坐标轴上的坐标点
    # label 这个是坐标轴的注释说明
    indices = range(len(confusion))
    # 坐标位置放入
    # 第一个是迭代对象,表示坐标的顺序
    # 第二个是坐标显示的数值的数组,第一个表示的其实就是坐标显示数字数组的index,但是记住必须是迭代对象
    plt.xticks(indices, classes)
    plt.yticks(indices, classes)
    # 热度显示仪?就是旁边的那个验孕棒啦
    plt.colorbar()
    # 就是坐标轴含义说明了
    plt.xlabel('guess')
    plt.ylabel('fact')
    # 显示数据,直观些
    for first_index in range(len(confusion)):
        for second_index in range(len(confusion[first_index])):
            plt.text(first_index, second_index, confusion[first_index][second_index])
    
    # 显示
    plt.show()
    
    # PS:注意坐标轴上的显示,就是classes
    # 如果数据正确的,对应关系显示错了就功亏一篑了
    # 一个错误发生,想要说服别人就更难了
    

     

    展开全文
  • 混淆矩阵是数据科学、数据分析和机器学习中总结分类模型预测结果的情形分析表,以矩阵形式将数据集中的记录按照真实的类别与分类模型作出的分类判断两个标准进行汇总。 我的机器学习教程「美团」算法工程师带你...
  • 混淆矩阵

    2019-01-22 14:02:53
    混淆矩阵(Confusion matrix) 混淆矩阵是判断分类好坏程度的一种方法。 另外还有ROC曲线和AUC曲线 1.概念 1)TN(True Negative):负类预测为正类(0-&amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;...
  • 混淆矩阵(Confusion Matrix)分析

    万次阅读 多人点赞 2015-04-07 22:46:35
    在机器学习领域,混淆矩阵(confusion matrix),又称为可能性表格或是错误矩阵。它是一种特定的矩阵用来呈现算法性能的可视化效果,通常是监督学习(非监督学习,通常用匹配矩阵:matching matrix)。其每一列代表...
  • 使用python绘制混淆矩阵(confusion_matrix)

    万次阅读 多人点赞 2019-07-16 17:24:35
    涉及到分类问题,我们经常需要通过可视化混淆矩阵来分析实验结果进而得出调参思路,本文介绍如何利用python绘制混淆矩阵(confusion_matrix),本文只提供代码,给出必要注释。 Code # -*-coding:utf-8-*- from ...
1 2 3 4 5 ... 20
收藏数 22,073
精华内容 8,829
关键字:

混淆矩阵