The Problem of Overfitting
當我們要尋找 Hypothesis 來 fit 我們的 training set 時
可以遇到三種情況
Underfit (High bias)
Hypothesis 不是很好的 fit 這些 example data
Just right
Hypothesis 很好的 fit 這些 example data
Overfit (High variance)
Hypothesis 太過 "鑽牛角尖" 於每一個 training set
我們為 Overfitting 下一個定義 :
太多的 features,讓求得的 Hypothesis 在 training data 得到不錯分數 (cost function J 接近 0)
但完全沒辦法讓 test set 或是真實資料套入使用
同樣的事情可以發生在 logistic regression :
會造成 overfitting 的原因就是因為 features 使用太多了
但又不知道哪些 features 可以完全消除掉 (可能對 training 有益)
有兩種方法可以解決 :
減少 features 數量
使用 model selection algorithm (later in other course)
Regularization
留下全部 features,但降低 theta's 的 magnitude
這方法就可以不用擔心會不會刪掉對 training 有益的 features
Cost Function
若我們想降低多餘 (可能) 的 features 所帶來的 overfitting 影響
我們只要將這些 features 在 cost function 的代價提高,讓他們對 hypothesis 的影響下降就好
以 θ0+θ1x+θ2x2+θ3x3+θ4x4 為例
我們將他的 Cost function 調整為
θmin2m1i=1∑m(hθ(x(i))−y(i))2+1000⋅θ32+1000⋅θ42 新的 cost function 就可以在不去除 θ3 跟 θ4 的情況
讓兩者對 hypothesis 的影響降低
1000 可以是其他較大數值,但不能夠過大
不然會使得 θ3 跟 θ4 直接不見
右上的紫線就是在 implement regularization 過後的新 hypothesis function
所以除了 θ0 不用變更以外
我們將 regularization 套用到所有的 θ (因為我們也不知道到底是哪一個 feature 造成 overfitting)
得到了新的公式 :
J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2+λj=1∑nθj2 λ 為 regularization parameter
將會作為 θ 對於整個 cost function 的影響指標
只是多了後面一個式子,就可以讓 overfitting 的影響減少
Regularized Linear Regression
現在我們將 regularization 的公式套入 linear regression 和 logistic regression
先從 linear regression 的 gradient descent 開始
Linear regression - gradient descent
我們會改變所有 θ 但是 θ0 要維持原本的樣子
Repeat {θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))x0(i)θj:=θj−α[(m1i=1∑m(hθ(x(i))−y(i))xj(i))+mλθj]}j∈{1,2,...n} 我們發現第二行 θj 的公式可以在簡化成這樣 :
θj:=θj(1−αmλ)−αm1i=1∑m(hθ(x(i))−y(i))xj(i) 可以發現 1−αmλ 永遠都會是小於 1 的正數
所以負號的前一項能表示每回合的 θj 會固定變小
而後面一項跟原本的 gradient descent 一模一樣
Linear regression - Normal equation
要將 regularization 加入 normal equation 中
只需簡單加入 λ⋅L 即可,其中 L 為一個像是 identity matrix 但第一項為 0 的特殊矩陣
這個矩陣為一個 (n−1)×(n−1) 的矩陣
有一個 0 的原因就是不想要變動到 θ0 的值
θ=XTX+λ⋅011⋱1−1XTy 將 regularization 套入 normal equation 也有另一個好處
之前說過若 features 大於 training examples 數量太多
則 XTX 有可能會為 non-invertible
但現在有了 λ⋅L
XTX+λ⋅L 就一定是 invertible 的矩陣了 !
Regularized Logistic Regression
我們一樣來將 regularization 套用在 logistic regression
讓 overfitting 的藍線變為正常的紫線 hypothesis
一樣在 logistic cost function
J(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))] 的最後加上 regularization 的式子得到 :
J(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2 注意我們一樣不想變動到 θ0
所以 regularization 的 summation 從 1 開始 !
接著套進 gradient descent
Repeat {θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i))x0(i)θj:=θj−α[(m1i=1∑m(hθ(x(i))−y(i))xj(i))+mλθj]}j∈{1,2,...n} 其實跟 linear regression 一樣
只是 hθ(x)=1+e−θTx1
Advanced optimization
在 Octave 實作 logistic regression 的 advanced optimization 時
這些 code 又該怎麼跟 regularization 一起實作 :
→→→→⋮function [jVal, gradient] = costFunction(theta)jVal = [code to compute J(θ)];J(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2gradient(1) = [code to compute dθ0dJ(θ)];m1i=1∑m(hθ(x(i))−y(i))x0(i)gradient(2) = [code to compute dθ1dJ(θ)];m1i=1∑m(hθ(x(i))−y(i))x1(i)+mλθ1gradient(3) = [code to compute dθ2dJ(θ)];m1i=1∑m(hθ(x(i))−y(i))x2(i)+mλθ2gradient(n+1) = [code to compute dθndJ(θ)];