機器學習(吳恩達)-2 解決迴歸問題最常用函數:平方誤差代價函數——學習筆記

我們通過一個預測房價的例子,來給出解決迴歸問題的一種常用算法函數:平方誤差代價函數。(迴歸問題屬於監督學習)

預測房價的例子如下:

已有大量的已知數據(房子大小,房價),將房子大小作爲x軸數據,對應的房價作爲y軸數據,根據這些數據,來推測出某一房子大小所對應的房價可能是多少?

 

部分數據示例:

Training set of housing prices
Size of feet^2(x) Prices in 1000's(y)
500 112
523 78
545 185
566 167
... ...

Notation:

m:number of training examples(訓練樣本的數量)

x's: "input" variables

y's: "output" variables

(x,y): one training example(一個訓練樣本)

\small (x^{(i)},y^{(i)}): i^th training example(第i個訓練樣本,如第一個訓練樣本:\small x^{(1)}=500, \small y^{(1)}=112) 

 


1. 如何通過已給出的大量數據來推測出某房子大小對應的房價?

通過已給出的訓練集(即大量已知數據),加上一個學習算法,從而(?)給出一個假設函數h,而房子大小x作爲輸入數據,通過假設函數給出輸出結果y(房價預測值)。

 


2. 如何給出假設函數h?

根據本次例子的房價預測,我們可以把假設函數定成一個簡單的線性函數。那麼可以給出函數公式:

 

                                                                h(x)=\Theta_0+\Theta_1x

                                                                \Theta_0\Theta_1:模型參數

而隨着參數的不同,函數h的預測曲線與訓練集的擬合程度不同。目標是儘可能使函數曲線更貼合真實數據,即使得\small h(x)-y的值儘可能小。

因此,爲了更準確的表達假設函數與真實數據的差距,我們用函數\small J(\Theta_0,\Theta_1)來表示其誤差,函數\small J(\Theta_0,\Theta_1)稱爲代價函數(也稱爲平方誤差函數或平方誤差代價函數)。

                                                    \small J(\Theta_0,\Theta_1)=\frac{1}{2m}\sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})^2

其中\small (h_\Theta(x^{(i)})-y^{(i)})^2是函數值與真實數據值的平方誤差和。

注意:也有其他的代價函數,但平方誤差代價函數可能是解決迴歸問題最常用的手段。

那麼接下來的目的就是求出最貼合真實數據的預測曲線,即求出最合適的參數\small \Theta_0\small \Theta_1,而通過求得代價函數\small J(\Theta_0,\Theta_1)的值,可以得到合適的數\small \Theta_0\small \Theta_1使\small J(\Theta_0,\Theta_1)值最小。

 


3. 如何分析代價函數J?

首先梳理下我們所用到的函數:

假設函數:

h(x)=\Theta_0+\Theta_1x

參數:

 \Theta_0\Theta_1

代價函數:

\small J(\Theta_0,\Theta_1)=\frac{1}{2m}\sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})^2
目標:求出\small J(\Theta_0,\Theta_1)最小值,從而得到對應的\small \Theta_0\small \Theta_1參數值。

 

可知隨着\small \Theta參數值的不同,代價函數\small J(\Theta_0,\Theta_1)會取不同值。爲了方便觀察,我們首先將假設函數\small h(x)簡化爲只含一個參數\small \Theta\small h_\Theta(x)=\Theta x

並給出一個簡單的訓練集:包含已知數據(1,1),(2,2),(3,3),如圖:

我們將\small \Theta取不同值,可以得出不同的代價函數值:

\small \Theta=1,\small J(\Theta)=0;\small \Theta=0.5,\small J(\Theta)=0.58;\small \Theta=0,\small J(\Theta)=2.3 等等..

根據\small \Theta值與對應的代價函數值,我們可以畫出兩者之間的關係曲線:

                                                    橫座標爲參數\small \Theta,縱座標爲代價函數\small J(\Theta)

從圖中可以得到,當\small \Theta=1時,代價函數\small J(\Theta)爲最小值=0,此時假設函數的曲線完全貼合訓練集的數據。

 

那麼當假設函數有兩個參數\small \Theta_0\small \Theta_1時,我們可以得到代價函數的曲線圖及相應的等高線如下圖所示:

