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