code

2017年9月19日 星期二

Applied Machine Learning in Python 11 - Binary Classification Evaluation

Accuracy is not enough

之前定義accuracy:


不過實務上光是這個指標是不夠的,因為通常會遇到imblanced classes,也就是對一個classification problem來說,多數data point是某一個class,少數data point屬於其他的class,所以處於非常不平均分布的狀況。

假設1000個data point中,只有一個data是positive class,其他全部是negative class,則一個永遠predict出negative 結果的Dummy classifier 會有99.9%的accuracy!!

所以accuracy是個prediction capability的好指標嗎? 看來不是絕對的,至少對imblanced classes problem來說

Dummy classifier並不真的去看data,而是採取某種heuristics (e.g. random / constant / ... ) 來決定prediction,這提供了一個比較的基礎,所謂的null metric或是baseline,任何estimator沒有比Dummy好的話,基本上就是沒用的。


Confusion Matrix

之前的筆記有介紹過了。

以下是binary classification的confusion matrix:


判斷指標


之前講過accuracy定義如下:


classification errors:



Recall / true positive rate (TPR) / sensitivity / probability of detection
recall的意義是偵測出來的positive instances佔所有positive instances的比例為何?

precision:
precision的意義是你偵測出來的positive instance真正是positive的占比有多少,也就是你對positive 的偵測的精準度有多高?

specificity / false positive rate (FPR):
意義是你把negative判斷成positive佔所有negative samples的比例。


Recall-Precision Tradeoffs



上圖中,decision boundary上方判斷為positive,下方判斷為negative。
precision ~= 0.68,也就是decision boundary上方為真正的positive samples只有68%。
recall ~= 0.87,也就是我們把所有positive samples中的87%都正確判斷為positive。


如果我們調整decision boundary如下:


則precision變成100%了,因為所有判斷成positive的samples 的確100%都是positive。
可是recall降低了 ~= 47%,只有47% positive samples被我們判斷成positive。


如果調整decision boundary變成以下:


可以看到所有positive samples都會被判斷成positive,所以recall = 100%,但是!!! false positive提高了,也就是precision降低成 36%。


recall必須要高的application發生在我們得盡量正確判斷出positive cases,例如醫學偵測。
precision必須要高的application發生使用者很在意false positive的application,例如recommendation / ranking / classification等,主要原因是user會記得小錯而放大這個觀感,而把絕大多數時候的正確當成理所當然。


F score for classifier evaluation


如果需要precision,則beta較小,e.g. 0.5。
如果需要recall,則beta較大,e.g. 2。

當beta為1的時候,是一個特殊的指標,稱為F1,通常用來檢驗classifier。


沒有留言:

張貼留言