Contenthtml
6. 學習模型的評估與選擇算法
6.1 如何調試學習算法網絡
6.2 評估假設函數(Evaluating a hypothesis)機器學習
6.3 模型選擇與訓練/驗證/測試集(Model selection and training/validation/test sets) 函數
6.4 誤差與方差工具
6.4.1 Diagnosing bias vs. variance. 學習
6.4.2 正則化與誤差/方差(Regularization and bias/variance) 測試
6.5 學習曲線(Learning Curves)優化
6.6 調試學習算法lua
咱們已經學習了許多有用的學習模型(線性迴歸,Logistic迴歸,神經網絡),可是當要解決一個實際問題時,如下問題是咱們要考慮的:
下面將針對上述問題提出建議。
如今假設咱們已經實現了以下的一個正則化的線性迴歸模型用於預測房價
根據已有的訓練集,咱們已經將該模型訓練完畢。可是,當咱們須要在新的數據集上進行房價的預測時,發現預測的結果和實際有很大的偏差。下面咱們應該作什麼?咱們能夠從下面的一些角度考慮:
能夠發現,咱們彷佛有不少種方法來改善學習模型,可是,有些方法可能要花費不少時間(或許還不起做用),有些方法多是矛盾的。因此,須要一種方式來給咱們指明方向:到底應該採用哪一種或哪些方式來優化模型。咱們將這種方式稱爲機器學習診斷(Machine Learning Diagnostics)。機器學習診斷是一種測試法,可以深刻了解某種算法究竟是否有用。這一般也可以告訴咱們,要想改進一種算法的效果,什麼樣的嘗試纔是有意義的,從而節省時間,減小沒必要要的嘗試。
當咱們肯定學習算法的參數的時候,咱們考慮的是選擇使訓練偏差最小化的參數。但咱們已經知道(見3.1 underfitting and overfitting ),僅僅是由於這個假設具備很小的訓練偏差,並不能說明它就必定是一個好的假設函數,可能該假設函數會過擬合,泛化能力弱。
該如何判斷一個假設函數是過擬合的呢?對於簡單的例子,能夠對假設函數 h(x) 進行畫圖 而後觀察圖形趨勢。可是,特徵量較多時(大於2),畫圖就很難實現。所以,咱們須要另外一種方法來評估咱們的假設函數。以下給出了一種評估假設函數的標準方法:
假設咱們有這樣一組數據組(如圖6-1),咱們要作的是將這些數據分紅兩部分: 訓練集和測試集。一種典型的分割方法是按照7:3的比例,將70%的數據做爲訓練集,30%的數據做爲測試集。這裏默認原有數據集是無序的(隨機的),因此咱們選擇前70%做爲訓練集,後30%做爲測試集,但若是原數據集是有序的,咱們應該隨機選擇出7:3的數據集分別做爲訓練集和測試集。
圖6-1 大小爲10的數據集及其劃分
所以,典型的訓練和測試方案以下:
其中Jtest(θ) 爲測試集上的平均平方偏差(average square error),mtest爲測試集的大小。
若是咱們使用線性迴歸,test set error 則爲
另外一種定義Logistics迴歸的偏差是誤分類率(misclassification error)或稱0/1錯分率(0/1 misclassification).
如何選擇正則化參數的大小和多項式的次數是經常面臨的問題,稱之爲模型選擇問題。咱們已經屢次接觸到過擬合現象,在過擬合的狀況中,參數很是擬合訓練集,那麼模型對於相同數據組預測集的預測偏差不可以用來推廣到通常狀況的,便是不能做爲實際的泛化偏差。也就是不能說明你的假設對於新樣本的效果。
下面咱們來考慮模型選擇問題,假如要選擇能最好地擬合數據的多項式次數,具體地,咱們在次數爲1到10之間應該如何作出選擇。
d表示應該選擇的多項式次數。因此,彷佛除了要肯定的參數θ以外,咱們一樣須要用數據集來肯定這個多項式的次數d。
那麼咱們能夠這樣作:
以此類推,最後獲得θ10
接下來對全部這些模型,求出測試集偏差
接下來爲了肯定選擇哪個模型最好,即哪個對應的測試集偏差最小。對於這個例子,咱們假設最終選擇了五次多項式模型。
肯定模型後,如今咱們想知道,這個模型能不能很好地推廣到新樣本。咱們能夠觀察這個五次多項式假設模型對測試集的擬合狀況,但這裏有一個問題是:這樣作仍然不能公平地說明,個人假設推廣到通常時的效果。其緣由在於,咱們剛纔是使用的測試集和假設擬合來獲得的多項式次數d 這個參數,這也就是說,咱們選擇了一個可以最好地擬合測試集的參數d的值。所以,咱們的參數向量θ5在擬合測試集時的結果極可能致使一個比實際泛化偏差更完美的預測結果。換言之,咱們是找了一個最能擬合測試集的參數d,所以我再用測試集來評價咱們的模型就顯得不公平了。
爲了解決這一問題,在模型選擇中,若是咱們想要評價某個假設,咱們一般採用如下的方法:給定某個數據集,和剛纔將數據分爲訓練和測試集不一樣的是,咱們要將其分爲三段:
咱們隨之也能夠定義訓練偏差,交叉驗證偏差和測試偏差以下:
所以,咱們按以下方式選擇模型:
1. Minimize cost function for each of the models as before
2. Test these hypothesis on the cross validation set to generate the cross validation error
3. Pick the hypothesis with the lowest cross validation error. e.g. pick θ5
4. Finally,Estimate generalization error of model using the test set
值得注意的是,在現在的機器學習應用中, 也有不少人是用測試集來選擇模型, 而後又一樣的測試集來評價模型的表現報告測試偏差,看起來好像還能獲得比較不錯的泛化偏差。若是有不少不少測試集的話,這也許還能行得通,不然獲得的測試偏差很大程度要比實際的泛化偏差好。所以最佳作法仍是把數據分紅訓練集、驗證集、測試集。
如圖6-2,當運行一個學習算法時,若是這個算法的表現不理想,那麼多半是出現兩種狀況,要麼是誤差比較大(欠擬合),要麼是方差比較大(過擬合),能判斷出現的狀況是這兩種狀況中的哪種很是重要,由於它是一個頗有效的指示器,告訴咱們能夠改進算法的最有效的方法和途徑。
圖6-2 不一樣模型的擬合狀況
如今咱們已經掌握了訓練集,驗證集和測試集的概念。咱們就能更好地理解誤差和方差的問題。具體來講,咱們沿用以前所使用的訓練集偏差和驗證集偏差的定義也就是平方偏差,畫出圖6-3.
圖6-3 多項式次數與偏差的關係
d等於1是用線性函數來進行擬合,而在最右邊的這個圖表示更高次數的多項式的擬合狀況。隨着咱們增大多項式的次數,咱們將對訓練集擬合得愈來愈好,因此若是d等於1時 對應着一個比較大的訓練偏差,而若是咱們的多項式次數很高時 咱們的訓練偏差就會很小 甚至可能等於0 由於可能很是擬合訓練集。因此,當咱們增大多項式次數時,咱們不難發現訓練偏差明顯降低。
接下來咱們再看交叉驗證偏差,若是d等於1,意味着用一個很簡單的函數來擬合數據,此時咱們不能很好地擬合訓練集(欠擬合),咱們會獲得一個較大的交叉驗證偏差,而若是咱們用一箇中等大小的多項式次數來擬合時,如d等於2,那麼咱們會獲得一個更小的交叉驗證偏差,由於咱們找了一個可以更好擬合數據的次數。可是,若是次數d太大,好比說d的值取爲4 ,那麼咱們又過擬合了,咱們又會獲得一個較大的交叉驗證偏差。
具體來講 假設咱們得出了一個學習算法,而這個算法並無表現地如指望那麼好,咱們應該判斷此時的學習算法是正處於高誤差的問題仍是高方差的問題。
咱們知道,算法正則化能夠有效地防止過擬合。但正則化跟算法的誤差和方差又有什麼關係呢?對於以下正則化的線性迴歸模型
咱們分析如下三種情形:
圖6-4 不一樣λ取值的擬合狀況
如今咱們能夠按照以下方式選擇出一個最合適的正則化參數 λ:
其中:
與多項式次數與偏差相似,咱們能夠畫出λ與偏差的函數關係,如圖6-5所示
圖6-5 λ與偏差的關係
有時咱們須要檢查學習算法運行是否一切正常,或者但願改進算法的表現或效果,那麼學習曲線(Learning Curves)就是一種很好的工具。而且,咱們可使用學習曲線來判斷某一個學習算法是否處於誤差,方差問題或是兩者皆有。下面咱們就來介紹學習曲線。
學習曲線和圖6-5相似,它們的區別在於學習曲線是以訓練集的大小m爲橫座標。縱座標仍然是訓練集偏差Jtrain和交叉檢驗偏差Jcv。
通常狀況下的學習曲線如圖6-7所示:
圖6-7 通常狀況下的學習曲線
當學習算法是高誤差時,如圖6-8所示,此時:
因此,在高誤差的狀況下,增大訓練集每每不起做用。
圖6-8 高誤差時的學習曲線
當學習算法是高方差時,如圖6-9所示,此時:
因此,在高方差的狀況下,增大訓練集一般是有效的(減小過擬合)。
圖6-9 高方差時的學習曲線
通過了上面的分析,如今咱們對調試學習算法的策略進行總結
對於神經網絡而言,咱們須要針對不一樣的問題設計不一樣的網絡結構,一般從下面兩種角度考慮:
一般而言,選擇一層隱藏層或許是比較好的選擇。固然,在應用神經網路時也應將已有數據集劃分爲訓練集,交叉檢驗集和測試集。