機器學習(吳恩達)-3 多元線性迴歸的多特徵(變量)問題

在上節中通過一個預測房價的例子給出了一個一次的假設函數:\small h_\Theta(x)=\Theta_0+\Theta_1*x。而在實際情況中假設函數可能需要多個特徵(變量)x,因此在本節中將預測房價的例子進行些添加,從而引出多元線性迴歸函數,並對其中的參數進行分析,繼而給出梯度下降算法中的實用技巧以及正規方程的介紹。


1. 多元線性迴歸函數如何表達?

本例中,影響房價的特徵有多個,分別是房子大小、房間數量、樓層數以及房子已使用年限,這四個特徵共同影響房子的價值,給出的訓練集如下:

房子大小(平方英尺) 房間數量 樓層數 房子已使用年限 房價
2104

5

1 45 460
1416 3 2 40 232
1534 3 2 30 315
852 2 1 36 178

參數:

m:樣本數量

n:特徵數

x^{(i)}:第i個樣本的特徵向量

x_j^{(i)}:第i個樣本的第j個特徵值

 

原本的假設函數爲:\small h_\Theta(x)=\Theta_0+\Theta_1*x

本例子的假設函數公式:\small h_\Theta(x)=\Theta_0+\Theta_1*x_1+\Theta_2*x_2+\Theta_3*x_3+\Theta_4*x_4

那麼推廣到一般假設函數公式爲:\small h_\Theta(x)=\Theta_0+\Theta_1*x_1+...+\Theta_n*x_n

爲了讓形式更加統一,我們可以令x_0=1,從而一般假設函數公式爲:

                                       \small h_\Theta(x)=\Theta_0*x_0+\Theta_1*x_1+...+\Theta_n*x_n

令特徵x_0,x_1,x_2,...,x_n和參數\small \Theta_0,\Theta_1,\Theta_2,...,\Theta_n用向量表達爲:

                                       \small x=\begin{bmatrix} x_0\\x_1\\ x_2 \\... \\ x_n\\ \end{bmatrix}\,\,\in \mathbb{R}^{n+1}         \small \Theta =\begin{bmatrix} \Theta_0\\ \Theta_1\\ \Theta_2\\ ...\\ \Theta_n\\ \end{bmatrix} \in \mathbb{R}^{n+1}

那麼:

                                       \small h_\Theta(x)=\Theta_0*x_0+\Theta_1*x_1+...+\Theta_n*x_n=\Theta ^Tx

上式稱爲多元線性迴歸(Multivariate linear regression)。

 


2. 如何計算梯度下降算法中的多個參數?

假設函數:\small h_\Theta(x)=\Theta_0*x_0+\Theta_1*x_1+...+\Theta_n*x_n=\Theta ^Tx

參數:\small \Theta_0,\Theta_1,\Theta_2,...,\Theta_n  (可由向量\small \Theta表示)

代價函數:\small J(\Theta_0,\Theta_1,...,\Theta_n)=J(\Theta)=\frac{1}{2*m}\sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})^2

通用梯度下降算法:

\small Gradient descent:

        \small \, \, \, \, Repeat\{

                \small \Theta_j:=\Theta_j-\alpha\frac{\partial }{\partial\Theta_j}J(\Theta_0,\Theta_1,...,\Theta_n)

        \small \}

當有多個參數時,我們可以把算法表達式擴展開,從而得到:

\small Gradient descent:

        \small \, \, \, \, Repeat\{

                \small \Theta_0:=\Theta_0-\alpha*\frac{1}{m}\sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})^2*1

                \small \Theta_1:=\Theta_1-\alpha*\frac{1}{m}\sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})^2*x_1^{(i)}

                \small ......

                \small \Theta_j:=\Theta_j-\alpha*\frac{1}{m}\sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})^2*x_j^{(i)}

        \small \}(j=0,1,...,n)


3. 梯度下降算法中的實用技巧

(1)特徵縮放(feature scaling)

在計算代價函數時,如果各特徵之間的範圍精度差距很大,那麼求出來的代價函數的等高線會變得非常歪斜且瘦長,除了觀測方面的差距外,在運行梯度下降算法時,可能會需要更多次的迭代才能找到全局最小值,因此收斂速度會慢很多。

例如,現在有兩個特徵\small x_1,x_2\small x_1爲房子大小(範圍爲0~2000\small feet^2),\small x_2爲房間數量(1~5個),那麼畫出來的等高線可能會如下圖:

那麼我們進行特徵縮放(將各特徵除以它在訓練集中存在的大致最大值):

\small x_1=\frac{size(feet^2)}{2000}

\small x_2=\frac{number\, of\, bedrooms}{5}

