Stanford機器學習筆記-6. 學習模型的評估和選擇

6. 學習模型的評估與選擇

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迴歸神經網絡),可是當要解決一個實際問題時,如下問題是咱們要考慮的:

  • 如何知道咱們所設計的模型是有用的或者較好的?
  • 當模型應用的不理想時,咱們應該從哪些方面進行改進?
  • 如何針對具體問題選擇學習模型?

下面將針對上述問題提出建議。

6.1 如何調試學習算法

如今假設咱們已經實現了以下的一個正則化的線性迴歸模型用於預測房價

根據已有的訓練集,咱們已經將該模型訓練完畢。可是,當咱們須要在新的數據集上進行房價的預測時,發現預測的結果和實際有很大的偏差。下面咱們應該作什麼?咱們能夠從下面的一些角度考慮:

  • 獲取更多的數據量
    • 有時數據量大並無幫助
    • 一般數據量越大,學習模型訓練得越好,可是即便這樣,也應該作一些初步實驗(見6.5節 學習曲線)來確保數據量越大,訓練越好。(若是一開始就用大量的數據來訓練模型,將會耗費大量的時間:收集數據,訓練模型)
  • 減小特徵量
    • 細心的從已有的特徵量中選出一個子集
    • 能夠手工選擇,也能夠用一些降維( dimensionality reduction)技術
  • 增長額外的特徵量
    • 有時並不起做用
    • 仔細考慮數據集,是否遺漏了一些重要的特徵量(可能花費較多的時間)
    • 添加的特徵量可能只是訓練集的特徵,不適合全體數據集,可能會過擬合
  • 添加多項式的特徵量
  • 減小正則化參數
  • 增長正則化參數

能夠發現,咱們彷佛有不少種方法來改善學習模型,可是,有些方法可能要花費不少時間(或許還不起做用),有些方法多是矛盾的。因此,須要一種方式來給咱們指明方向:到底應該採用哪一種或哪些方式來優化模型。咱們將這種方式稱爲機器學習診斷(Machine Learning Diagnostics)。機器學習診斷是一種測試法,可以深刻了解某種算法究竟是否有用。這一般也可以告訴咱們,要想改進一種算法的效果,什麼樣的嘗試纔是有意義的,從而節省時間,減小沒必要要的嘗試。

6.2 評估假設函數(Evaluating a hypothesis)

當咱們肯定學習算法的參數的時候,咱們考慮的是選擇使訓練偏差最小化的參數。但咱們已經知道(見3.1 underfitting and overfitting ),僅僅是由於這個假設具備很小的訓練偏差,並不能說明它就必定是一個好的假設函數,可能該假設函數會過擬合,泛化能力弱。

該如何判斷一個假設函數是過擬合的呢?對於簡單的例子,能夠對假設函數 h(x) 進行畫圖 而後觀察圖形趨勢。可是,特徵量較多時(大於2),畫圖就很難實現。所以,咱們須要另外一種方法來評估咱們的假設函數。以下給出了一種評估假設函數的標準方法:

假設咱們有這樣一組數據組(如圖6-1),咱們要作的是將這些數據分紅兩部分: 訓練集測試集。一種典型的分割方法是按照7:3的比例,將70%的數據做爲訓練集,30%的數據做爲測試集。這裏默認原有數據集是無序的(隨機的),因此咱們選擇前70%做爲訓練集,後30%做爲測試集,但若是原數據集是有序的,咱們應該隨機選擇出7:3的數據集分別做爲訓練集和測試集。

圖6-1 大小爲10的數據集及其劃分

所以,典型的訓練和測試方案以下:

  1. 用70%劃分獲得的訓練集來訓練模型:即最小化J(θ)
  2. 計算訓練後的模型在測試集上的偏差( test set error)。

其中Jtest(θ) 爲測試集上的平均平方偏差(average square error),mtest爲測試集的大小。

若是咱們使用線性迴歸,test set error 則爲

另外一種定義Logistics迴歸的偏差是誤分類率(misclassification error)或稱0/1錯分率(0/1 misclassification).

  1. 定義error function

  2. Test error is

6.3 模型選擇與訓練/驗證/測試集(Model selection and training/validation/test sets)

如何選擇正則化參數的大小和多項式的次數是經常面臨的問題,稱之爲模型選擇問題。咱們已經屢次接觸到過擬合現象,在過擬合的狀況中,參數很是擬合訓練集,那麼模型對於相同數據組預測集的預測偏差不可以用來推廣到通常狀況的,便是不能做爲實際的泛化偏差。也就是不能說明你的假設對於新樣本的效果。

下面咱們來考慮模型選擇問題,假如要選擇能最好地擬合數據的多項式次數,具體地,咱們在次數爲1到10之間應該如何作出選擇。

d表示應該選擇的多項式次數。因此,彷佛除了要肯定的參數θ以外,咱們一樣須要用數據集來肯定這個多項式的次數d。

  • d =1 (linear)
  • d=2 (quadratic)
  • ...
  • d=10

