• ML01 机器学习后利用混淆矩阵Confusion matrix 进行结果分析


     

    目标: 快速理解什么是混淆矩阵, 混淆矩阵是用来干嘛的。

      

    首先理解什么是confusion matrix

    看定义,在机器学习领域,混淆矩阵(confusion matrix),又称为可能性表格或是错误矩阵。它是一种特定的矩阵用来呈现算法性能的效果,通常是监督学习(非监督学习,通常用匹配矩阵:matching matrix)。

    大白话来讲,就是对机器学习算法的运行结果进行评价,效果如何,精确度怎么样而已。

    举个例子,在什么场景下需要这个confusion matrix

    假设有一个用来对猫(cats)、狗(dogs)、兔子(rabbits)进行机器学习分类,预测结果(Predicted class)如下图所示。

    而实际上共有 27 只动物:8只猫, 6条狗, 13只兔子,如(actual class)所示。


    从上表中能看出机器学习预测后的结果了吧, 

    Cat的正确率: 5/8,  3只猫误判成狗了。

    Dog的正确率: 3/6,  2只当成猫,一只误判成兔子。

    Rabbit 的正确率:11/13, 准确率还不错,只有2只误判成狗

    场景弄明白了,接下来,confusion matrix的介绍真正开始了。

    confusion matrix 的组成

    混淆矩阵是由false positivesfalsenegativestrue positivestrue negatives组成的两行两列的表格。它允许我们做出更多的分析,而不仅仅是局限在正确率。准确率对于分类器的性能分析来说,并不是一个很好地衡量指标,因为如果数据集不平衡(每一类的数据样本数量相差太大),很可能会出现误导性的结果。

    例如,如果在一个数据集中有95只猫,但是只有5条狗,那么某些分类器很可能偏向于将所有的样本预测成猫。整体准确率为95%,但是实际上该分类器对猫的识别率是100%,而对狗的识别率是0%

    对于上面的混淆矩阵,其对应的对猫这个类别的混淆表格如下:

    大白话有来了,其实这个矩阵就是告诉你一下信息:

    总共8只猫给你预测:

    5只猫都对了(true positive)              2只狗错当成了猫

    3只猫错当成狗了(false negative)   剩下的(27-5-2-3)=17 都对啦。

     

     如何使用confusion matrix

    直接利用Accord 提供的类进行统计。

    using Accord.Statistics.Analysis 
    
    // 机器学习的预测结构
     bool[] expected = Classes.Decide(table.GetColumn(2));
    
    // 实际结果
     bool[] output = svm.Decide(inputs);
    
     // Use confusion matrix to compute some performance metrics
    dgvPerformance.DataSource = new [] { new ConfusionMatrix(output, expected) };

    reference:https://en.wikipedia.org/wiki/Confusion_matrix

  • 相关阅读:
    JVM优化系列之一(-Xss调整Stack Space的大小)
    被kill问题之2:Docker环境下Java应用的JVM设置(容器中的JVM资源该如何被安全的限制)
    docker的坑
    docker容器内存占用 之 系统cache,docker下java的内存该如何配置--temp
    查看docker容器的内存占用
    使用Java监控工具出现 Can't attach to the process
    使用docker查看jvm状态,在docker中使用jmap,jstat
    在Docker中监控Java应用程序的5个方法
    HDU2552 三足鼎立 【数学推理】
    C++面向对象模型
  • 原文地址:https://www.cnblogs.com/zhixingheyi/p/8097782.html
Copyright © 2020-2023  润新知