注意:特徵縮放的原則是讓特徵經過縮放後大致處於\small -1\leq x_i\leq1的範圍(不必完全符合,但應大致爲這個範圍。例如\small -0.5\leq x_i\0.5可以,但\small -200\leq x_i\200不可以)

經過特徵縮放後的代價函數的等高線圖大致如下:

 

(2)均值歸一化

均值歸一化一般和特徵縮放一起使用,與特徵縮放的目的相同,也是爲了減少收斂的迭代次數,更快的找到全局最小值。經過均值歸一化後的特徵值均值爲0,範圍爲\small -0.5\leq x_i\leq 0.5。仍舊使用(1)的特徵做例子如下:

\small x_1=\frac{size-1000}{2000}\, \, \, \, \, \, \, \,\,\,\, -0.5\leq x_1\leq0.5

\small x_2=\frac{\#bedrooms-2}{5}\, \, \, \, \, \, \, \,\,\,\, -0.5\leq x_2\leq0.5

可以得到一個一般的均值歸一化表達式:

\small x_1=\frac{x_1-\mu_1}{s_1}

\small \mu_1:訓練集中\small x_1的均值

\small s_1:訓練集中\small x_1的最大值

 

(3)選擇合適的學習率\alpha

上節中已經講到如果學習率過高或過低,都不利於收斂,學習率過低則收斂過程中需要迭代的次數大大增加,而學習率過高則甚至有可能造成函數無法收斂,從而找不到全局最小值。

應該如何判斷選擇的學習率是否合適?

可以通過得到迭代次數與其相應得到的代價函數值的曲線關係觀察得出,如下圖是正常的迭代次數與代價函數值關係曲線圖:

在上圖中,可以看到迭代次數爲300次和400次時得到的代價函數幾乎沒有差別,此時就可以認爲已經得到了最小代價函數,從而得到相應的各參數值。 

並且由圖也可以知道選擇的學習率\alpha是比較合適的,如果選擇的學習率比較小的話,迭代次數需要的更多,那麼在迭代次數300到400之間可看到代價函數值仍在明顯的下降;如果選擇的學習率\alpha過大,那麼得到的曲線則不規則,如下面倆圖就是學習率過大,此時要選擇更小的學習率。

 


4. 一定範圍內可更方便解出參數\small \Theta的方法——正規方程

在現在已經學習的方法中,解出參數需要通過梯度下降算法中對含參公式求偏導(即本節問題2中給出的參數公式),然而當參數過多時,求偏導就變得較爲麻煩。

舉例來說,如果代價函數只含有一個參數,將特徵設爲常量\small a,b,c,表達式爲:

\small J(\Theta )=a*\Theta^2+b*\Theta+c

那麼求\small J(\Theta )最小值,需對\small \Theta求導並令其等於0:\small \frac{\mathrm{d} }{\mathrm{d} \Theta }J(\Theta )=0  便可求出\small \Theta的值。

而當參數增加爲\small \Theta_0,\Theta_1,\Theta_2,...,\Theta_n,爲了求每個參數,分別要令\small \frac{\partial }{\partial \Theta_j}J(\Theta_0,\Theta_1,...,\Theta_n)=0,依次求出各個偏導的等式,就變得較爲複雜。

 

正規方程的目的就是爲了解決求微積分(偏導)過於複雜的問題,如何根據正規方程求出參數可以用本節最開始的預測房價的例子給出。

房子大小(平方英尺) 房間數量 樓層數 房子已使用年限 房價
2104

5

1 45 460
1416 3 2 40 232
1534 3 2 30 315
852 2 1 36 178

分別用矩陣X表示表格中訓練集的數據,用向量y表示表格中最後的房價值:

                                    \small X=\begin{bmatrix} 1 & 2104 & 5 &1 &45 \\ 1& 1416& 3 & 2 &40 \\ 1 & 1534 & 3 & 2 & 30\\ 1& 852& 2 & 1 & 36 \end{bmatrix}             \small y=\begin{bmatrix} 460\\ 232\\ 315\\ 178\\ \end{bmatrix}

將需要求的參數\small \Theta_0,\Theta_1,\Theta_2,\Theta_3,\Theta_4作爲向量[向量表達等式],則:

                                    \small \Theta =(X^TX)^{-1}X^Ty

根據這個方程就可以一次性求出多個參數。

 

注意:但是正規方程並不是任何情況下都可以用的,儘管正規方程比起梯度下降算法中求偏導要方便、快速很多,但是正規方程不能應用在參數過多的情況下(參數數量在幾千範圍內可以使用,但是參數量上萬時應開始不再使用正規方程),參數過多會導致其計算速度明顯下降,而梯度下降算法在參數量很多時的工作效果仍舊比較可觀,所以參數過多還是需要使用梯度下降算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章