7、 正則化(Regularization)


7.1 過擬合的問題

  到現在為止,我們已經學習了幾種不同的學習算法,包括線性回歸和邏輯回歸,它們能夠有效地解決許多問題,但是當將它們應用到某些特定的機器學習應用時,會遇到過擬合(over-fitting)的問題,可能會導致它們效果很差。

  在這段視頻中,我將為你解釋什么是過度擬合問題,並且在此之后接下來的幾個視頻中,我們將談論一種稱為正則化(regularization)的技術,它可以改善或者減少過度擬合問題

如果我們有非常多的特征,我們通過學習得到的假設可能能夠非常好地適應訓練集(代價函數可能幾乎為0),但是可能會不能推廣到新的數據。

下圖是一個回歸問題的例子:

 

第一個模型是一個線性模型,欠擬合,不能很好地適應我們的訓練集;第三個模型是一個四次方的模型,過於強調擬合原始數據,而丟失了算法的本質:預測新數據。我們可以看出,若給出一個新的值使之預測,它將表現的很差,是過擬合,雖然能非常好地適應我們的訓練集但在新輸入變量進行預測時可能會效果不好;而中間的模型似乎最合適。

分類問題中也存在這樣的問題:

就以多項式理解,x$的次數越高,擬合的越好,但相應的預測的能力就可能變差。

問題是,如果我們發現了過擬合問題,應該如何處理?

  1. 丟棄一些不能幫助我們正確預測的特征。可以是手工選擇保留哪些特征,或者使用一些模型選擇的算法來幫忙(例如PCA)

  2. 正則化。 保留所有的特征,但是減少參數的大小(magnitude)。

7.2 代價函數

上面的回歸問題中如果我們的模型是: 

  我們可以從之前的事例中看出,正是那些高次項導致了過擬合的產生,所以如果我們能讓這些高次項的系數接近於0的話,我們就能很好的擬合了。

  所以我們要做的就是在一定程度上減小這些參數θ 的值,這就是正則化的基本方法。我們決定要減少θ3和θ4的大小,我們要做的便是修改代價函數,在其中θ3和θ4設置一點懲罰。這樣做的話,我們在嘗試最小化代價時也需要將這個懲罰納入考慮中,並最終導致選擇較小一些的θ3和θ4。 修改后的代價函數如下:

通過這樣的代價函數選擇出的θ3和θ4 對預測結果的影響就比之前要小許多。假如我們有非常多的特征,我們並不知道其中哪些特征我們要懲罰,我們將對所有的特征進行懲罰,並且讓代價函數最優化的軟件來選擇這些懲罰的程度。這樣的結果是得到了一個較為簡單的能防止過擬合問題的假設:

其中𝜆稱為正則化參數(Regularization Parameter)。 注:根據慣例,我們不對𝜃0   進行懲罰。經過正則化處理的模型與原模型的可能對比如下圖所示:

  如果選擇的正則化參數λ大,則會把所有的參數都最小化了,導致模型變成 hθ(x)=θ0,也就是上圖中紅色直線所示的情況,造成欠擬合。

   那為什么增加的一項可以使θ的值減小呢?

   因為如果我們令  𝜆   的值很大的話,為了使Cost Function 盡可能的小,所有的θ 的值(不包括θ0)都會在一定程度上減小。 但若𝜆 的值太大了,那么θ 的值(不包括θ0)都會趨近於0,這樣我們所得到的只能是一條平行於x軸的直線。 所以對於正則化,我們要取一個合理的  𝜆  的值,這樣才能更好的應用正則化。 回顧一下代價函數,為了使用正則化,讓我們把這些概念應用到到線性回歸和邏輯回歸中去,那么我們就可以讓他們避免過度擬合了。

 7.3 正則化線性回歸

對於線性回歸的求解,我們之前推導了兩種學習算法:一種基於梯度下降,一種基於正規方程。

正則化線性回歸的代價函數為:

如果我們要使用梯度下降法令這個代價函數最小化,因為我們未對進行正則化,所以梯度下降算法將分兩種情形:

 

 

 對上面的算法中𝑗 = 1,2, . . . , 𝑛  時的更新式子進行調整可得:

 

 

 可以看出,正則化線性回歸的梯度下降算法的變化在於,每次都在原有算法更新規則的基礎上令𝜃值減少了一個額外的值。

我們同樣也可以利用正規方程來求解正則化線性回歸模型,方法如下所示:

 

 

 圖中的矩陣尺寸為 (n+1)*(n+1)。

7.4 正則化的邏輯回歸模型

  針對邏輯回歸問題,我們在之前的課程已經學習過兩種優化算法:我們首先學習了使用梯度下降法來優化代價函數𝐽(𝜃),接下來學習了更高級的優化算法,這些高級優化算法需要你自己設計代價函數𝐽(𝜃)。

 

 自己計算導數同樣對於邏輯回歸,我們也給代價函數增加一個正則化的表達式,得到代價函數:

 

 python代碼:

 1 import numpy as np 
 2 def costReg(theta, X, y, learningRate): 3 theta = np.matrix(theta) 4 X = np.matrix(X) 5 y = np.matrix(y) 6 first = np.multiply(-y, np.log(sigmoid(X*theta.T))) 7 second = np.multiply((1 - y), np.log(1 - sigmoid(X*theta.T))) 8 reg = (learningRate / (2 * len(X))* np.sum(np.power(theta[:,1:the 9 ta.shape[1]],2)) 10 return np.sum(first - second) / (len(X)) + reg 

要最小化該代價函數,通過求導,得出梯度下降算法為:

注:看上去同線性回歸一樣,但是知道 hθ(x)=g(θTX),所以與線性回歸不同。

 Octave 中,我們依舊可以用 fminuc 函數來求解代價函數最小化的參數,值得注意的是參數θ0的更新規則與其他情況不同。 注意:

  1. 雖然正則化的邏輯回歸中的梯度下降和正則化的線性回歸中的表達式看起來一樣,但由於兩者的hθ(x)不同所以還是有很大差別。

  2. θ0不參與其中的任何一個正則化。

  目前大家對機器學習算法可能還只是略懂,但是一旦你精通了線性回歸、高級優化算法和正則化技術,坦率地說,你對機器學習的理解可能已經比許多工程師深入了。現在,你已經有了豐富的機器學習知識,目測比那些硅谷工程師還厲害,或者用機器學習算法來做產品。

  接下來的課程中,我們將學習一個非常強大的非線性分類器,無論是線性回歸問題,還是邏輯回歸問題,都可以構造多項式來解決。你將逐漸發現還有更強大的非線性分類器,可以用來解決多項式回歸問題。我們接下來將將學會,比現在解決問題的方法強大N倍的學習算法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM