1. 程式人生 > >機器學習與深度學習系列連載: 第一部分 機器學習(四)誤差分析(Bias and Variance)和模型調優

機器學習與深度學習系列連載: 第一部分 機器學習(四)誤差分析(Bias and Variance)和模型調優

1.誤差分析(Bias and Variance)

當我們以非常複雜的模型去進行測試的時候,可能得到的結果並不理想
這裡寫圖片描述
影響結果的主要有兩個因素:Bias 偏差、Variance 方差

  • Bias 偏差

    在這裡,我們定義偏差是指與目標結果的偏移量,這個偏移量是我們選出來的函式的期望 E(f)。如圖所示:與目標距離遠的是大偏差,與目標距離近的是小偏差
    這裡寫圖片描述

  • Variance 方差
    而方差描述的的是我們選出來的函式,他的穩定性,是否集中在目標區域
    與相對分散的是高方差,相對集中的是低方差
    這裡寫圖片描述

小總結:偏差描述的是與目標的距離,而方差描述的是分散程度,我們的目的是在機器學習三板斧

過後,找到一個低偏差,低方差的函式。如圖左一
這裡寫圖片描述

但是說起來容易,做起來難,我們一起看看吳恩達博士在cs229中的建議

2. 模型調優

問題舉例:以樸素貝葉斯(我們後面會具體講這個模型)為模型的郵件分類系統,錯誤率達到了20%,這是不能接受
這裡寫圖片描述
吳恩達的建議是:
1.獲得跟多的的訓練資料
2.嘗試更少的更多的特徵維度
3.嘗試更多以的更少的特徵維度
4.嘗試更換郵件頭或者郵件體的特徵
5.把梯度下降的方法執行更多次
6.嘗試使用牛頓方法
7.使用不同的引數λ
8 拋棄樸素貝葉斯模型嘗試SVM

這裡寫圖片描述

這麼多方法,我們怎麼選?
誤差分析這個工具就可以派上用場了。一般情況下:高方差表示的就是訓練誤差小於測試誤差,高誤差表示 訓練誤差本來就很高

這裡寫圖片描述
在這裡我們給出典型的學習曲線:

  1. 高方差: 測試誤差明顯大於訓練誤差,而且兩者的距離遠(與訓練誤差距離遠)

這裡寫圖片描述

  1. 高誤差: 訓練誤差大於我們期望的表現,但是與測試誤差接近

這裡寫圖片描述

所以剛才我們提到的8個方法中的前4個要解決的問題是:
1.獲得跟多的的訓練資料 (高方差)
2.嘗試更少的更多的特徵維度(高方差)
3.嘗試更多以的更少的特徵維度(高誤差)
4.嘗試更換郵件頭或者郵件體的特徵(高誤差)

接下來我們假設:
(1) 貝葉斯迴歸正常郵件的錯誤率是2%,垃圾郵件的錯誤率是2%。(如果把2%的正確郵件當成垃圾的,就是不可接受的)
(2) SVM 方法在垃圾郵件的識別錯誤率是10%,而正常郵件的識別錯誤率是0.01%。(這個表現是可以接受的)
(3) 但是,你又想用邏輯迴歸,應為計算量相對比較小

這個問題怎麼破?
這裡寫圖片描述

我們拿貝葉斯和SVM兩個模型做對比
這裡寫圖片描述
我們比較最後結果的的正確性
這裡寫圖片描述
這裡寫圖片描述
舉例來說:上面的方程表示svm的表現好於beyesian
接下來我們就分析beyesian的損失函式 這裡的=J(θ)想到於負的Loss,J(θ)越大,相當於Loss越小。
這裡寫圖片描述
然後我們比較svm和beyesian的損失函式

  • case1:SVM的正確性大於BLR ,評價函式的結果也大於BLR(Loss小)
    這裡寫圖片描述
    這裡說明BLR模型的整體效果不如SVM,原因是J(θ)沒有找到最大值,還有優化空間,需要用不同的方法優化J(θ)

  • case2: SVM的正確性大於BLR,但是評價函式的結果小於BLR

這裡寫圖片描述
這裡說明BLR已經找到了評價函式J(θ)的最大值,但是結果不理想,需要調整評價函式或者換不同的模型。

所以剛才我們提到的8個方法中的後4個要解決的問題是:

5.把梯度下降的方法執行更多次(優化求極值的方法)
6.嘗試使用牛頓方法(優化求極值的方法)
7.使用不同的引數λ(改變評價函式)
8 拋棄樸素貝葉斯模型嘗試SVM(改變評價函式)

著這裡我們把吳恩達博士給的八個方法具體用到哪些場景已經了“心中有數”了。

我們再舉一個例子,斯坦福自動駕駛直升機
這裡寫圖片描述

  1. 首先我們建立一個模擬器
  2. 建立Loss 函式 J(θ)=(xxdesired)2
  3. 執行強化學習演算法(以後單獨會講解)與最小化Loss 然後找到最好的θ
    當你執行完這些步驟後,得到的結果很不理想,沒有找到合適的θ(實際環境中飛機總是墜毀),那我們該怎麼辦。有三種選擇:
    (1) 調整我們建立的飛行模擬器
    (2) 調整Loss 函式
    (3) 調整強化學習演算法

如果模擬環境飛機是正常飛行的,而正常環境飛機總是墜毀,那我們就選擇(1)調整我們的模擬器;

如果讓有經驗的飛行員去控制飛機,我們採集他的行為資料引數θp,
J(θ)>J(θp), 說明飛行員的表現更好,而我們的強化學習演算法沒有能夠有效的降低Loss,那我們就進行(3)調整強化學習演算法**

讓我們再舉一個人臉識別系統誤差分析的例子(這個例子比較舊,但是思路可以借鑑,人臉識別演算法已經很成熟了)
這裡寫圖片描述
許多系統都是由不同的模組構建起來的。
當相機採集照片後,通過預處理去掉背景(preprocess),進入人臉識別模組(Face detection),人臉識別模組又包含三個子模組,眼睛識別、鼻子識別、嘴巴識別,然後用三個子模組的結果進行邏輯迴歸,最後輸出結果。
每個模組對於整體系統正確率貢獻是不同的
這裡寫圖片描述
分析每個模組對誤差的貢獻對整體系統設計是非常有意義的

最後吳恩達給出了執行機器學習演算法的三個建議和兩個系統實現方法
(1) 花在錯誤分析上的時間是值得的
(2) 你的獨創性和靈感往往賴在正確的錯誤診斷中
(3) 錯誤分析可以讓你對問題的理解更加深刻
方法一、仔細設計,但是花費時間多,可能會過多考慮不重要問題
方法二、快速先幹出一個可以執行的系統,但是分析、調優
這裡寫圖片描述

最後,如果不是要做演算法提升的工作,那就拿起鍵盤就是幹。(因為開始的時候,我們並不知道那個模組有用與否,所以先執行起來,再調整)
拿起鍵盤就是幹