如果你希望讓學習演算法能夠達到人類的地步,但是還沒有達到,那麼人工檢查一下你的演算法犯的錯誤,會讓你了解接下來該做什麼。這個過程稱為誤差分析。
對於乙個貓狗分類的任務,你最終實現了90%的精度,這遠遠沒有達到你的目標。然後你對出錯的分類進行分析,發現他們看起來是有點像貓。或許你的隊友給你提一些建議,增加一些針對狗的優化演算法,讓你對狗的分類更加合理。那麼,問題來了,是不是應該開始去做乙個專案專門處理狗呢?這個過程可能會花費你幾個月的時間,這樣做是不是值得?可能最後一點用都沒有。
這裡有個誤差分析流程,可以讓你很快知道這個方向是否值得努力。
誤差分析:
- 獲取大約100個作用錯誤分類的dev set 樣本
- 統一有多少是狗。
假如說在錯誤標記的開發集例子中有5%是狗,這意味著在100個例子中就算你全部修復了你也只能修正這100個錯誤中的5個。或者換句話說你在狗的分類上花費了大量時間最終只是讓你的誤差從10%下降到9.5%。這裡有個效能上限(ceiling)的概念,它可以幫你確定演算法效能呢的上限,比如說完全解決狗的問題可以對你有多少幫助。但是,如果說你發現錯誤分類的例子中有50%是狗,那麼花時間去解決狗的問題可能效果就更好。這個時候你如果真正的去解決狗的問題,那麼你的誤差可能就從10%下降到5%了。然後你覺得可以向誤差減半的方向嘗試,可以集中精力減少錯誤標記的狗圖的問題。在機器學習中,有時很鄙視手工操作,但如果要搭建應用系統,那這個簡單的人工統計步驟-誤差分析,可以節省大量時間。對於錯誤分類,你可以化5-10分鐘統計下有沒有佔比5%或者50%的東西,然後這個會給你確定乙個方向,幫你節省幾個月的時間,然後你就可以投入到解決錯誤標記的狗圖中。
有時做誤差分析時也可以同時並行評估幾個想法。比如你有幾個改善貓檢測器的想法,比如狗誤識別為貓,或者大型貓科動物如獅子,豹,獵豹等被誤識別,或者是想提高模糊影象的表現。andrew ng一般會列一張**來統計其中的百分比,有時候還會加一些備註,來判斷是否這個方向值得你去努力。假如說模糊佔比很大,分析的結果不是說你一定要處理模糊,這個分析沒有乙個嚴格的數學公式告訴你應該做什麼,但它能讓你對應該選擇哪些手段有個概念。這個很大程度上取決於你有多少改善模型的想法。
在監督學習中,你的資料有x和y組成,對於有些輸出y,你可能會錯誤的標記,就是說你的原始資料有了錯誤的標籤y,那麼是否值得花時間去修正這些標籤呢?注意這裡是原始資料的誤標記的例子而不是演算法訓練出來的分類錯誤的例子。
首先,對於訓練集。事實證明,深度學習演算法對於訓練集中的隨機誤差是相當魯棒的。只要你的標記出錯的例子,比如可能是輸入錯誤,距離隨機誤差很近,也就是說只要誤差足夠隨機,那麼放著這些誤差不管可能也沒問題。警告:深度學習演算法對隨機誤差很魯棒,但是對系統性的錯誤就沒那麼魯棒了。比如說如果做標記的人一直把白色的狗標記為貓,那就成問題了。因為你的分類器學習之後會把所有白色的狗都分類為貓。
對於開發集或測試集錯誤分類的例子呢。那麼在誤差分析中,你可以單獨開闢一列來統計錯誤標註的數量。
那麼是否值得修復這6%的樣本呢?andrew ng建議如果這些標記錯誤嚴重影響了你在開發集上評估演算法的能力,那麼就應該花時間修正錯誤的標籤。反之沒必要花寶貴的時間去處理。
這裡有一些指導原則來糾正誤標註的例子。
1.不管用什麼手段都要同時作用在開發集和測試集上。
2. 強烈建議你要考慮同時檢驗演算法判斷正確和判斷錯誤的例子。
第二點不容易做,也經常不做。因為找錯誤的好處理,因為可能只有2%,但找98%的很難。儘管如此,但也是要考慮到的。
最後幾個建議:
首先,深度學習研究人員有時會喜歡這樣說,「我只是把資料提供給演算法,我訓練過了,效果拔群」,這話說出了很多深度學習錯誤的真相。更多時候,我們把資料餵給演算法,然後訓練它,並減少人工干預,減少使用人類的見解。但andrew ng認為在構造實際系統時,通常需要更多的人工誤差分析,更多的人類見解來架構這些系統,儘管深度學習的研究人員不願意承認這點。
第二點,不知道為什麼,我-指andrew ng 看一些工程師和研究人員不願意親自去看這些例子,可能是因為這些例子很無聊。但是,花幾分鐘或者幾個小時是很值得的。
如果你正在開發全新的機器學習應用,andrew ng給出這樣的建議:
你應該盡快建立你的第乙個系統原型,然後快速迭代。對於乙個機器學習應用,一般會有很多個方向,並且每個方向都是相對合理的,可以改善你的系統,但挑戰在於你如何選擇乙個方向集中精力處理。建議是,如果你想搭建全新的機器學習程式,就是快速搭好你的第乙個系統然後開始迭代。具體就是設定開發集和驗證集還有指標,這樣就決定了你的目標所在。然後馬上搭好乙個機器學習系統原型,然後找到訓練集,訓練一下看看效果,開始理解你的演算法表現如何。接著,建立好乙個系統以後,你就可以使用偏差方差分析以及誤差分析來確定下一步優先做什麼。
如果你將將其學習演算法應用到新的應用程式裡,你的主要目標是弄出能用的系統,而不是發明全新的機器學習演算法,這是完全不同的目標。所以鼓勵搭建快速而粗糙的實現然後慢慢改進。
機器學習學習小結(3)
1.scikit learn環境 在anaconda常用的命令 在anaconda prompt中鍵入 若在window命令視窗中直接輸入conda list會提示不是內部或外部命令 scikit learn中文文件 建立在numpy,scipy和matplotlib 事先需要安裝 2.anacon...
機器學習 分類3
今天,輸出了cross validation 在每個類別裡面的 模型評估值。主要有下面2步 這是將輸出變成pandas矩陣的函式 from sklearn.metrics import classification report from collections import defaultdict...
機器學習3 引數學習
原文 1.2.3.對於乙個假設函式,需要一種方法來衡量它如何適應資料。現在我們需要估計假設函式中的引數。這就是漸進下降的地方。想象一下,我們基於它的場 0和 1來繪製我們的假設函式 實際上我們將成本函式繪製為引數估計的函式 我們不是繪製x和y本身,而是我們的假設函式的引數範圍和從選擇一組特定引數導致...