七、 正則化(Regularization)

7.1 過擬合的問題

  到如今爲止,咱們已經學習了幾種不一樣的學習算法,包括線性迴歸和邏輯迴歸,它們可以有效地解決許多問題,可是當將它們應用到某些特定的機器學習應用時,會遇到過擬合(over-fitting)的問題,可能會致使它們效果不好。python

  在這段視頻中,我將爲你解釋什麼是過分擬合問題,而且在此以後接下來的幾個視頻中,咱們將談論一種稱爲正則化(regularization)的技術,它能夠改善或者減小過分擬合問題git

若是咱們有很是多的特徵,咱們經過學習獲得的假設可能可以很是好地適應訓練集(代價函數可能幾乎爲0),可是可能會不能推廣到新的數據。github

下圖是一個迴歸問題的例子:算法

 

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

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

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

問題是,若是咱們發現了過擬合問題,應該如何處理?優化

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

  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倍的學習算法。

相關文章
相關標籤/搜索