1. 程式人生 > >(五)用正則化(Regularization)來解決過擬合

(五)用正則化(Regularization)來解決過擬合

1 過擬合

過擬合就是訓練模型的過程中,模型過度擬合訓練資料,而不能很好的泛化到測試資料集上。出現over-fitting的原因是多方面的:

1) 訓練資料過少,資料量與資料噪聲是成反比的,少量資料導致噪聲很大

2 )特徵數目過多導致模型過於複雜,如下面的圖所示:

看上圖中的多項式迴歸(Polynomial regression),左邊為模型複雜度很低,右邊的模型複雜度就過高,而中間的模型為比較合適的模型,對於Logistic有同樣的情況

2)如何避免過擬合

1) 控制特徵的數目,可以通過特徵組合,或者模型選擇演算法

2)Regularization,保持所有特徵,但是減小每個特徵的引數向量θ的大小,使其對分類y所做的共享很小

下面來詳細分析正則化

來看多項式擬合的問題,對於右圖複雜的模型,只需控制θ3與θ4的大小,即可使得模型達到與作圖類似的結果,下面引入線性迴歸的L2正則的公式

如上過程就是正則化的過程,注意正則化是不帶θ0的,其實帶不帶在實際運用中只會有很小的差異,所以不必在意,現在只需要控制λ的大小,當λ很大時,θ1到θn就會很小,即達到了約束數量龐大的特徵的目的。

若選擇過大的λ,會使得引數向量θ非常小,從而只剩下θ0,使得模型看起來像一條直線

而且,模型會欠擬合,梯度下降也不會收斂,而λ的選擇將在特徵選擇中講到

帶有正則化項的梯度下降演算法,首先要特殊處理θ0,

關於Normal Equation 的正則化

並且有一個不錯的訊息就是括號中的矩陣必定為可逆的

Logistic的正則化

首先看L2正則

其正則化的Gradient Descent形式:

 3 正則化的一些概念

1)概念

  L0正則化的值是模型引數中非零引數的個數。

  L1正則化表示各個引數絕對值之和。

  L2正則化標識各個引數的平方的和的開方值。

2)正則化後會導致引數稀疏,一個好處是可以簡化模型,避免過擬合。因為一個模型中真正重要的引數可能並不多,如果考慮所有的引數起作用,那麼可以對訓練資料可以預測的很好,但是對測試資料就只能呵呵了。另一個好處是引數變少可以使整個模型獲得更好的可解釋性。

且引數越小,模型就會越簡單,這是因為越複雜的模型,越是會嘗試對所有的樣本進行擬合,甚至包括一些異常樣本點,這就容易造成在較小的區間裡預測值產生較大的波動,這種較大的波動也反映了在這個區間裡的導數很大,而只有較大的引數值才能產生較大的導數。因此複雜的模型,其引數值會比較大。

3)三種正則概述

-》L0正則化

根據上面的討論,稀疏的引數可以防止過擬合,因此用L0範數(非零引數的個數)來做正則化項是可以防止過擬合的。

從直觀上看,利用非零引數的個數,可以很好的來選擇特徵,實現特徵稀疏的效果,具體操作時選擇引數非零的特徵即可。但因為L0正則化很難求解,是個NP難問題,因此一般採用L1正則化。L1正則化是L0正則化的最優凸近似,比L0容易求解,並且也可以實現稀疏的效果。

-》L1正則化

L1正則化在實際中往往替代L0正則化,來防止過擬合。在江湖中也人稱Lasso。

L1正則化之所以可以防止過擬合,是因為L1範數就是各個引數的絕對值相加得到的,我們前面討論了,引數值大小和模型複雜度是成正比的。因此複雜的模型,其L1範數就大,最終導致損失函式就大,說明這個模型就不夠好。

 -》L2正則化

L2正則化可以防止過擬合的原因和L1正則化一樣,只是形式不太一樣。

L2範數是各引數的平方和再求平方根,我們讓L2範數的正則項最小,可以使W的每個元素都很小,都接近於0。但與L1範數不一樣的是,它不會是每個元素為0,而只是接近於0。越小的引數說明模型越簡單,越簡單的模型越不容易產生過擬合現象。

L2正則化江湖人稱Ridge,也稱“嶺迴歸”

4)幾何解釋

我們考慮兩維的情況,在(w1, w2)平面上可以畫出目標函式的等高線,而約束條件則成為平面上半徑為C的一個 norm ball 。等高線與 norm ball 首次相交的地方就是最優解:

可以看到,L1-ball 與L2-ball 的不同就在於L1在和每個座標軸相交的地方都有“角”出現,有很大的機率等高線會和L1-ball在四個角,也就是座標軸上相遇,座標軸上就可以產生稀疏,因為某一維可以表示為0。而等高線與L2-ball在座標軸上相遇的概率就比較小了。

總結:L1會趨向於產生少量的特徵,而其他的特徵都是0,而L2會選擇更多的特徵,這些特徵都會接近於0。Lasso在特徵選擇時候非常有用,而Ridge就只是一種規則化而已。在所有特徵中只有少數特徵起重要作用的情況下,選擇Lasso比較合適,因為它能自動選擇特徵。而如果所有特徵中,大部分特徵都能起作用,而且起的作用很平均,那麼使用Ridge也許更合適。

 參考:1) NG講義

   2) http://blog.csdn.net/zouxy09/article/details/24971995/