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

  

首先理解什么是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 positives,falsenegatives,true positives和true 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()); // 实际结果
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

最新文章

  1. October 19th Week 43rd Wednesday, 2016
  2. angularJS获取json数据(实战)
  3. hdu4939 Stupid Tower Defense (DP)
  4. [轉載]史上最强php生成pdf文件,html转pdf文件方法
  5. Android 使用日常
  6. H.264格式,iOS硬编解码 以及 iOS 11对HEVC硬编解码的支持
  7. HDU 1064(求平均数 **)
  8. Python自带IDE设置字体
  9. C++类有继承时,析构函数必须为虚函数
  10. 微信小程序制作家庭记账本之五
  11. C# dynamic类型报错:“object”不包含“xxx”的定义
  12. SVN jsvnadmin 安装与基本使用
  13. [svc]kill pkill killall管理进程
  14. React学习笔记(六)事件处理
  15. CentOS6.9下安装MariaDB10.2.11
  16. Kafka笔记整理(三):消费形式验证与性能测试
  17. python-pycharm控制台输出带颜色
  18. wdlinux中apache配置反向代理模块
  19. webUploader 的使用
  20. SharePoint 2013 - Client OM

热门文章

  1. Python 3.X 调用多线程C模块,并在C模块中回调python函数的示例
  2. Tornado异步
  3. python之socket模块
  4. Python之matplotlib学习(三)
  5. 我们是80后 golang入坑系统
  6. 一、Hadoop学习笔记————概述
  7. ASP.NET Core 一步步搭建个人网站(持续更新中~~~)
  8. 对java多线程里Synchronized的思考
  9. MySql的技术规范-企业版(来源于MySql官网)
  10. 洛谷教主花园dp