混淆矩陣
混淆矩陣是一張成績單,把分類器的結果依「到底答對了什麼」、更重要的是「以何種方式答錯」加以拆解。它是一個方形網格:每個真實類別佔一列(或一欄),另一軸則對應每個預測類別。每個格子計算「真實類別為 i 的樣本,被模型預測為類別 j」的數量。對角線上是正確預測;對角線以外的一切都是錯誤,而其位置會告訴你錯誤的具體種類——不只是「模型錯了」,而是「它把『狼』混成了『哈士奇』」。
具體而言,對二元問題,這個 2×2 矩陣有四個格子:真正例(TP)、假正例(FP)、假負例(FN)與真負例(TN)。幾乎所有其他指標都是這些格子的比值:準確率 = (TP+TN)/總數,精確率 = TP/(TP+FP) 是沿著某「預測欄」往下讀,召回率 = TP/(TP+FN) 是沿著某「真實列」橫著讀。因此混淆矩陣是精確率、召回率、特異度與 F1 全部由此計算而出的原料——它比任何單一純量更基本,因為此時尚未折損任何資訊。
它真正的威力在於揭露被摘要數字所掩蓋、具系統性且有結構的錯誤。某模型整體準確率或許不差,卻把所有錯誤都倒進某一種混淆裡:數字 4 與 9、長相相似的路標、或兩種狗的品種。一個明亮的「非對角區塊」說的是「這兩個類別被搞混了」,這就指向了修法——更多資料、更好的特徵、合併標籤,或重新標註被標錯的真實標籤。分讀列與欄能區分兩種失敗模式:稀疏的一列代表某類別很少被找回(低召回率),密集的一欄代表某類別被過度預測(低精確率)。
類別很多時,原始計數最好以熱圖檢視,而且常做「列正規化」(每一列除以其總數),讓格子以比例顯示各類別召回率,使稀有類別能與常見類別相比。要小心:混淆矩陣是在某一個固定決策閾值下算出的,因此它是一張快照、而非全貌——改變閾值,格子就會移動。它也假設硬性預測,丟棄了模型的信心度,這正是它自然要與 ROC、PR 曲線等「掃描閾值」的工具搭配的原因。
慣例很重要:許多工具把真實類別放在列、預測放在欄,但有些函式庫(與許多論文)會把它轉置。在「沿欄往下讀精確率、沿列橫讀召回率」之前,先確認哪一軸是哪個——一個被轉置的矩陣會悄悄把兩種錯誤類型對調。