1.正則化線性回歸
對于線性回歸的求解,我們之前推導了兩種學習算法:一種基于梯度下降,一種基于正規方程。
正則化線性回歸的代價函數為: J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ] J(\theta) = \frac{1}{2m} \left[ \sum_{i=1}^{m} \left( h_{\theta}(x^{(i)}) - y^{(i)} \right)^2 + \lambda \sum_{j=1}^{n} \theta_j^2 \right] J(θ)=2m1?[i=1∑m?(hθ?(x(i))?y(i))2+λj=1∑n?θj2?]
如果我們要使用梯度下降法令這個代價函數最小化,因為我們未對其進行正則化,所以梯度下降算法將分兩種情形:
上面的算法中𝑗 = 1,2, . . . , 𝑛 時的更新式子進行調整可得:
θ j : = θ j ( 1 ? a λ m ) ? a 1 m ∑ i = 1 m ( h θ ( x ( i ) ) ? y ( i ) ) x j ( i ) \theta_j := \theta_j \left(1 - a \frac{\lambda}{m}\right) - a \frac{1}{m} \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)}) x_j^{(i)} θj?:=θj?(1?amλ?)?am1?i=1∑m?(hθ?(x(i))?y(i))xj(i)?可以看出,正則化線性回歸的梯度下降算法的變化在于,每次都在原有算法更新規則的基礎上令𝜃值減少了一個額外的值。
我們同樣也可以利用正規方程來求解正則化線性回歸模型,方法如下所示:
圖中的矩陣尺寸為 (𝑛 + 1) ? (𝑛 + 1)
2.正則化的邏輯回歸模型
針對邏輯回歸問題,我們在之前已經學習過兩種優化算法:我們首先學習了使用梯度下降法來優化代價函數𝐽(𝜃),接下來學習了更高級的優化算法,這些高級優化算法需要你自己設計代價函數𝐽(𝜃)。
自己計算導數同樣對于邏輯回歸,我們也給代價函數增加一個正則化的表達式,得到代價函數:
J ( θ ) = 1 m ∑ i = 1 m [ ? y ( i ) log ? ( h θ ( x ( i ) ) ) ? ( 1 ? y ( i ) ) log ? ( 1 ? h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J(\theta) = \frac{1}{m} \sum_{i=1}^{m} \left[ -y^{(i)} \log \left( h_{\theta}(x^{(i)}) \right) - (1 - y^{(i)}) \log \left( 1 - h_{\theta}(x^{(i)}) \right) \right] + \frac{\lambda}{2m} \sum_{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 np
def 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:the
ta.shape[1]],2))return np.sum(first - second) / (len(X)) + reg
要最小化該代價函數,通過求導,得出梯度下降算法為:
注:看上去同線性回歸一樣,但是知道 h 𝜃 ( 𝑥 ) = 𝑔 ( 𝜃 𝑇 𝑋 ) ?_𝜃(𝑥) = 𝑔(𝜃^𝑇𝑋) h𝜃?(x)=g(𝜃TX),所以與線性回歸不同