閱讀824 返回首頁    go 阿裏雲 go 技術社區[雲棲]


準確率(Accuracy), 精確率(Precision), 召回率(Recall)和F1-Measure

機器學習(ML),自然語言處理(NLP),信息檢索(IR)等領域,評估(Evaluation)是一個必要的工作,而其評價指標往往有如下幾點:準確率(Accuracy),精確率(Precision),召回率(Recall)和F1-Measure。(注:相對來說,IR 的 ground truth 很多時候是一個 Ordered List, 而不是一個 Bool 類型的 Unordered Collection,在都找到的情況下,排在第三名還是第四名損失並不是很大,而排在第一名和第一百名,雖然都是“找到了”,但是意義是不一樣的,因此更多可能適用於 MAP 之類評估指標。)

本文將簡單介紹其中幾個概念。中文中這幾個評價指標翻譯各有不同,所以一般情況下推薦使用英文。

現在我先假定一個具體場景作為例子。

假如某個班級有男生80人,女生20人,共計100人.目標是找出所有女生. 現在某人挑選出50個人,其中20人是女生,另外還錯誤的把30個男生也當作女生挑選出來了. 作為評估者的你需要來評估(evaluation)下他的工作
首先我們可以計算準確率(accuracy),其定義是: 對於給定的測試數據集,分類器正確分類的樣本數與總樣本數之比。也就是損失函數是0-1損失時測試數據集上的準確率[1].

這樣說聽起來有點抽象,簡單說就是,前麵的場景中,實際情況是那個班級有男的和女的兩類,某人(也就是定義中所說的分類器)他又把班級中的人分為男女兩類。accuracy需要得到的是此君分正確的人占總人數的比例。很容易,我們可以得到:他把其中70(20女+50男)人判定正確了,而總人數是100人,所以它的accuracy就是70 %(70 / 100).

由準確率,我們的確可以在一些場合,從某種意義上得到一個分類器是否有效,但它並不總是能有效的評價一個分類器的工作。舉個例子,google抓取了argcv 100個頁麵,而它索引中共有10,000,000個頁麵,隨機抽一個頁麵,分類下,這是不是argcv的頁麵呢?如果以accuracy來判斷我的工作,那我會把所有的頁麵都判斷為"不是argcv的頁麵",因為我這樣效率非常高(return false,一句話),而accuracy已經到了99.999%(9,999,900/10,000,000),完爆其它很多分類器辛辛苦苦算的值,而我這個算法顯然不是需求期待的,那怎麼解決呢?這就是precision,recall和f1-measure出場的時間了.

在說precision,recall和f1-measure之前,我們需要先需要定義TP,FN,FP,TN四種分類情況. 按照前麵例子,我們需要從一個班級中的人中尋找所有女生,如果把這個任務當成一個分類器的話,那麼女生就是我們需要的,而男生不是,所以我們稱女生為"正類",而男生為"負類".

相關(Relevant),正類 無關(NonRelevant),負類

被檢索到(Retrieved) true positives(TP 正類判定為正類,例子中就是正確的判定"這位是女生") false positives(FP 負類判定為正類,"存偽",例子中就是分明是男生卻判斷為女生,當下偽娘橫行,這個錯常有人犯)
未被檢索到(Not Retrieved) false negatives(FN 正類判定為負類,"去真",例子中就是,分明是女生,這哥們卻判斷為男生--梁山伯同學犯的錯就是這個) true negatives(TN 負類判定為負類,也就是一個男生被判斷為男生,像我這樣的純爺們一準兒就會在此處)
通過這張表,我們可以很容易得到這幾個值: TP=20 FP=30 FN=0 TN=50

精確率(precision)的公式是P = \frac{TP}{TP+FP},它計算的是所有"正確被檢索的item(TP)"占所有"實際被檢索到的(TP+FP)"的比例.

在例子中就是希望知道此君得到的所有人中,正確的人(也就是女生)占有的比例.所以其precision也就是40%(20女生/(20女生+30誤判為女生的男生)).

召回率(recall)的公式是R = \frac{TP}{TP+FN},它計算的是所有"正確被檢索的item(TP)"占所有"應該檢索到的item(TP+FN)"的比例。

在例子中就是希望知道此君得到的女生占本班中所有女生的比例,所以其recall也就是100%(20女生/(20女生+ 0 誤判為男生的女生))

F1值就是精確值和召回率的調和均值,也就是 \frac{2}{F_1} = \frac{1}{P} + \frac{1}{R} 調整下也就是 F_1 = \frac{2PR}{P+R} = \frac{2TP}{2TP + FP + FN}
例子中 F1-measure 也就是約為 57.143%(\frac{2 * 0.4 * 1}{0.4 + 1}).

需要說明的是,有人[2]列了這樣個公式 F_a = \frac{(a^2 + 1 )PR}{a^2(P+R)} 將F-measure一般化.

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

話雖然很多,其實實現非常輕鬆,點擊此處可以看到我的一個簡單的實現.

References
[1] 李航. 統計學習方法[M]. 北京:清華大學出版社,2012.
[2] 準確率(Precision)、召回率(Recall)以及綜合評價指標(F1-Measure )

最後更新:2017-04-11 09:00:00

  上一篇:go 全球運維大會GOPS 2017您一定不能錯過的9個演講!
  下一篇:go Python使用xlrd和xlwt讀寫Excel的簡單用法