國立臺灣大學

#分享 聊聊機器學習模型的評估方法 - 混淆矩陣(Confusion Matrix)

6月4日 18:41
◆如何評估機器學習模型的好壞? 當我們辛辛苦苦訓練好一個機器學習模型時,我們要怎麼評估訓練的模型到底好不好?也就是訓練的成效(Performance) 。 要量化這些成效我們必須先了解到有哪些靠譜驗證指標可以用來進行評估(Performance indexes) 。 依照問題種類一般會有「分類指標」和「回歸指標」,顧名思義,分類指標是用來評估分類問題的成效,回歸指標是用來評估回歸問題的成效。而我們討論的混淆矩陣就是一種分類指標,本篇先從二元分類的混淆矩陣開始介紹起。 ◆關於混淆矩陣 混淆矩陣是除了ROC曲線和AUC之外的另一個判斷好壞程度的方法,通常用於二元分類。二元分類基本上就是「真」| 「假」或是YES | NO , 而這兩種狀況又分成「真實結果」的YES | NO 以及 「預測結果」的 YES | NO, 我們將這些情況使用一個二維矩陣來圖解:
1.Positive 或 Negative 比較直覺,就是以預測結果來做判斷,若預測為 Yes 則顯示 Postive,反之則為 Negative。 2.True 或 False 指的就是預測的結果與事實是否相符,若預測為 Yes 且事實為 Yes,或者預測為No且事實為No,表示模型判斷是正確的,所以我們會稱他為 True,反之為 False。 3.結論: 圖表中的 TP、TN 代表模型判斷正確,而 FP、FN 代表模型判斷錯誤(Error),其中 FP 又稱為 Type Ⅰ Error,FN 又稱 Type Ⅱ Error.;為了方便記憶,當我們看到是T開頭(TP,TN)的結果就是判斷正確,而F開頭(FP,FN) 則是判斷錯誤。 ◆透過混淆矩陣熟悉各指標(accuracy / percesion / recall / F1 score) 為了針對不同情形作評估,各式各樣的指標就從混淆矩陣中應運而生,接下來我們將一一介紹。 1.Accuracy Accuracy的計算方式就是將預測正確的情況除以所有情況的個數,其中預測正確的情況有包含 True Positive 和 True Negative。他是一個常見的指標,但也存在著某些缺點。以信用卡資料為例,通常真正是盜刷的筆數是相當少的,若今天我們想要設計一個偵測盜刷的模型,只要稍微設計一下就能讓 Accuracy 達到 99% 以上,也就是全部預測沒有盜刷就好了。因此我們顯然需要別的指標來應對這種狀況。 2.Precision & Recall Precision 和 Recall 兩個指標關注的都是 True Positive(分子),但是會從不同的角度切入。Precision看的是在從所有預測為真的樣本中,模型預測正確的的機率?而Recall則是看在所有為真的樣本中,模型預測正確的機率。 舉個例子: (1)門禁系統如果放行了閒雜人(FP, 偽陽性)進來很可能會造成財產或安全的威脅,所以門禁系統需要從嚴認定,盡量降低False Postive (FP, 偽陽性)的數量,此時我們會希望門禁系統的 Precision 高一點。 (2)如果案例換成重大疾病偵測,如果模型沒有查出重大疾病的的案例,輕則造成個人生命損失,重則可能感染給其它人,所以重大疾病檢檢測需要從寬認定,盡量降低False Negative(FN,偽陰性)的數量, 此時我們會希望 Recall 高一點。 Precision & Recall 指標計算的方式如下: Precision = TP / ( TP + FP ) Recall = TP / ( TP + FN ) 有沒有發現 TN 在這兩個指標中都沒有被提到? 因為 True Negative ( TN ) 的定義為實際為 NO 且預測也為 NO的情況。在門禁的例子中,指的就是陌生人來開門,而門禁系統判定為陌生人所以沒有解鎖。只有在 Accuracy 才會考慮 TN。 (3)F1 Score: 如果今天覺得 Precision 還有 Recall 一樣重要的話,我們可以設計出一個經過統合的指標,也就是 F1 Score。基於其數據特性,利用調和平均的方法計算出 F1 Score: F1 Score = ( 2 * Precision * Recall ) / ( Precision + Recall ) ◆用程式碼實作混淆矩陣 我們利用 Scikit-learn 內建的資料集來進行程式的操作,首先建立出一個羅吉斯回歸:
再來建立出一個混淆矩陣以及印出各個指標:
此時,思考一下剛剛提到的門禁系統,若我們把門檻值調高讓系統從嚴認定,會發現 Precision 值上升了。
再回到疾病偵測,我們不希望有漏網之魚,所以把門檻值調低,結果就是 Recall 值會上升。
對於詳細的程式碼有興趣可以到我的 github:
◆多分類的混淆矩陣 最後我們來舉一反三,如果今天不是單純的二元分類而是多元分類的話,混淆矩陣該怎麼設計?這邊舉一個三分類的例子:
以第 0 類為例, Precision = a / (a+b+c),recall = a / (a+d+g) ◆總結 看了這篇文章,下次如果你再看到一些混淆矩陣的圖 (如下) ,基本上如果主對角線(Primary diagonal)的顏色很深,其它的地方顏色很淡,那基本上那個模型的效能應該就還不錯,那如果非主對角線以外的地方顏色比較深,你應該也可以大致判斷可能有那些樣本需要再作進一步分析了。
40
回應 4
文章資訊
共 4 則留言
國立中央大學
謝謝您的分享。
國立臺灣科技大學
讚👍
龍華科技大學 資訊網路工程系
好猛 期待一整教學文😂
國立成功大學
優質的教學文讓我不再混淆👍