在machine learning中有許多Evaluation的方法.

這邊就記錄一下各個machine learning 種類所對應到Evaluation的方法.

Binary Classification

在machine learning中 有一些基本的方法可以測量 Binary Classification 的好壞.

Confusion matrix

首先我們通常會先算 True positive, False positive, True negative, False negative. 這四種值, 通常以表格的方式來代表(Confusion matrix)

![](https://dl.dropboxusercontent.com/u/5841657/Blog/2015.7.17/1.png)

當然還是有點抽象, 舉個例子來說明, 請看下圖:

![](https://dl.dropboxusercontent.com/u/5841657/Blog/2015.7.17/2.png)
  • True positive(TP) = correctly identified = 6954
    會買電腦的總共有7000個人 但model只判斷出6954個.

  • False positive(FP) = incorrectly identified = 412
    不會買電腦的總共有3000個人 但model判斷其中有412個會買

  • True negative(TN) = correctly rejected = 2588
    不會買電腦的總共有3000個人 但model判斷出有2588個.

  • False negative(FN) = incorrectly rejected = 46
    會買電腦的總共有7000個人 但model判斷其中有46個不會買電腦.

接著再衍生出一些公式:

Accuracy

Accuracy (ACC) measures the fraction of correct predictions. Higher is better.

$$Accuracy = \frac{TP + TN}{TP + FP + TN + FN}$$

以上述的例子為例: 總共有10000人, 系統預測成功的有 6954 + 2588 = 9542

所以 Accuracy = 9542 / 10000 = 0.9542 = 95.42%

Precision

Precision measures the fraction of actual positives among those examples that are predicted as positive. (系統預測是Positive的情況中, 有多少是正確的.) Higher is better.

$$Precsion = \frac{TP}{TP + FP}$$

以上述的例子為例: 系統預測會買電腦的人為 6954 + 412 = 7366. 其中真的有買電腦的人為 6954.

所以 Precsion = 6954 / 7366 = 0.944 = 94.4%

Recall

Recall measures the fraction of actual positives that are predicted as positive. (實際是Positive的情況下, 有多少是被預測成功的.) Higher is better.

$$Recall = \frac{TP}{TP + FN}$$

以上述的例子為例: 實際會買電腦的人為 6954 + 46 = 7000. 其中系統預測會買電腦的為 6954.

所以 Recall = 6954 / 7000 = 0.9934 = 99.34%

做一個小結論, 我想 Accuracy 應該沒什麼問題, 大家都知道也是平常在用的指標. 那 Precision & Recall 是用來幹嘛的呢? 我們在舉個極端一點的例子

檢驗出有癌症的人

- have dont have actual total
have 50 150 200
dont have 100 9700 9800
predicted total 150 9850 10000
  • Accuracy = 9750 / 10000 = 0.975 = 97.5%

  • Precision = 50 / 150 = 0.333 = 33.3%

  • Recall = 50 / 200 = 0.25 = 25.0%

根據這個結果我們要去思考一個問題. 這是一個好Model嗎? 在這種情況中. 我即使全部都猜dont have. 我可以得到98.0%的Accuracy. 所以這個Model只有97.5%, 因此它是個不好的Model?

但事實上, 面對這種情況. 搞不好大部分的演算法的Accracy都不會比較好. 那這種情況下如果還要追求Accuracy可能意義就不大. 所以我們反而會更注重 Precision & Recall 這兩個值.

畢竟在這種情況中, 我們更想知道的是. 哪些人可能會有癌症. 我們追求的會是高Precision & 高Recall. 當然可能 Recall 的重要性又大於 Precision. 因此在不同的情況中如何去判斷你要拿什麼方法去衡量Model的performance是很重要的.

F-measure

Precision 和 Recall 有時候會出現的矛盾的情況,這樣就需要綜合考慮他們,最常見的方法就是 $F_1-Measure$ (又稱為F-Score). $F_1-Measure$ 是Precision 和 Recall的調和平均数(harmonic mean). 所以公式如下:

$$F_1 = \frac{2}{\frac{1}{Precision} + \frac{1}{Recall}} = 2 * \frac{Precision * Recall}{Precision + Recall}$$

F1-measure認為精確率和召回率的權重是一樣的,但有些場景下,我們可以認為是精確率會更加重要,調整參數a,使用Fa-measure可以幫助我們更好的評估結果。

$$F_a = \frac{a^2 + 1}{\frac{1}{Precision} + \frac{a^2}{Recall}}$$

ROC(receiver operating characteristic)

An ROC curve is the most commonly used way to visualize the performance of a binary classifier, and AUC is (arguably) the best way to summarize its performance in a single number. As such, gaining a deep understanding of ROC curves and AUC is beneficial for data scientists, machine learning practitioners, and medical researchers (among others).

ROC曲線和AUC(Area Under Curve)常被用來評價一個 Binary Classifier 的優劣. 那在了解ROC curve之前我們要先了解幾個定義.

  • Sensitivity: The fraction of people with the disease that the test correctly identifies as positive.(True positive rate)

$$Sensitivity = Recall = \frac{TP}{TP + FN}$$

  • Specificity: The fraction of people without the disease that the test correctly identifies as negative. (True negative rate)

$$Specificity = \frac{TN}{TN + FP}$$

![](/content/images/2016/12/roccomp.jpeg)

從上圖我們可以先大概了解到

  • 以False Positive Rate(FPR)為X軸, 代表在所有negative樣本中, 被判斷為positive的機率, 又寫為(1-Specificity).

  • 以True Positive Rate(TPR)為Y軸, 代表在所有positve樣本中,被判斷為positive的機率, 又稱為Sensitivity.

  • 理想的區分者應盡量靠近(0,1)點, false positive率越低, true positive越高的狀況.

那整個ROC Curve要怎麼畫呢? 簡單的說就是給定不同的threshold(好幾組), 會分別得到不同的 False Positive Rate & True Positive Rate(機率). 把這兩個值變成一個座標. 經過多組threshold後就可以得到多組(False Positive Rate, True Positive Rate)來描繪ROC Curve. 可以參考這篇文章來更了解ROC Curve

可用曲線下面積 (area under curve, AUC) 判別ROC鑑別率

  • AUC=0.5 無判別力 (no discrimination)
  • 0.7 > AUC > 0.8 可接受判別力 (acceptable)
  • 0.8 > AUC > 0.9 好的判別力 (excellent)
  • AUC > 0.9 非常好的判別力 (outstanding)

Others

因為上文中有提到調和平均数(harmonic mean), 使得我一直在想為啥要用調和平均数(harmonic mean)而不用普通我們一般在用的平均數(average)就好. 在網路上有找到相關的解釋就把它順便記錄下來.

***調和平均数(harmonic mean)***主要是用來解決在無法掌握總體單位數的情況下,只有每組的變量值和相應的標誌總量,而需要求得平均數的情況下使用的一種數據方法.

我的理解是因為Recall & Precision並不是同類的個體. 並不像我們要算全班考試分數的平均. 每個人其實算同類的個體. 所以你可以使用平均數(average). 所以對F-Measure來說用調和平均数(harmonic mean)會比較合理.


Reference