❶ 神經網路:欠擬合和過擬合
以我們前面講述的線性回歸為例,比如我們在訓練集上訓練出最優的模型,但是當我們將其使用到測試集時,測試的誤差很大,我們該怎麼辦?
我們一般採取的措施主要包括以下6種:
增加訓練樣本的數目(該方法適用於過擬合現象時,解決高方差。一般都是有效的,但是代價較大,如果下面的方法有效,可以優先採用下面的方式);
嘗試減少特徵的數量(該方法適用於過擬合現象時,解決高方差);
嘗試獲得更多的特徵(該方法適用於欠擬合現象時,解決高偏差);
嘗試增加多項式特徵(該方法適用於欠擬合現象時,解決高偏差);
嘗試減小正則化程度λ(該方法適用於欠擬合現象時,解決高偏差);
嘗試增加正則化程度λ(該方法適用於過擬合現象時,解決高方差);
上面的方法不是隨機選擇,是在合適的情況下(過擬合和欠擬合)選擇合適的方法,對於怎麼判斷一個模型是過擬合還是欠擬合,我們會在下面給出一些機器學習診斷法。
如何對一個假設進行評估?
我們前面在講述線性回歸和邏輯回歸時,只是注重針對訓練數據集訓練出一個最優的參數,但是我們訓練處的模型對於測試集的性能好壞我們沒有進行判斷,我們只是訓練的模型使得損失函數最小,我們前面也討論過,在訓練數據集上損失函數最小並不能代表對於給定的測試數據,測試數據的評估非常准確,比如過擬合現象發生時,那我們如何評價一個假設的好壞呢?
主要的方法包括兩種:
1.對於簡答的模型,我們可以採用將hθ(x)的圖像畫出,來判斷模型的好壞,但是這種方法對於特徵變數不是一個時,這種方法很難實現或者不可能實現。例如我們曾經看到過這樣的圖像,可以通過hθ(x)的圖像明顯可以看出,該假設存在著過擬合現象。
2.另一種評估假設的方法為:將原來的數據集分為訓練集和測試集,一般我們是從原來的數據集中隨機選取(保證訓練集和測試集中都含有各種類型的數據)70%的數據作為訓練集,剩下的30%的樣本作為測試集。同時這種將原來數據集劃分為訓練集和測試集的方法可以用於幫助特徵選擇、多項式次數的選擇以及正則化參數的選擇等。數據集劃分的過程如下:
以上面數據集為例,選取前7個為訓練集,後3個為測試集。用前7個數據集做訓練訓練出一個最優的模型,評價這個訓練出的模型的好壞可以使用測試集來進行判斷,判斷的標准可以使用測試集的損失函數來進行定量的衡量。
對於回歸問題,測試集的損失函數計算公式如下:
Jtest(θ)=12mtest∑i=1mtest(hθ(x(i)test)−y(i)test)2
而對於分類問題,測試集的損失函數計算公式如下:
這種測量方式,如果測試樣本損失函數很大,則代表訓練出的模型泛化能力不好。
對於分類問題,還有另外一種測量的方式,稱為誤分類率,它對於每一個測試樣本進行計算,計算的公式如下:
error=1mtest∑i=1mtesterr(hθ(x(i)test),y(i)))
其中,
模型的選擇和交叉驗證集:
上述我們是在模型選擇好了之後進行訓練的,也就是上述我們都是確定了假設進行訓練的,但是我們怎麼對模型進行選擇呢,這一節我們來討論一下模型的選擇,以及和交叉驗證集的關系。
模型選擇主要包括以下內容:1.怎樣選擇正確的特徵來構造學習演算法?2.怎樣選擇學習演算法中正則化參數λ?等問題。
首先我們結合一個例子來引出模型的選擇和驗證集:
例如我們有上面十個模型,我們對於給定的數據集選擇哪種模型呢?按照我們上面討論的將數據集劃分為訓練集和測試集,使用訓練集對上述模型進行訓練,然後使用測試集來進行選擇最佳的模型,比如最優的為第五個模型,但是這並不能衡量這個模型的泛化能力,因為測試集已經用於選擇最優的模型,這個模型對於其他未知數據的泛化能力還是未知的。
所以針對上述問題我們可以將數據集劃分為訓練集、交叉驗證集和測試集。一般情況下,訓練集占總樣本的60%,交叉驗證集佔20%,測試集佔20%。其中訓練集用於訓練,交叉驗證集用於選擇最優的模型,測試集用於測試模型的泛化能力。
模型選擇方法為:
1. 使用訓練集訓練10個模型;
2. 用10個模型分別對交叉驗證集計算出交叉驗證誤差(代價函數的值),其中計算公式為:
3. 選取交叉驗證誤差最小的模型作為選擇的模型;
4. 用測試集對選擇出的模型計算泛化能力(測試樣本的損失函數),計算公式如上文中討論的一樣。
假設對診斷偏差和方差(即過擬合還是欠擬合)的影響
利用上述方法學習到的演算法性能不好一般會有兩種情況:
1.會出現過擬合,也就是所謂的方差很大;
2.會出現欠擬合,也就是所謂的偏差很大;
首先應該確定演算法性能的不好,是由哪種原因造成的,然後針對不同的情況採取不同的改進策略,可以有效的改進當前的演算法。下面我們來講述一下怎麼判斷是過擬合還是欠擬合。
以下面例子為例,來進行討論:
我們可以通過繪制出訓練集的代價函數和交叉驗證驗證集的代價函數與方次d的關系來進行判斷是上述哪種情況的一種:
對於訓練集,當d較小時,模型的擬合程度不是很好,所以訓練樣本集的代價函數比較大;隨著d的增加,模型的擬合程度不斷提高,代價函數不斷的減小;
對於交叉驗證集,由於d比較小時,模型的擬合程度不是很好,對於新來的樣本預測結果會偏差很大,所以交叉驗證集的代價函數在初始階段會很大,而隨著d的增加會出現一個比較好的方次d,使得模型的擬合程度最佳,同時對於新來的樣本泛化能力很強,所以會有一個代價函數最小的點出現(該轉折點即是模型開始由欠擬合轉向過擬合的點),隨後隨著d的增加,由於過擬合,會存在對新的樣本預測結果不良的現象,所以代價函數會逐漸增大。
當我們繪制出上述曲線時,我們就可以判斷出什麼時候是過擬合什麼時候欠擬合,判斷的標准如下:
1. 當訓練誤差與交叉驗證集誤差接近時,並且都很大時,該模型高偏差(欠擬合);
2. 當訓練誤差遠小於驗證集誤差時,並且訓練誤差很小時,該模型高方差(過擬合)。
判斷出該模型是過擬合或者欠擬合之後,然後使用上述提到的過擬合和欠擬合的解決方法,對演算法進行改進。
正則化對偏差和方差的影響
我們前面講述過正則化可以有效的處理過擬合現象,但是我們上述所說的處理過擬合是在合適的λ情況下,那麼λ值的大小對模型的性能是怎樣影響的呢?我們採用上述與方次d對性能的影響相同的方式來分析λ的值對性能的影響。
我們首先選擇一系列的λ值,通常λ的選擇是0~10之間呈現二倍關系的值(如:0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,5.26,5.12,10)
構建方式如下:
選擇λ的方法如下:
1.使用訓練集訓練處12個不同程度正則化模型;
2.用12個模型分別對交叉驗證集計算出交叉驗證誤差;
3.選擇得出交叉驗證誤差最小的模型;
4.運用步驟3選出的模型對測試集計算得出推廣誤差
我們同樣可以將訓練集和交叉驗證集模型的代價函數與λ的值繪制在一張圖上。對於訓練集、驗證集和測試集的代價函數計算公式為:
需要注意的是,當計算訓練集、交叉驗證集和測試集誤差時,不計算正則項,然後繪制出訓練集和交叉驗證集代價函數與λ值的關系,如下圖所示:
1. 當λ較小時,訓練誤差較小(過擬合)而交叉驗證集誤差較大;
2. 隨著λ的增加(從過擬合到欠擬合的過程),訓練集誤差逐漸增大(欠擬合),而交叉驗證集誤差則是先減小後增大。
學習曲線
學習曲線也是一種可以判斷演算法是否處於過擬合還是欠擬合的情況,學習曲線是將訓練集誤差和交叉驗證集誤差作為訓練集實例數量(m)的函數繪制的圖像。學習曲先不僅可以幫助我們是不是處於過擬合或者欠擬合,它還可以幫助我們判斷是否為了提高演算法的性能需要我們收集多的數據。
假設我們有100行數據,我們從第一行數據開始,逐漸增加數據進行訓練,得到每次訓練數據的代價函數值。當數據很少時,訓練模型能夠非常完美的擬合很少的數據,但是訓練出的模型卻不能泛化其他的數據,所以當數據很少時,訓練集的代價函數很小,但是交叉驗證集的代價函數很大,隨著樣本的增加,訓練集的代價函數逐漸增大,交叉驗證集的代價函數逐漸減小。繪制的曲線如下圖所示:
1. 如何用學習曲線識別欠擬合:
假設我們的模型處於欠擬合的情況下,擬合曲線如下圖所示:
我們可以看出,無論我們怎樣增加樣本數據,誤差都不會有很大改觀。同時在欠擬合的情況下,會出現隨著樣本的增加,訓練集代價函數和交叉驗證集代價函數都很大的情況,在這種情況下,就沒有必要花費時間在收集數據上了,同時這也是一種判斷模型是過擬合還是欠擬合的方法。
2. 如何使用學習曲線識別過擬合:
假設我們有一個非常高次的多項式模型(比如最高次項達到100次),並且正則化非常小時,從下圖可以看出,當交叉驗證集誤差遠大於訓練集誤差時,往訓練集增加更多數據可以提高模型的效果。
對於過擬合現象時,會出現訓練集代價函數一直都很小(雖然是增加的趨勢),但是驗證集的損失函數會很大(雖然是減小的趨勢),同時訓練集代價函數和驗證集代價函數相差會很大,可以使用這種方法來判斷該模型處於過擬合階段。
對於神經網路我們在討論一下過擬合和欠擬合現象:
使用較小的神經網路,類似於參數較少的情況,容易導致高偏差和欠擬合,但是計算代價小;使用較大的神經網路,類似於參數較多的情況,容易導致高方差和過擬合,雖然計算代價比較大,但是可以通過正則化手段來調整而更加適應數據。
對於 神經網路的模型選擇 :我們一般選擇較大的神經網路並採用正則化處理,而不會選擇較小的神經網路。
對於 神經網路隱藏層的層數選擇 ,一般我們從一層開始逐漸增加層數,為了更好的選擇出最佳的層數,可以針對不同隱藏層層數的神經網路進行訓練,然後選擇交叉驗證集代價函數最小的神經網路。