過擬合解決方案之正則化

2022-08-17 04:45:09 字數 3129 閱讀 6986

1.過擬合問題

對於過擬合問題,通常原因是模型選擇太過複雜,也有可能是訓練資料太少。對於模型太複雜的情況,我們一般有如下考慮:一是通過分析刪除部分特徵(比如重複多餘的特徵或者對輸出值貢獻不太大的特徵),但是這樣有可能會損失一部分資訊。所以,我們可以通過正則化的方法來降低引數值,從而避免過擬合問題。對於過擬合問題的詳細描述,可以檢視我的另一篇部落格機器學習之欠擬合與過擬合。

2.正則化

回顧一下,在回歸問題中,在確定模型之後,要根據該損失函式找出使得損失函式最小的引數矩陣。在整個回歸過程中,最為重要的一步是確定回歸模型。通常情況下,如果選擇的模型太簡單,就會欠擬合。如果模型選擇太複雜,就會過擬合。正則化可以很好地解決之一問題,通過對某些引數進行「懲罰」,就可以達到降低引數值的目的。正則化的方法有很多,這裡僅介紹l1正則化和l2正則化,對應的分別是lasson回歸和ridge回歸。正則化就是在損失函式中加入正則項(用\(\omega(\theta)\)表示),l1正則對應的正則項為:\(l1 = \lambda\sum_^n|\theta_i|\),l2對應的正則項是:\(l2 = \lambda\sum_^n\theta_i^2\)。例如線性回歸的正則化損失函式為:

\[j(\theta)= \sum_^m (h_\theta(x^)-y^)^2 + \omega(\theta)\tag

\]邏輯回歸的正則化損失函式為:

\[j(\theta)= \dfrac\sum_^m[-y^ln(h_\theta(x^))-(1-y^)ln(1-h_\theta(x^))] +\omega(\theta) \tag

\]3.l1正則與l2正則的不同

3.1l1正則

在介紹l1正則之前,我們有必要了解一下l0範數,l0範數表示向量中非零元素的個數,其數學表示式為:

\[||x||_0 = \sum_^ x_j \neq 0?1:0 \tag

\]如果我們使用l0範數作為正則項(即\(\omega(\theta)=\lambda||\theta||_0\)),那就說明我們希望權向量\(w\)當中的大部分元素都是零。l0正則更通俗的解釋是:如果要增加模型複雜度來加強模型的表達能力,對於增加的每個引數,我們都要進行這樣的考量----該引數不為0時對初始損失函式(即不加正則項的損失函式)的降低程度是否達到\(\lambda\)。如果不足\(\lambda\),我們認為增加這樣的複雜度是得不償失的。通過l0正則,可以使模型稀疏化,並且在一定程度上實現了特徵選擇(如果某個引數為0,相當於摒棄了該引數對應的樣本特徵)。但是由於l0正則項不連續、不可導、也不是凸函式,所以最小化l0正則損失函式是乙個np問題,相當複雜。所以我們需要更為有效的方式----l1正則。l1範數是l0範數最優凸近似,比l0範數更容易求得最優解。所以我們可以用l1正則來近似代替l0正則。如果採用l1正則,那麼損失函式就變為:

\[j(\theta) =j(\theta)_0 + \dfrac\lambda\sum_^n|\theta_i|) \tag

\]對引數求偏導數的結果就是:

\[\dfrac = \dfrac,\dfrac = \dfrac + \dfrac\lambda sgn(\theta_i)\quad (i = 1,2,\dots,n) \tag

\]在梯度下降法中,對應的引數更新方式為:

\[\theta_0 = \theta_0 -\alpha\dfrac,\theta_i = \theta_i - \alpha\dfrac -\dfrac \lambda sgn(\theta_i)) \quad (i = 1,2,\dots,n) \tag

\]上述各式中,\(j(\theta_0)\)表示初始損失函式(即未新增正則項的損失函式),sgn為符號函式。正則項和\(\theta_0\)無關是因為\(\theta_0\)與任何特徵項都無關(即不對應任何\(x_i\)),所以\(\theta_0\)對過擬合的影響並不大,也就不需要在正則項中引入。

