吴恩达机器学习(第六章)——正则化
第六章-正則化
文章目錄
- 第六章-正則化
- 過擬合問題
- 代價函數
- 線性回歸的正則化
- Logistic回歸的正則化
過擬合問題
如果我們有非常多的特征,我們通過學習得到的假設可能能夠非常好地適應訓練集(代價函數可能幾乎為0),但是可能會不能推廣到新的數據。
下圖是一個回歸問題的例子:
第一個模型是一個線性模型,不能很好地適應我們的訓練集。這是欠擬合(underfitting),算法具有高偏差(high bias)。
第二個模型是一個二次方模型,這個擬合效果很好。
第三個模型是一個四次方模型,過于強調擬合原始數據,若給出一個新的值使之預測,它將表現的很差。這就是過擬合(overfitting),算法具有高方差(high variance)。
概括的說,過度擬合問題將會在變量過多的時候出現,這時訓練出的假設能很好地擬合訓練集,但它不能很好地泛化在新的樣本中。泛化(generalize) 是指一個假設模型應用到新樣本的能力。
類似的說法同樣可以應用到邏輯回歸中:
第一個模型欠擬合,第二個模型很適合,第三個模型過擬合。就以多項式理解,xxx 的次數越高,擬合的越好,但相應的預測的能力就可能變差。
如果我們有過多的變量,而只有非常少的訓練數據,就會出現過度擬合的問題。有兩個方法來解決問題。
可以通過人工檢查變量清單選擇應該保留的變量,也可以使用模型選擇算法自動的選擇應該保留的變量
保留所有的特征變量,但是需要減少量級或參數 θj\theta_{ j }θj? 的大小。
正則化方法非常有效,當我們有很多特征變量時,其中每一個變量都能對預測的 yyy 值產生一點影響。
代價函數
上面的回歸問題中我們的模型是:hθ(x)=θ0+θ1x1+θ2x22+θ3x33+θ4x44{h_\theta}\left( x \right)={\theta_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}^2}+{\theta_{3}}{x_{3}^3}+{\theta_{4}}{x_{4}^4}hθ?(x)=θ0?+θ1?x1?+θ2?x22?+θ3?x33?+θ4?x44?
因為我們用階數過高的多項式去擬合數據會得到比較扭曲的線,雖然更好的擬合了數據,但出現了過擬合問題。正是那些高次項導致了過擬合的產生,如果我們能讓這些高次項的系數接近于0的話,數據就能很好的擬合了。所以我們要做的就是在一定程度上減小這些參數 θ\thetaθ 的值,這就是正則化的基本方法。
針對模型,我們決定要減少θ3{\theta_{3}}θ3?和θ4{\theta_{4}}θ4?的大小,我們要做的便是修改代價函數,在其中θ3{\theta_{3}}θ3?和θ4{\theta_{4}}θ4? 設置一點懲罰。這樣做的話,我們在嘗試最小化代價時也需要將這個懲罰納入考慮中,并最終導致選擇較小一些的θ3{\theta_{3}}θ3?和θ4{\theta_{4}}θ4?。
修改后的代價函數如下:min?θ 12m[∑i=1m(hθ(x(i))?y(i))2+1000θ32+10000θ42]\underset{\theta }{\mathop{\min }}\,\frac{1}{2m}[\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}+1000\theta _{3}^{2}+10000\theta _{4}^{2}]}θmin?2m1?[i=1∑m?(hθ?(x(i))?y(i))2+1000θ32?+10000θ42?]
通過這樣的代價函數選擇出的θ3{\theta_{3}}θ3?和θ4{\theta_{4}}θ4? 對預測結果的影響就比之前要小許多。
假如我們有非常多的特征,我們并不知道其中哪些特征我們要懲罰,我們將對所有的特征進行懲罰,并且讓代價函數最優化的軟件來選擇這些懲罰的程度。這樣的結果是得到了一個較為簡單的能防止過擬合問題的假設:J(θ)=12m[∑i=1m(hθ(x(i))?y(i))2+λ∑j=1nθj2]J\left( \theta \right)=\frac{1}{2m}[\sum\limits_{i=1}^{m}{{{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})}^{2}}+\lambda \sum\limits_{j=1}^{n}{\theta_{j}^{2}}]}J(θ)=2m1?[i=1∑m?(hθ?(x(i))?y(i))2+λj=1∑n?θj2?]
其中 λ\lambdaλ 又稱為正則化參數(Regularization Parameter)。 根據慣例,我們不對θ0{\theta_{0}}θ0? 進行懲罰。
引入一項λ∑j=1nθj2\lambda \sum\limits_{j=1}^{n}{\theta_j^{2}}λj=1∑n?θj2? 后,為了讓代價函數 J(θ)J\left( \theta \right)J(θ) 變小,那么 θj\theta_{j}θj? 的值也要減小才行。
經過正則化處理的模型與原模型的可能對比如下圖所示:
如果選擇的正則化參數 λ\lambdaλ 過大,則會把所有的參數都最小化了,導致模型變成 hθ(x)=θ0{h_\theta}\left( x \right)={\theta_{0}}hθ?(x)=θ0?,也就是上圖中紅色直線所示的情況,造成欠擬合。
如果選擇的正則化參數 λ\lambdaλ 過小,則不能使得參數 θj\theta_{j}θj? 大幅變小,代價函數變小的程度太弱,不能有效解決過擬合的問題。
所以對于正則化,我們要取一個合理的 λ\lambdaλ 的值,這樣才能更好的應用正則化。
回顧一下代價函數,為了使用正則化,讓我們把這些概念應用到到線性回歸和邏輯回歸中去,那么我們就可以讓他們避免過度擬合了。
線性回歸的正則化
對于線性回歸的求解,我們之前推導了兩種學習算法:一種基于梯度下降,一種基于正規方程。
正則化線性回歸的代價函數為:J(θ)=12m∑i=1m[((hθ(x(i))?y(i))2+λ∑j=1nθj2)]J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{[({{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})}^{2}}+\lambda \sum\limits_{j=1}^{n}{\theta _{j}^{2}})]}J(θ)=2m1?i=1∑m?[((hθ?(x(i))?y(i))2+λj=1∑n?θj2?)]
如果我們要使用梯度下降法令這個代價函數最小化,因為我們未對 θ0\theta_0θ0? 進行正則化,所以梯度下降算法將分兩種情形:
RepeatRepeatRepeat untiluntiluntil convergenceconvergenceconvergence{
? θ0:=θ0?a1m∑i=1m((hθ(x(i))?y(i))x0(i)){\theta_0}:={\theta_0}-a\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{0}^{(i)}})θ0?:=θ0??am1?i=1∑m?((hθ?(x(i))?y(i))x0(i)?)
? θj:=θj?a[1m∑i=1m((hθ(x(i))?y(i))xj(i)+λmθj]{\theta_j}:={\theta_j}-a[\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{j}^{\left( i \right)}}+\frac{\lambda }{m}{\theta_j}]θj?:=θj??a[m1?i=1∑m?((hθ?(x(i))?y(i))xj(i)?+mλ?θj?]
? forforfor j=1,2,...nj=1,2,...nj=1,2,...n
? }
對上面的算法中 j=1,2,...,nj=1,2,...,nj=1,2,...,n 時的更新式子進行調整可得:θj:=θj(1?aλm)?a1m∑i=1m(hθ(x(i))?y(i))xj(i){\theta_j}:={\theta_j}(1-a\frac{\lambda }{m})-a\frac{1}{m}\sum\limits_{i=1}^{m}{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{j}^{\left( i \right)}}θj?:=θj?(1?amλ?)?am1?i=1∑m?(hθ?(x(i))?y(i))xj(i)?
可以看出,正則化線性回歸的梯度下降算法的變化在于,每次都在原有算法更新規則的基礎上令 θ\thetaθ 值減少了一個額外的值。
我們同樣也可以利用正規方程來求解正則化線性回歸模型
修改之后的正規方程法:
增加的矩陣是個 (n+1)×(n+1)(n+1)×(n+1)(n+1)×(n+1) 維的矩陣,對角線上除了第一個元素為0其他都為1。
如果現在樣本總數 mmm 小于等于特征數量 nnn,那么 (XTX)?1{{\left( {{X}^{T}}X \right)}^{-1}}(XTX)?1 矩陣是個奇異矩陣,是不可逆的。
而在正則化中已經考慮到了這個問題。具體來說,只要正則化參數 λ\lambdaλ 是嚴格大于 0 的,我們就可以確信“X的轉置乘以X 加上λ\lambdaλ 乘以這個增加的矩陣”是可逆的。
Logistic回歸的正則化
我們給代價函數增加一個正則化的表達式,得到正則化的代價函數:
J(θ)=1m∑i=1m[?y(i)log?(hθ(x(i)))?(1?y(i))log?(1?hθ(x(i)))]+λ2m∑j=1nθj2J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]}+\frac{\lambda }{2m}\sum\limits_{j=1}^{n}{\theta _{j}^{2}}J(θ)=m1?i=1∑m?[?y(i)log(hθ?(x(i)))?(1?y(i))log(1?hθ?(x(i)))]+2mλ?j=1∑n?θj2?
產生的效果是,即使你擬合階數很高,且參數很多,只要添加了這個正則化項,保持參數較小,你依然可以得到一條合理劃分正負樣本的邊界。即使你有很多特征,正則化也能幫你避免過擬合的現象。
Python代碼:
import numpy as npdef costReg(theta, X, y, learningRate):theta = np.matrix(theta)X = np.matrix(X)y = np.matrix(y)first = np.multiply(-y, np.log(sigmoid(X*theta.T)))second = np.multiply((1 - y), np.log(1 - sigmoid(X*theta.T)))reg = (learningRate / (2 * len(X))* np.sum(np.power(theta[:,1:theta.shape[1]],2))return np.sum(first - second) / (len(X)) + reg要最小化該代價函數,通過求導,得出梯度下降算法為:
RepeatRepeatRepeat untiluntiluntil convergenceconvergenceconvergence{
? θ0:=θ0?a1m∑i=1m((hθ(x(i))?y(i))x0(i)){\theta_0}:={\theta_0}-a\frac{1}{m}\sum\limits_{i=1}^{m}{(({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{0}^{(i)}})θ0?:=θ0??am1?i=1∑m?((hθ?(x(i))?y(i))x0(i)?)
? θj:=θj?a[1m∑i=1m(hθ(x(i))?y(i))xj(i)+λmθj]{\theta_j}:={\theta_j}-a[\frac{1}{m}\sum\limits_{i=1}^{m}{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}})x_{j}^{\left( i \right)}}+\frac{\lambda }{m}{\theta_j}]θj?:=θj??a[m1?i=1∑m?(hθ?(x(i))?y(i))xj(i)?+mλ?θj?]
? forforfor j=1,2,...nj=1,2,...nj=1,2,...n
? }
這就是正則化邏輯回歸的梯度下降算法,看上去同線性回歸一樣,但是記住它的假設模型 hθ(x)=g(θTX){h_\theta}\left( x \right)=g\left( {\theta^T}X \right)hθ?(x)=g(θTX),所以與線性回歸是不同的。
接下來的課程中,我們將學習一個非常強大的非線性分類器。無論是線性回歸問題,還是邏輯回歸問題,我們都可以構造多項式來解決。實際上,我們還有更強大的非線性分類器,可以用來解決多項式回歸的問題。我們接下來將學習更多更為強大的算法,來解決各種不同的問題。
總結
以上是生活随笔為你收集整理的吴恩达机器学习(第六章)——正则化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吴恩达机器学习(第五章)——Logist
- 下一篇: 测验1: Python基本语法元素 (第