Machine Learning學習日記 — Coursera篇 (Week 6.4):Error Metrics for Skewed Data, Trading off Precision and Recall
Handling Skewed Data
大綱
- Error Metrics for Skewed Data
- Handling Skewed Data
1. Error Metrics for Skewed Data
假設今天有著一組演算法,其預測病人是否得到腫瘤的誤差率是1%(99%的準確率)。
今日得知一組資料其只有0.5%的病患是得到腫瘤的,因此我們將演算法直接改成:無論在甚麼情況下都直接預測病患是沒有得到腫瘤的,這樣總結下來的誤差率就降為0.5%,比原先的演算法的誤差率低了將近一半。
但這真的能稱之為改善嗎?總覺得好像忽略了什麼很重要的東西。
這就是Precision以及Recall存在的原因。
因為預測的值以及實際狀況值的不同,會有四種殊異的情況:
- True positive:預測為1,實際也為1
- False positive:預測為1,實際為0
- False negative:預測為0,實際為1
- True negative:預測為0,實際也為0
Precision即為在所有預測為1的狀況下,實際的值為1的比率
Recall則為在實際的值為1下,預測為1的比率為多少
隨堂練習
Ans:
Precision=80(預測為1,實際也為1)/80+20(預測為一的所有狀況) = 0.8
2. Handling Skewed Data
上面我們提到了Precision跟Recall,那麼這兩者實際代表的意義又是什麼呢?
一般來說,若我們使用Logistic Regression來預測病患是否有著腫瘤,我們會通常會設定門檻值為0.5,代表當今天輸入一大串資料進入函式後,我們會得到一個機率,當這個機率大於0.5時,我們將會預測病患擁有腫瘤。
但若是我們希望只有當非常確定的時候才告訴病患他罹有腫瘤呢?(可能病患被騙的話會腦羞然後告你),這時候我們便會將門檻值上調至0.7之類的數字。
Precision很高,Recall很低
相反地若是寧願錯殺也不願錯放的話,門檻值便會下調。
Recall很高,Precision很低
好了,現在有了新的問題:若是我們發展出三種不同用來預測腫瘤可能性的函式,而這些函式擁有著不同的Precision跟Recall值時,我們要怎麼用這兩個值判斷哪個好哪個壞呢?
可能會試著用平均值來判斷,但是這並不是一個好做法:如果不管輸入資料,全部輸出為1的狀況,我們會得到一個0.5的值,打敗大部分真正有在預測的函式,而這並不是我們所樂見的
因此會使用一個值F1作為標的來判斷:
F1 = (Precision+Recall) / (Precision*Recall)
這樣子當Precision或是Recall很低的時候(ex:0)或是兩者都很高時,我們就可以得到一個相對合理很多的比較標準。