3.2l2正則

l0和l1正則都會使引數矩陣變得稀疏(即存在很多為0的元素),對樣本特徵有所捨棄,雖然對減小方差很有作用,但通常這會使偏差變大。那麼有沒有什麼方法可以使方差變小的同時,偏差又不會變得太大呢?l2正則就可以解決這一問題。l2範數的數學表示式的直觀解釋是引數的平方的\(\lambda\)倍求和,如果採用l2範數作為正則項,這會讓部分引數值非常小,接近於0,但並不是等於0。這就保證了不會捨棄樣本特徵,只是讓特徵對應的權重變小。同樣可以起到減小方差的作用,並且偏差不會變得太大。如果採用l1正則,那麼損失函式就變為:

\[j(\theta) =j(\theta)_0 + \dfrac\lambda\sum_^n\theta_i^2 \tag

\]對引數求偏導數的結果就是:

\[\dfrac = \dfrac,\dfrac = \dfrac + \dfrac\lambda \theta_i \quad (i = 1,2,\dots,n) \tag

\]在梯度下降法中,對應的引數更新方式為:

\[\theta_0 = \theta_0 -\alpha\dfrac,\theta_i = \theta_i - \dfrac -\dfrac 2\lambda \theta_i \quad (i = 1,2,\dots,n) \tag

\]上述各式中,\(j(\theta_0)\)表示初始損失函式(即未新增正則項的損失函式)。(不要糾結於係數,m和2m都是一樣的,只是方便求偏導時約去1/2)。

對於線性回歸來說,初始損失函式\(j(\theta)_0 =\dfrac\sum_\limits^m(y^-h_\theta(x^))^2\)。

加入正則項後,最小二乘法求解結果為:\(\theta = \left(x^tx+\lambda \left[\begin 0 \\ &1 \\ & & 1 \\ & & &\ddots \\ & & & & 1 \end \right]\right)^x^ty\)。

對於邏輯回歸來說,初始損失函式\(j(\theta)_0= \dfrac\sum_^m[-yln(h_\theta(x))-(1-y)ln(1-h_\theta(x))]\)。

4.總結

對於過擬合問題,我們可以採用正則化來解決。在機器學習中,我們一般會使用l2正則。在使用正則化的時候,要注意正則化引數\(\lambda\)的選擇。如果\(\lambda\)太小,那麼正則項幾乎就沒有起到作用,也就無法解決過擬合問題;如果\(\lambda\)太大,這時除了\(\theta_0\)以外的其他引數\(\theta_i(i = 1,2,\dots,n)\)就會很小,最後得到的模型幾乎就是一條水平直線,會出現欠擬合問題。

過擬合解決方案

方法一 儘量減少選取變數的數量 具體而言,我們可以人工檢查每一項變數,並以此來確定哪些變數更為重要,然後,保留那些更為重要的特徵變數。至於,哪些變數應該捨棄,我們以後在討論,這會涉及到模型選擇演算法,這種演算法是可以自動選擇採用哪些特徵變數,自動捨棄不需要的變數。這類做法非常有效,但是其缺點是當你捨...

過擬合(原因 解決方案 原理)

標準定義 給定乙個假設空間h,乙個假設h屬於h,如果存在其他的假設h 屬於h,使得在訓練樣例上h的錯誤率比h 小,但在整個例項分布上h 比h的錯誤率小,那麼就說假設h過度擬合訓練資料。1 建模樣本抽取錯誤,包括 但不限於 樣本數量太少,抽樣方法錯誤,抽樣時沒有足夠正確考慮業務場景或業務特點,等等導致...

過擬合問題和解決方案

模型越複雜,模型對訓練集的測試效果越好,但對測試集的測試效果很差,此時稱為過擬合。如樣本是9個點,當多項式回歸是2次或3次時,擬合效果不錯但仍有誤差 當多項式是9次時,可以計算出一條曲線完美通過所有樣本點,但這種方式顯然把樣本的噪音全部擬合出來了,模型放到訓練集時效果很差。對此,有正則化 加懲罰項 ...