機器學習:準確率、精確率、召回率、F1,選擇正確的模型評估指標

2019-07-06     軟體測試開發技術棧

常用的分類算法評估指標大多如上,在具體模型評估指標使用時,並非一味的套用指標計算公式,給出計算結果,還需要結合算法模型的應用場景、數據集等等,比如我們習慣於使用準確率來評價分類算法,一方面是因為我們熟悉它,同時它也是一個很直觀的評價指標,但有些場景下,準確率高並不能代表這個算法模型的效果好,特別是在不平衡分布數據集的場景中。

比如,通過一些數據特徵訓練了一個能夠預測地震區域的算法,並且準確率(accuracy)高達 99%,你認為這個算法如何?


準確率(Accuracy)

準確率是我們最常見的評價指標,表示所有的預測正確(正類負類)的占總的比重。

下圖是來自維基百科的2018年全球地震數據:

好了,現在就有這麼一個模型,將所有的地區標註為非地震區域。全球全年數十億地區特徵信息中,已知6級以上地震130起,這個模型準確率0.9999……無限接近100%,我們會發現這個模型達到了接近完美的準確率,儘管這個模型擁有接近完美的準確率,但是在這個場景中準確率顯然不是一個合適的度量指標。

地震檢測是一個不平衡的分類問題,其數據集也是分布不平衡的數據集。我們需要鑑別的類別有兩個——地震區域和非地震區域,其中一個非地震區域類別代表了絕大多數的數據。

類似,在海嘯、恐怖分子、在逃人員、罕見疾病檢測等,在這些情況下,正例類別,如地震區域、海嘯、恐怖分子、在逃人員、疾病,遠遠少於負例類別的數量。這種問題是數據科學中比較常見的例子,其中準確率並不能作為評估模型的衡量標準。

直觀地說,這種檢測場景中我們更應該關注於正例(地震區域)的識別。


召回率(Recall)

我們應該最大化模型找到數據集中所有相關案例的能力,也就是最大化召回率或查全率(Recall)的衡量指標,也就是正確判為地震區域占實際所有地震區域的比例。

通過召回率計算公式,不難發現:如果模型將所有的區域都預測為地震區域,那麼模型的召回率就是 100%,因為預測所有區域都是地震區域,自然包括了地震區域。

那麼,這樣我們就得到了一個完美的模型嗎?當然,不是。


精確率(Precision)

精確率也就是在所有判為地震區域中,真正的地震區域的比例。

現在前面內容可以看到,第一個模型將所有地區標上了非地震區域的標籤,這個模型準確率無限接近100%,但它是不能使用的,儘管它有著近乎完美的準確率,但是它的精確度和召回率都是0,因為True Postive(TP)為0。

在第二個模型中,將所有的地區都標記為地震區域,召回率達到100%——但我們發現所有人將會在持續的地震偽警報中,惶惶不安。

那麼現在,我們重新訓練一下模型,將返回的區域都正確地識別為地震區域,精確率達到100,但是召回率很低,因為實際上會有很多假負類(False Negative FN),即漏報的地震區域。


F1 精確率—召回率權衡

在我們想要最大化的指標之間存在一個權衡。在召回率的例子中,當召回率增大時,精度會減小。同樣,將 100% 的區域標記為地震區域的模型是不可用的。

在某些情況中,我們也許需要以犧牲另一個指標為代價來最大化精確率或者召回率。例如,醫院在對人們進行隨訪檢查的初步疾病篩查中,我們可能希望得到接近於100%的召回率,我們想找到所有患病的患者。如果隨訪檢查的代價不是很高,我們可以接受較低的精確率。然而,如果我們想要找到精確率和召回率的最佳組合,我們可以使用 F1 score 來對兩者進行結合,F1 score 是對精度和召回率的調和平均:

我們使用調和平均而不是簡單的算術平均的原因是,調和平均可以懲罰極端情況。一個具有 100%的精確率,而召回率為 0 的算法模型,這兩個指標的算術平均是 0.5,但是 F1 score 會是 0。F1 score 給了精確率和召回率相同的權重,它是通用 Fβ指標的一個特殊情況,在 Fβ中,β 可以用來給召回率和精度更多或者更少的權重。(還有其他方式可以結合精度和召回率,例如二者的幾何平均,但是 F1 score 是最常用的。) 如果我們想創建一個具有最佳的精度—召回率平衡的模型,那麼就要嘗試將 F1 score 最大化。

文章來源: https://twgreatdaily.com/lKvgLm0BJleJMoPMg-6Y.html