1. 程式人生 > >Andrew Ng 機器學習筆記 10 :評價學習演算法

Andrew Ng 機器學習筆記 10 :評價學習演算法

評估假設函式

為了確保我們可以評估我們的假設函式,我們要做的是將這些資料進行分組,將所有資料按照7:3的比例劃分,是一種常見的劃分比例。

  • 第一部分(70%)作為訓練集(Training Set)
  • 第二部分(30%)作為測試集(Test Set)

線性迴歸中:

  1. 使用70%的訓練集資料進行學習,得到最小化訓練誤差J(θ)。
  2. 取出學習得到的引數θ,帶入到Jtest(θ),計算測試誤差:

(θ)=12mtest∑i=1mtest(hθ(xtest(i))−ytest(i))2" role="presentation"> J t
e s t ( θ ) = 1 2 m t e s t i = 1 m t e s t ( h θ ( x t e s t ( i ) ) y t e s t ( i ) ) 2

這實際上是測試集平方誤差的平均值。

分類問題中:

在分類問題中的測試誤差 J t e s t ( θ ) 其實也被稱作誤分類率(也被稱為0/1錯分率),表示預測到的正確或錯誤樣本的情況:

e r r ( h θ ( x ) , y ) = { = 1     i f   h θ ( x ) 0.5 ,   y = 0   o r   i f   h θ ( x ) 0.5 ,   y = 1 = 0   o t h e r w i s e

模型選擇

假如你想要確定對於某組資料最合適的多項式次數是幾次,怎樣選用正確的特徵來構造學習演算法,這些問題我們稱之為”模型選擇問題“。

  • 在模型選擇中,通常將資料集分為三段:訓練集、交叉驗證集(cross validation set)、測試集。
  • 一種典型的分割比例是:訓練集60%,交叉驗證集20%,測試集20%。

我們可以得到 訓練集/交叉驗證集/測試集 的誤差:

模型選擇問題,即使用交叉驗證集來選擇合適的模型:

  1. 通過使用訓練集對每一個假設函式依次去求最小化的代價函式 m i n J ( θ ) ,並求得對應的引數向量 θ ( d )
  2. 交叉驗證集中測試這些假設的表現,測出 J c v 來看看這些假設在交叉驗證集中表現如何。
  3. 選擇交叉驗證集誤差最小的那個假設模型。
  4. 使用測試集來評價模型的表現。

正則化引數λ對假設函式的影響

演算法正則化可以有效地防止過擬合,通常的做法是選取一系列要嘗試的λ值,可能從0.01,0.02,0.04開始,一直試下去,通常會將步長設為2倍的速度增長,直到一個比較大的值。

  • 選用第一個模型,也就是 λ = 0 ,使用 θ ( 1 ) 來表示第一個引數向量 θ
  • 然後再取第二個模型 λ = 0.01 ,最小化代價方差,得到引數向量 θ ( 2 )
  • 以此類推,一直到最後一個 λ = 10 λ = 10.24 的模型對應的 θ ( 12 )
  • 用交叉驗證集來評價這些假設引數,測出每一個引數 θ 在交叉驗證集上的評價誤差平方和,然後選取這12個模型中交叉驗證集誤差最小的那個模型作為最終選擇。

λ 在訓練集上的變化

  • 當λ的取值很小時,對訓練集的擬合相對較好,因為沒有使用正則化。
  • 而如果λ的值很大時,將處於高偏差問題,不能對訓練集很好地擬合,訓練集誤差 J t r a i n ( θ ) 的值會趨於上升。

λ在交叉驗證集上的變化

  • 當λ的值取得很大時,會處於欠擬合問題。這對應著偏差問題,此時交叉驗證集誤差將會很大。
  • 當λ值取得很小,會對資料過度擬合,交叉驗證集誤差也會很大。
  • 這就是當改變正則化引數λ的值時,交叉驗證集誤差和訓練集誤差隨之發生的變化。當然,在中間取的某個λ的值,表現得剛好合適,這種情況下表現最好,交叉驗證集誤差或者測試集誤差都很小。

學習曲線(Learning Curves)

繪製學習曲線非常有用,可以判斷某一個學習演算法是否處於偏差方差問題,或者二者皆有。

高偏差下的學習曲線

假如你的假設處於高偏差問題,當樣本數量增多的時候,你不難發現用來擬合這些資料的直線相較於之前不會變化太大。

所以,如果你繪製出交叉驗證集誤差,應該是這個樣子:

  • 最左邊表示訓練集樣本容量很小,比如說只有一組樣本,那麼表現當然很不好;
  • 當達到某一個容量值的時候,你就會找到那條最有可能擬合數據的那條直線,並且此時即便你繼續增大訓練集的樣本容量m,你基本上還是會得到一條差不多的直線。因此交叉驗證集誤差將會很快變為水平而不再變化。
  • 同樣,訓練誤差一開始也是很小的,而在高偏差的情形中,你會發現訓練集誤差會逐漸增大,一直趨於接近交叉驗證集誤差,這是因為你的引數很少。但當m很大的時候,資料太多,此時訓練集和交叉驗證集的預測結果將會非常接近。
  • 這就是當你的學習演算法處於高偏差情形時學習曲線的大致走向。
  • 高偏差的情形反映出的問題是交叉驗證集和訓練集誤差都很大,也就是說,你最終會得到一個值比較大的 J c v ( θ ) J t r a i n ( θ )

高方差下的學習曲線

  • 處於高方差的時候,如果訓練集樣本容量很小時,訓練集誤差 J t r a i n ( θ ) 將會很小。
  • 隨著訓練集樣本容量的增大,