那麼咱們能夠這樣作:

  • 選擇第一個模型(d = 1),而後求訓練偏差的最小值,獲得一個參數向量θ 1
  • 選擇第二個模型(d = 2), 二次函數模型, 進行一樣的過程, 獲得另外一個參數向量θ 2 

以此類推,最後獲得θ10

接下來對全部這些模型,求出測試集偏差

  • Jtest1)
  • Jtest2)
  • ...
  • Jtest10)

接下來爲了肯定選擇哪個模型最好,即哪個對應的測試集偏差最小。對於這個例子,咱們假設最終選擇了五次多項式模型。

肯定模型後,如今咱們想知道,這個模型能不能很好地推廣到新樣本。咱們能夠觀察這個五次多項式假設模型對測試集的擬合狀況,但這裏有一個問題是:這樣作仍然不能公平地說明,個人假設推廣到通常時的效果。其緣由在於,咱們剛纔是使用的測試集和假設擬合來獲得的多項式次數d 這個參數,這也就是說,咱們選擇了一個可以最好地擬合測試集的參數d的值。所以,咱們的參數向量θ5在擬合測試集時的結果極可能致使一個比實際泛化偏差更完美的預測結果。換言之,咱們是找了一個最能擬合測試集的參數d,所以我再用測試集來評價咱們的模型就顯得不公平了。

爲了解決這一問題,在模型選擇中,若是咱們想要評價某個假設,咱們一般採用如下的方法:給定某個數據集,和剛纔將數據分爲訓練和測試集不一樣的是,咱們要將其分爲三段:

  • 訓練集 Training set (60%) - m values
  • 交叉檢驗集 Cross validation (CV) set (20%)mcv
  • 測試集 Test set (20%) mtest 

咱們隨之也能夠定義訓練偏差,交叉驗證偏差和測試偏差以下:

所以,咱們按以下方式選擇模型:

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.4 誤差與方差

6.4.1 Diagnosing bias vs. variance

如圖6-2,當運行一個學習算法時,若是這個算法的表現不理想,那麼多半是出現兩種狀況,要麼是誤差比較大(欠擬合),要麼是方差比較大(過擬合),能判斷出現的狀況是這兩種狀況中的哪種很是重要,由於它是一個頗有效的指示器,告訴咱們能夠改進算法的最有效的方法和途徑。

圖6-2 不一樣模型的擬合狀況

如今咱們已經掌握了訓練集,驗證集和測試集的概念。咱們就能更好地理解誤差和方差的問題。具體來講,咱們沿用以前所使用的訓練集偏差和驗證集偏差的定義也就是平方偏差,畫出圖6-3.

圖6-3 多項式次數與偏差的關係

d等於1是用線性函數來進行擬合,而在最右邊的這個圖表示更高次數的多項式的擬合狀況。隨着咱們增大多項式的次數,咱們將對訓練集擬合得愈來愈好,因此若是d等於1時 對應着一個比較大的訓練偏差,而若是咱們的多項式次數很高時 咱們的訓練偏差就會很小 甚至可能等於0 由於可能很是擬合訓練集。因此,當咱們增大多項式次數時,咱們不難發現訓練偏差明顯降低。

接下來咱們再看交叉驗證偏差,若是d等於1,意味着用一個很簡單的函數來擬合數據,此時咱們不能很好地擬合訓練集(欠擬合),咱們會獲得一個較大的交叉驗證偏差,而若是咱們用一箇中等大小的多項式次數來擬合時,如d等於2,那麼咱們會獲得一個更小的交叉驗證偏差,由於咱們找了一個可以更好擬合數據的次數。可是,若是次數d太大,好比說d的值取爲4 ,那麼咱們又過擬合了,咱們又會獲得一個較大的交叉驗證偏差。

具體來講 假設咱們得出了一個學習算法,而這個算法並無表現地如指望那麼好,咱們應該判斷此時的學習算法是正處於高誤差的問題仍是高方差的問題。

  • 當訓練偏差和交叉驗證偏差相近且都比較大時,即對應圖6-3曲線中的左端,對應的就是高誤差的問題
  • 相反地,當訓練偏差較小而交叉驗證偏差遠大於訓練偏差時,即對應圖6-3曲線右端,對應的是高方差的問題

6.4.2 正則化與誤差/方差(Regularization and bias/variance )

咱們知道,算法正則化能夠有效地防止過擬合。但正則化跟算法的誤差和方差又有什麼關係呢?對於以下正則化的線性迴歸模型

咱們分析如下三種情形:

  • 第一種情形是正則化參數λ取一個比較大的值,如等於10000,此時,全部這些參數θ將被大大懲罰,其結果是這些參數的值將近似等於0 而且假設模型 h(x) 的值將等於或者近似等於 。所以咱們最終獲得的假設函數應該近似是一條平滑的直線(如圖6-4-(1)),所以這個假設處於高誤差,對數據集欠擬合(underfit)。
  • 與之對應的另外一種狀況是λ值很小,好比λ=0,這種狀況下,若是咱們要擬合一個高階多項式,一般會處於高方差和過擬合(overfitting)的狀況(如圖6-4-(3))。由於λ的值等於0至關於沒有正則化項 所以會對假設過擬合。
  • 如圖6-4-(2),只有λ取不大不小的值時,纔會獲得一組對數據恰好擬合的參數值θ。

