當前位置:
首頁 > 知識 > 機器學習小白看過來,帶你全面了解分類器評價指標

機器學習小白看過來,帶你全面了解分類器評價指標

AI 研習社按:為你的分類器選擇正確的評價指標十分關鍵。如果選不好,你可能會陷入這樣的困境:你認為自己的模型性能良好,但實際上並非如此。

近日,towardsdatascience 上的一篇文章就深入介紹了分類器的評價指標,以及應該在什麼場景下使用,AI 研習社將內容編譯整理如下:

在本文中,你將了解到為什麼評價分類器比較困難;為什麼在大多數情況下,一個看起來分類準確率很高的分類器性能卻沒有那麼理想;什麼是正確的分類器評價指標;你應該在何時使用這些評價指標;如何創造一個你期望的高準確率的分類器。

目錄

評價指標為什麼如此重要?

混淆矩陣

準確度和召回率

F-Score

精確率和召回率的折衷

精確率和召回率的曲線

ROC、AUC 曲線和 ROC、AUC 值

總結


評價指標為什麼如此重要?

通常來說,評價一個分類器要比評價一個回歸演算法困難得多。著名的 MNIST 數據集是一個很好的例子,它包含多張從 0 到 9 的手寫數字圖片。如果我們想要構建一個分類器來判斷數值是否為 6,構建一個演算法將所有的輸入分類為非 6,然後你將在 MNIST 數據集中獲得 90% 的準確率,因為數據集中只有大約 10% 的圖像是 6。這是機器學習中一個主要的問題,也是你需要多用幾個評價指標測試你的分類器的原因。


混淆矩陣

首先,你可以了解一下混淆矩陣,它也被稱為誤差矩陣。它是一個描述監督學習模型在測試數據上的性能的表格,其中真實的值是未知的。矩陣的每一行表示預測出的類中的實例,而每一列則表示實際類別中的實例(反之亦然)。它被稱之為「混淆矩陣」的原因是,利用它你很容易看出系統在哪些地方將兩個類別相混淆了。

你可以在下圖中看到在 MNIST 數據集上使用 sklearn 中的「confusion_matrix()」函數得到的輸出:

每一行表示一個實際的類別,每一列表示一個預測的類別。

第一行是實際上「非 6」(負類)的圖像個數。其中,53459 張圖片被正確分類為「非 6」(被稱為「真正類」)。其餘的 623 張圖片則被錯誤地分類為「6」(假正類)。

第二行表示真正為「6」的圖像。其中,473 張圖片被錯誤地分類為「非 6」(假負類),5445 張圖片被正確分類為「6」(真正類)。

請注意,完美的分類器會 100% 地正確,這意味著它只有真正類和真負類。


精確率和召回率

一個混淆矩陣可以給你很多關於你的(分類)模型做的有多好的信息,但是有一種方法可以讓你得到更多的信息,比如計算分類的精確率(precision)。說白了,它就是預測為正的樣本的準確率(accuracy),並且它經常是和召回率(recall,即正確檢測到的正實例在所有正實例中的比例)一起看的。

sklearn 提供了計算精確率和召回率的內置函數:

現在,我們有了一個更好的評價分類器的指標。我們的模型將圖片預測為「6」的情況有 89% 是正確的。召回率告訴我們它將 92% 的真正為「6」的實例預測為「6」。

當然,還有更好的評價方法。


F-值

你可以把精確率和召回率融合到一個單獨的評價指標中,它被稱為「F-值」(也被稱為「F1-值」)。如果你想要比較兩個分類器,F-值會很有用。它是利用精確率和召回率的調和平均數計算的,並且它將給低的數值更大的權重。這樣一來,只有精確率和召回率都很高的時候,分類器才會得到高 F-1 值。通過 sklearn 很容易就能計算 F 值。

從下圖中,你可以看到我們的模型得到了 0.9 的 F-1 值:

不過 F-值並不是萬能的「聖杯」,精確率和召回率接近的分類器會有更好的 F-1 分數。這是一個問題,因為有時你希望精確率高,而有時又希望召回率高。事實上,精確率越高會導致召回率越低,反之亦然。這被稱為精確率和召回率的折衷,我們將在下一個章節討論。


精確率和召回率的折衷

為了更好地解釋,我將舉一些例子,來說明何時希望得到高精確率,何時希望得到高召回率。

高精確率:

