1. 程式人生 > >監督學習和優化——線性迴歸

監督學習和優化——線性迴歸

此為斯坦福無監督特徵學習和深度學習教程(ufldl)的學習筆記。

問題描述

我們的目標為從輸入向量xnx\in\Re^n預測目標值yy。 以預測房價為例,yy代表房價,xx表示描述房子的特徵向量(比如其大小和房間的數目)。假設給定大量的樣本,其中x(i)x^{(i)}代表第i個房子樣本的特徵,y(i)y^{(i)}代表第i個房子的價格。則我們的目標為找到一個函式y=h(x)y = h(x),使得對每個訓練樣本都有yh(x)y \approx h(x)。若這個函式h(x)h(x)擬合的足夠好的話,那麼當遇到新的樣本xx時,該函式能夠很好的預測房價。

首先,我們使用線性函式來表示h(x):hθ(x)=jθjxj=θxh(x):h_\theta(x) = \sum_j\theta_j x_j = \mathbf{\theta}^\top x。現在目標轉變為找到合適的θ\theta使得hθ(x(i))h_\theta(x^{(i)})儘可能接近y(i)y^{(i)}。因此可以設定一個cost function: J(θ)=12i(hθ(x(i))y(i))2=12i(θx(i)y(i))J(\theta) = \frac{1}{2}\sum_i(h_\theta(x^{(i)}) - y^{(i)})^2 = \frac{1}{2}\sum_i(\mathbf{\theta}^\top x^{(i)} - y^{(i)})

該公式度量了對於一個特定的θ\theta,預測y(i)y^{(i)}產生了多少錯誤。

函式最小化

現在我們想要找到使得J(θ)J(\theta)最小的θ\theta值,其中一個高效的演算法是梯度下降(Gradient descent)。

梯度下降

隨機初始化θ\theta,並重復迭代:θj:=θjαθjJ(θ)\theta_j := \theta_j - \alpha\frac{\partial}{\partial \theta_j}J(\theta)

αθjJ(θ)(同時更新所有的j=0,...n.j=0,...n.)這裡α\alpha是學習率(learning rate),代表了走的步長。其中,我們有:θjJ(θ)=i(hθ(x)y)xj(i)\frac{\partial}{\partial \theta_j}J(\theta) = \sum_i(h_\theta(x) - y) x_j^{(i)}虛擬碼如下所示:       Repeat until convergence{ θj:=θj+αi=1m(y(i)hθ(x(i)))xj(i)(foreveryj)\theta_j :=\theta_j + \alpha\sum_{i=1}^m(y^{(i)} - h_\theta(x^{(i)}))x_j^{(i)} \ \ \ \ (for\ every\ j)}

Exercise 1A:Linear Regression

該練習題是要實現目標函式J(θ)J(\theta)的計算和梯度的計算,公式已在上面給出。在linear_regression.m檔案中實現程式碼如下:

%計算J(theta)
for i = 1 : m
    f = f + (theta' * X(:,i) - y(i))^2;
end
f = f / 2;
%計算梯度
for i = 1 : n
    for j = 1 :m
        g(i) = g(i) + X(i,j) * (theta' * X(:,j) - y(j));
    end
end