圖6-4 不一樣λ取值的擬合狀況

如今咱們能夠按照以下方式選擇出一個最合適的正則化參數 λ:

  1. 肯定λ可能的取值向量,一般爲[0,0.01,0.02,0.04,0.08,… ,10.24]
  2. 每個λ的可能取值對應一個模型,對每個模型進行訓練,使代價函數最小,獲得對應的參數θ。
  3. 對於每一個訓練後的模型,計算出其在交叉檢驗集上的偏差
  4. 取使最小的模型做爲咱們的模型,並將其應用於測試集,獲得測試偏差,並以此估計泛化偏差。

其中:

與多項式次數與偏差相似,咱們能夠畫出λ與偏差的函數關係,如圖6-5所示

圖6-5 λ與偏差的關係

6.5 學習曲線(Learning Curves)

有時咱們須要檢查學習算法運行是否一切正常,或者但願改進算法的表現或效果,那麼學習曲線(Learning Curves)就是一種很好的工具。而且,咱們可使用學習曲線來判斷某一個學習算法是否處於誤差,方差問題或是兩者皆有。下面咱們就來介紹學習曲線。

學習曲線和圖6-5相似,它們的區別在於學習曲線是以訓練集的大小m爲橫座標。縱座標仍然是訓練集偏差Jtrain和交叉檢驗偏差Jcv

通常狀況下的學習曲線如圖6-7所示:

  • 對於訓練集偏差而言,m越小,越容易擬合,偏差越小,換言之,J train隨m的增大而增大。
  • 對於交叉檢驗偏差而言,m越小,模型的泛化能力越弱,故偏差越大,換言之,J cv隨m的增大而減少。
  • 當m大到必定程度時,訓練集偏差和交叉檢驗偏差較接近且都比較小。

圖6-7 通常狀況下的學習曲線

當學習算法是高誤差時,如圖6-8所示,此時:

  • 對於訓練集偏差而言,當m很小時,偏差很小,但因爲它不能很好的擬合訓練集,隨後就會增加較快,達到一個較穩定的值。
  • 對於交叉檢驗偏差而言,當m很小時,算法的泛化能力很是弱,偏差很大,隨着m的增長,泛化能力稍有提高,偏差會有所減少,但因爲學習算法自己對訓練集偏差較大,故交叉檢驗偏差不會降低太多,最後穩定在一個較高的值。
  • 在m不太大時,訓練集偏差就和交叉檢驗偏差接近,但都比較大。

因此,在高誤差的狀況下,增大訓練集每每不起做用

圖6-8 高誤差時的學習曲線

當學習算法是高方差時,如圖6-9所示,此時:

  • 對於訓練集偏差而言,當m很小時,偏差很小,而且因爲算法能很好的擬合訓練集(過擬合),隨着m的增長,偏差只有少許增長(增長很慢)。
  • 對於交叉檢驗偏差而言,當m很小時,算法的泛化能力很是弱,偏差很大,隨着m的增長,泛化能力稍有提高,偏差會有所減少,但因爲學習算法過擬合,泛化能力有限,故交叉檢驗偏差不會降低太多,最後穩定在一個較高的值。
  • 在m較大時,訓練集偏差和交叉檢驗偏差也有必定的差距,此時訓練集偏差較小,而交叉檢驗集偏差較大。

因此,在高方差的狀況下,增大訓練集一般是有效的(減小過擬合)。

圖6-9 高方差時的學習曲線

6.6 調試學習算法

通過了上面的分析,如今咱們對調試學習算法的策略進行總結

  • Get more training examples --> helps to fix high variance
    • Not good if you have high bias
  • Smaller set of features --> fixes high variance (overfitting)
    • Not good if you have high bias
  • Try adding additional features --> fixes high bias (because hypothesis is too simple, make hypothesis more specific)
  • Add polynomial terms --> fixes high bias problem
  • Decreasing λ --> fixes high bias
  • Increases λ --> fixes high variance

對於神經網絡而言,咱們須要針對不一樣的問題設計不一樣的網絡結構,一般從下面兩種角度考慮:

  • 選擇一個較小的網絡
    • 較少的隱藏層(如1層)和較少的隱藏單元,適用於變量(特徵量)較少的狀況
    • 可能欠擬合,但計算代價較小
  • 選擇一個較大的網絡
    • 更多的隱藏層-須要咱們決定具體是多少層較好
    • 適用於變量較多的狀況,
    • 可能會過擬合,須要使用正則化來削弱過擬合
    • 計算代價更大

一般而言,選擇一層隱藏層或許是比較好的選擇。固然,在應用神經網路時也應將已有數據集劃分爲訓練集,交叉檢驗集和測試集。

相關文章
相關標籤/搜索