如果你訓練了一個用於檢測視頻是否適合孩子看的分類器,你可能希望它有高的精確率。這意味著,這個你希望得到的分類器可能會拒絕掉很多適合孩子的視頻,但是不會給你包含成人內容的視頻,因此它會更加保險。(換句話說,精確率很高)

高召回率:

如果你想訓練一個分類器來檢測試圖闖入大樓的人,這就需要高召回率了。可能分類器只有 25% 的精確率(因此會導致一些錯誤的警報),只要這個分類器有 99% 的召回率並且幾乎每次有人試圖闖入時都會向你報警,但看來是一個不錯的分類器。

為了更好地理解這種折衷,我們來看看隨機梯度下降(SGD)的分類器如何在 MNIST 數據集上做出分類決策。對於每一個需要分類的圖像,它根據一個決策函數計算出分數,並將圖像分類為一個數值(當分數大於閾值)或另一個數值(當分數小於閾值)。

下圖顯示了分數從低(左側)到高(右側)排列的手寫數字。假設你有一個分類器,它被用於檢測出「5」,並且閾值位於圖片的中間(在中央的箭頭所指的地方)。接著,你會在這個閾值右邊看到 4 個真正類(真正為「5」的實例)和 1 個假正類(實際上是一個「6」)。這一閾值會有 80% 的精確率(五分之四),但是它僅僅只能從圖片中所有的 6 個真正的「5」中找出 4 個來,因此召回率為 67%(六分之四)。如果你現在將閾值移到右側的那個箭頭處,這將導致更高的精確率,但召回率更低,反之亦然(如果你將閾值移動到左側的箭頭處)。

精確率/召回率曲線

精確率和召回率之間的折衷可以用精確率-召回率曲線觀察到,它能夠讓你看到哪個閾值最佳。

另一種方法是將精確率和召回率以一條曲線畫出來:

在上圖中,可以清晰地看到,當精確率大約為 95% 時,精準率升高,召回率迅速下降。根據上面的兩張圖,你可以選擇一個為你當前的機器學習任務提供最佳精確率/召回率折衷的閾值。如果你想得到 85% 的精確率,可以查看第一張圖,閾值大約為 50000。


ROC、AUC 曲線和 ROC、AUC 值

ROC 曲線是另一種用於評價和比較二分類器的工具。它和精確率/召回率曲線有著很多的相似之處,當然它們也有所不同。它將真正類率(true positive rate,即recall)和假正類率(被錯誤分類的負實例的比例)對應著繪製在一張圖中,而非使用精確率和召回率。

當然,在這裡也有所折衷。分類器產生越多的假正類,真正類率就會越高。中間的紅線是一個完全隨機的分類器,分類器的曲線應該儘可能地遠離它。

通過測量 ROC 曲線下方的面積( AUC),ROC 曲線為比較兩個分類器的性能提供了一種方法。這個面積被稱作 ROC AUC值,100% 正確的分類器的 ROC AUC 值為 1。

一個完全隨機的分類器 ROC AUC 為 0.5。下圖中是 MNIST 模型的輸出:

總結

通過以上介紹,大家將學習到如果評價分類器,以及用哪些工具去評價。此外,還能學到如何對精確率和召回率進行折衷,以及如何通過 ROC AUC 曲線比較不同分類器的性能。

我們還了解到,精確率高的分類器並不像聽起來那麼令人滿意:因為高精確率意味著低召回率。

下次當你聽到有人說一個分類器有 99% 的精確率或準確率時,你就知道你應該問問他這篇帖子中討論的其它指標如何。

資源鏈接

https://en.wikipedia.org/wiki/Confusion_matrix

https://github.com/Donges-Niklas/Classification-Basics/blob/master/Classification_Basics.ipynb

https://www.amazon.de/Hands-Machine-Learning-Scikit-Learn-TensorFlow/dp/1491962291/ref=sr_1_1?ie=UTF8&qid=1522746048&sr=8-1&keywords=hands+on+machine+learning

via towardsdatascience

雷鋒網 AI 研習社編譯整理。

4 月 AI 求職季

8 大明星企業

10 場分享盛宴

20 小時獨門秘籍

4.10-4.19,我們準時相約!

新人福利

關注 AI 研習社(okweiwu),回復1領取

【超過 1000G 神經網路 / AI / 大數據資料】

視頻 | 手把手教你構建圖片分類器,備戰 kaggle 大賽!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

用於多元時間序列的 Python 模塊——Seglearn
用於自然語言處理的開源 Python庫——PyTorch-NLP

TAG:AI研習社 |