那麼現在已知只要找到代價函數的最低點(最小值),就能得到相應的參數\small \Theta值,從而找到最適合的假設函數。

 


4. 如何實現找到代價函數最小值?

這裏要使用梯度下降算法(Gradient descent algorithm)。

梯度下降算法:以某點爲起始,選擇下一步要走的點,使得下一步爲當前點可最快到達最低處的點,不停地循環此步驟,直到到達局部最小值。

 

用梯度下降算法最小化任何函數\small J(\Theta_0,\Theta_1):

已知:代價函數\small J(\Theta_0,\Theta_1)

目標:\small minJ(\Theta_0,\Theta_1)(求得代價函數最小值)

要做:(1)從某一值開始;

           (2)不停地改變\small \Theta值,來使\small J(\Theta_0,\Theta_1)變小,直到找到\small J(\Theta_0,\Theta_1)的最小值(或局部最小值)

注意:之所以說是局部最小值而非全局最小值,是因爲代價函數的曲線圖有可能有多個局部最低點,在這種情況下,設定不同的初始theta值,有可能會到達不同的局部最低點。

 

梯度下降算法的具體實現:

Gradient descent algorithm:

        repeat until cenvergence{

                \small \Theta_j:=\Theta_j-\alpha \frac{\partial }{\partial \Theta_j}J(\Theta_0,\Theta_1)\:\:\:\:(for\:j=0\:and\:j=1)

        }

(1)\small \Theta_j表示所有的參數,在本例中參數有兩個\small \Theta_0\small \Theta_1,更新參數值時要同時更新\small \Theta_0\small \Theta_1的值,同時更新的意思是兩個賦值語句中間不能有任何其他的會改變參數值的賦值語句。

(2)\alpha表示learning rate(學習率),表示每次更新參數值時所更新值的幅度的大小。若\alpha過小,則從初始參數值到代價函數局部最低點所屬的參數值要經過非常多次更新;而如果\alpha過大,則會有可能使參數值在更新時直接跨過局部最低點,導致算法無法收斂甚至發散。

 

將代價函數\small J(\Theta_0,\Theta_1)代入\small \frac{\partial }{\partial \Theta_j}J(\Theta_0,\Theta_1)中, 可以得到:

                                            \small \frac{\partial }{\partial \Theta_j}J(\Theta_0,\Theta_1)=\frac{\partial }{\partial \Theta_j}\cdot \frac{1}{2m}\sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})^2

根據對兩個參數theta0、theta1分別求J的偏導,我們可以得到:

                                          \small \Theta_0(j=0):\frac{\partial }{\partial \Theta_0}J(\Theta_0,\Theta_1)=\frac{1}{m}\cdot \sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})\cdot 1

                                          \small \Theta_1(j=1):\frac{\partial }{\partial \Theta_1}J(\Theta_0,\Theta_1)=\frac{1}{m}\cdot \sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})\cdot x^{(i)}

因此,將梯度下降算法具體到本次例子中,算法可以寫成:

Gradient descent algorithm:

        repeat until cenvergence{

                \small \Theta_0(j=0):\frac{\partial }{\partial \Theta_0}J(\Theta_0,\Theta_1)=\frac{1}{m}\cdot \sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})\cdot 1

                \small \Theta_1(j=1):\frac{\partial }{\partial \Theta_1}J(\Theta_0,\Theta_1)=\frac{1}{m}\cdot \sum_{i=1}^{m}(h_\Theta(x^{(i)})-y^{(i)})\cdot x^{(i)}

        }

 

在本例子中,因爲線型迴歸的代價函數總是一個弓狀函數(術語叫凸函數,即只有一個最低點),因此不存在局部最優解,只有一個全局最優。

 

ps:在繪製代價函數圖時,發現這個凸函數並沒有像課程視頻中一樣是個很標準的弓狀函數,目前推測原因是因爲選取的假設函數過於簡單,只含有一個特徵x,因此對於數據集來說可以有一系列對應的\small \Theta_0\small \Theta_1來符合數據,所以\small \Theta_0\small \Theta_1的取值較爲寬泛,也就形成不了一個最優解。(僅推測)

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