目标: 快速理解什么是混淆矩阵, 混淆矩阵是用来干嘛的。
首先理解什么是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(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