前面幾章有講到Confusion Matrix跟Accuracy Score
在整個Classification 章節上完後,又發現有一章比較深入談選模型時,怎麼使用Confusion Matrix的內容跟Accuracy Paradox,以及CAP的觀念。
Confusion Matric再複習一次,就是根據我們預測值及實際值,sklearn 可以產生一個Confusion Matrix
from sklearn.metrics import confusion_matrix
confusion_matrix(y_true, y_pred)
延續先前提過的案例,根據一些檢驗結果做模型訓練後預測是否得病,
Confusion Matrix會給一個4X4的內容表格,如下,要看預測正確的量是左上右下,而預測不準的部分是右上左下。
| ++ | 預測沒有 | 預測有 |
|---|---|---|
| 實際沒有 | 30 | TypeI error |
| 實際有 | TypeII error | 80 |
其中、右上又可稱型一錯誤,就是實際上沒有但被預測成有,這個就講師的觀點來說影響性比較低,畢竟只是誤判,實際沒有發生事情。而左下的型二錯誤實際影響就比較嚴重了,型二是沒被預測到,但實際有發生的狀況。
這個在判斷模型適切度來說也是蠻重要的指標之一
Accuracy Score & Accuracy Score Paradox
Accuracy Score的算法從Confusion matrix延續,
| ++ | 預測沒有 | 預測有 |
|---|---|---|
| 實際沒有 | 43 | 12 |
| 實際有 | 4 | 41 |
準確率(AR) =預測準確(84) /全部(100) = 84%
錯誤率(ER) =沒預測到(16)/全部(100)=16%
Accuracy Paradox可能會在不平衡的資料中,很有可能會算出很好的準確度但其實沒有參考性。例如以下:
| ++ | 預測沒有 | 預測有 |
|---|---|---|
| 實際沒有 | 95 | 0 |
| 實際有 | 5 | 0 |
AR = 95 / 100 = 95% 準確率反而會一下子上升到96%,看似很有價值,但反而沒有參考性。
因為、完全沒有抓到實際'有'的狀況。維基百科是說這種狀況下適合拿來評估的方式是
Precision & Recall
| ++ | 預測沒有 | 預測有 |
|---|---|---|
| 實際沒有 | TN(95) | FP(0) |
| 實際有 | FN(5) | TP(0) |
Precision = TP / (TP+FP) = 0/0 = 0% 模型預測沒有人...不過我們這個算式等於無法評估哈哈。
Recall = TP / (TP+FN) = 0/5 = 0% 實際有5個人、但模型一個都沒預測到。
總之Precision 跟recall兩個都很差的狀況下,就表示accuracy score的可信度不高了,模型需要重跑。
至於sklearn怎麼跑
from sklearn.metrics import precision_score, recall_score, classification_report
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
查官網發現了Classification report這個東西,實際試跑得到以下結果
左上陣列是confusion matrix,放在這邊當參考值而已XD
我們可以看到分類為0 / 1的precision 跟recall分別為多少,然後還有一個f1_score這個指標經過查詢是個precision跟recall的綜合指數,我想應該有超過80%都算是蠻不錯的。
下方的指標我就不寫了、macro avg 跟 weighted avg 兩種都是把precision跟recall指數算進來的綜合性的Accuracy 指標,Macro是每個類別同樣重要,可以避免資料量差異帶來的影響,weighted則是有考量每個類別的數量,數量多的會拿到說一點分數。
總之各種accuracy指標都差不多讀到了
最後,來看一下CAP (Cumulative Accuracy Profile)
是拿來評估模型效率的一個方法。模型效率越好、我們可以拿越少的資料預測更多的可能,引用課堂的圖
其中有三條線、灰色虛線是random model,我覺得那條線應該不存在,只是當基準線用的,random假設基本是50%的資料預測50%的正確結果。但是假設訓練模型訓練了半天還是這樣,真不如躺平了XD 比較好的模型結果當然是拿10%資料預測90%的正確結果,但10%預測90%又太夢幻了,通常是perfect model才有可能,現實中不太可能存在,通常拿到good model就很不錯。我們要看模型效率好不好,可以看圖片灰色區塊大不大,還有在小樣本數的時候對應的預測結果高不高。不過sklearn其實沒有把CAP出成一個模組、我想主要應該是因為...這個是'看圖'用的,比較不是算出一個分出來做參考的。後頭的課程不知道會不會介紹更有效的方式,有的話到時候再寫囉~