天天看點

《Arduino家居安全系統建構實戰》——2.7 了解分類錯誤

本節書摘來異步社群《機器學習項目開發實戰》一書中的第2章,第2.7節,作者:【美】mathias brandewinder(馬蒂亞斯·布蘭德溫德爾),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

記得在正确看待、與簡單基準比較之前,我們還認為87.7%的分類正确率很不錯嗎?我們可以将這個數字提升到98.3%,明顯比基準要好得多。但是,每當将整個資料集歸納為單一數字時,從定義上說肯定要遺漏某些資訊。人們喜歡用單一數字總結,因為這樣容易比較。我的建議是:每當得到一個統計數字時,應該仔細思考該數字可能遺漏或者隐藏的細節。

在我們的例子中,所知道的是在1000條消息中,平均會錯誤分類17條。我們所不知道的是模型的哪一部分造成了錯誤。同樣的數字(98.3%)可能是不同情況造成的:這17條消息可能主要是垃圾短信、主要是非垃圾短信或者介于兩者之間。根據語境的不同,可能會造成關鍵的差别。例如,我懷疑大部分人更喜歡忽略一兩條垃圾短信、将其保留在收件箱中的分類器,而不喜歡過于激進、因為不正确地标記垃圾短信而将完全正常的消息自動放到垃圾短信檔案夾中的分類器。

那麼,我們的分類器表現如何?讓我們來發現和計量其識别垃圾短信和非垃圾短信的優劣。這隻需分離驗證集中的垃圾短信和非垃圾短信,然後計算每組正确分類的百分比,很容易完成——隻需要在腳本中添加幾行,在f# interactive中運作:

程式清單2-13 按照類别區分的分類錯誤

properly classified ham: 0.98821

properly classified spam: 0.95395<code>`</code>

很不錯,我們的分類器在兩個類别上都工作得很好,在非垃圾短信組上表現最好 ——隻有1.2%的消息分類錯誤。這一數字被稱作“假陽性率”——檢測出實際上不存在的情況的比率。類似地,“假陰性率”是忽略某個問題的比例。在我們的例子中,大約4.6%的垃圾短信未能檢出。

那麼,為什麼說這些資訊有用?原因有以下兩點。

首先,深入了解分類錯誤,了解它們是假陽性還是假陰性,在評估分類器商業價值時極其重要。這種價值完全取決于環境,實質上取決于哪一類錯誤代價更高。因為一條消息被錯誤地分類為垃圾短信而錯過與老闆的會面,遠比從收件箱中人工删除一條垃圾短信嚴重得多。在這種情況下,假陽性比假陰性代價大得多,不應該使用相同的權重。

深入了解錯誤還有助于我們将精力集中在正确的方向,避免在無意義的工作上浪費時間。如果我們的分類器已經達到100%的非垃圾短信識别率,剩下的唯一改進方向就在另一個類别。出發點可能是檢查目前模型沒有識别為垃圾短信的消息,看看是否出現某種模式?

理想狀态下,我們所希望的是即使付出遺漏某些垃圾短信的代價,也要盡可能可靠地識别非垃圾短信。例如,實作這一點的途徑之一是“調低”垃圾短信的靈敏度,而在非垃圾短信上更努力嘗試。應急的方法是,我們可以減少來自垃圾短信方向的标記,增大來自非垃圾短信方向的标記。換言之,隻保持較為特殊的垃圾短信标記——強烈的名額,而張大捕捉非垃圾短信标記的網。目前最佳模型中為每一類保留10%的最常見标記,作為替代,如果我們在非垃圾短信上保留20%,在垃圾短信上保留5%,将會得到什麼樣的結果?讓我們來嘗試一下,使用完全相同的代碼,但是将topham和topspam修改為:

繼續閱讀