5、如何減小誤差 [Stanford - Machine Learning]

下面簡要介紹一下我們如何減小誤差,使我們的系統具有更高的識別率

1、針對性思考。動用大腦想想有沒有更有針對性的解決方法,比如特徵的選擇,適應性更廣(比如不區分單詞大小寫,在對垃圾郵件的處理中)
2、先實現一個簡單的系統。通常我們面對一個新問題時,往往先實現一個快速簡單的分類方法(比如不用神經網絡而用邏輯迴歸)然後進行誤差分析,error analysis誤差分析,就是人工的看看那個地方分類分錯了,然後想想爲什麼分錯,在決定我要做什麼,比如增加特徵等。通常我們會找到一些導致我們誤差的原因,比如特徵選擇不好,或者沒有預處理什麼的,這些誤差對於我用複雜的網絡或簡單的網絡實現是沒有關係的,最後我們在用一個複雜的網絡去實現,以取得最好的分類效果,我們在沒有采用新方法並進行試驗之前是沒辦法知道這個新方法(比如添加了新特徵)好不好,或有多好,除非我們實現了它,這裏就要引入一個numerical evaluation度量的值(這是很重的,只有有了這個值我們纔可以進行比較,這個值往往可以設置成識別的成功率),這樣才能評估我前後兩種方法到底哪個更好。(這也就是爲什麼我們通常先實現一個簡單的分類器的原因,因爲它簡單嘛,容易訓練,節約時間嘛)
3、選擇正確的度量值。這點非常重要(相比於簡單的選擇預測成功率作爲評判標準,我們還有更好的選擇),這裏針對正偏skewed分類舉例說明,假設要對病人是否得了癌症進行預測,我有一個系統預測了99%的病人是健康的,1%的病人是得了癌症的。我的預測的準確率也是接近99%,因爲大部分人是健康的,而且我也預測準確了。可是事實上0.5%的人是真正得了癌症的,也就是我多預測了一倍的人數(預測的是1%),這樣就顯得很不準確了,如果我做一個最簡單的預測就是所有人都沒有的癌症,也就是預測0%的人得癌症了,我的正確率也很高,而且看樣子效果和我預測1%的人得癌症的系統的效果相當,1-0.5%=0.5%-0。那麼如何選擇正確的評估值呢,這裏畫了一個圖,我們用四分法,如圖所示(搞懂什麼是Precision什麼是Recall)有時候用recall更好。


通常對待這種正偏的分類,或者大小不對等的分類,我們讓y=1代表小的那一類(rare class),通常我們都是這麼做的,比如在一個多類的分類器,每一個向量都是形如[1 0 0 0] [0 1 0 0]這樣的。

4、厥值選擇。在進行預測時,針對具體情況,我們要正確選擇我們的錄取厥值,因爲我們的預測函數事實上是把可能性(簡單的處理爲大於50%就是true,小於50%就是false)但是在我們預測病人是否得癌症的時候,往往我們要通知他當且僅當我們非常確認的時候(threshold大於90%),這個時候預測的正確率可能會上升一點(未必一定),recall會下降。通常我們還會警告病人你有可能得了癌症需要住院觀察一段時間(這時候我們選取threshold大於35%),於是預測正確率下降了,recall上升了。
由於我們選擇了兩個值作爲度量值,相比於一個值來說,我如何通過兩個值來評價我的度量呢?(因爲通常我們需要的是一個值啊兩個值如何判斷),比較容易想到的就是取他們的平均值,但是這樣做顯然是不合理的,比如我們有一個網絡對於任何x的輸出都是y=1,見下面的例子。我們在應用中通常選取一個函數我們稱之爲F函數或者F1函數,見圖片(注意這幾種算法algorithm1-3 他們也許只是厥值threshold不同)

5、數據量與參數。人工智能領域有句話就叫做不是誰的算法更好,而是誰的數據更多,這就是大數據時代的特點,爲什麼facebook要用10億樣本訓練imagenet就是這個原因。關於數據量,我們要又要有足夠多的特徵來反應來讓我可以確定預測(比如預測房價,要有很多參數,如面積、位置、新舊、裝修等等,如果只有一個面積是預測不出來的),另外還有一個就是要有足夠多的樣本。足夠多的參數可以防止訓練偏置(low bias)或者叫訓練不足,足夠多的樣本可以防止過度訓練(overfit)同時也(low variance)。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章