第一個機器學習算法:線性迴歸與梯度降低

第一個機器學習算法:線性迴歸與梯度降低

符號解釋

  • \(x^{(i)}\),\(y^{(i)}\):某個訓練樣本
  • \(m\):樣本總數量
  • \(h_{\theta}\):假設函數

Linear regression(線性迴歸)

如何得到一個線性迴歸模型?

  • 訓練數據放入學習算法,算法經過計算獲得一個假設函數
  • \(x\) (須要預測的數據),經過\(h_\theta\) (假設函數)後,獲得\(y\) (估計值)。

線性迴歸的假設函數(hypothesis)的表現形式

\[ h_\theta(x)=\theta_0+\theta_1x \]算法

很顯然這是一個一次函數,使用一次函數是爲了方便學習。爲了簡便,咱們一般簡寫成:
\[ h(x)=\theta_0+\theta_1x \]機器學習

\(\theta_0\)\(\theta_1\)這兩個參數表明的意義

學過一次函數的都知道表明的是什麼。\(\theta_0\)在這裏表明的是截距,\(\theta_1\)表明斜率。在這裏咱們將會不斷調整截距和斜率,儘可能獲得一個合適的假設函數。咱們須要儘可能減小真實數據和假設函數的輸出之間的平方差。函數

平方差函數

  • 方差學習

    • 表達式\(\frac{1}{m}\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2\)
    • 還記得距離公式嗎?\(x^2+y^2=d^2\),由於咱們是根據訓練數據得出的假設函數,因此x的值實際上是相同的。
    • 方差越小,說明假設函數的數據與訓練數據越貼合,越貼近,假設函數就越準確。
  • 平方差函數(代價函數)
    \[ J(\theta_0,\theta_1)=\frac{1}{2m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2 \]
    而咱們的目標是:
    \[ \mathop{minisize}\limits_{\theta_0\theta_1}\frac{1}{2m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2 \]
    就是但願找到一對\(\theta_0\theta_1\)使得方差函數是最小的。spa

Gradient descent 梯度降低

在上面咱們明確了咱們的目標:
\[ \mathop{minisize}\limits_{\theta_0\theta_1}\frac{1}{2m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2 \]
咱們須要一種高效的方法,去尋找方差最小時的解。數學

梯度降低的形象描述

想像一下你在一座大山上,在梯度降低算法中咱們要作的就是旋轉360度,看看咱們的周圍,並問本身我要在某個方向上用小碎步儘快下山。若是咱們站在山坡上的這一點,你看一下週圍你會發現最佳的下山方向,如今你在山上的新起點上 ,你再看看周圍,而後再一次想一想 ,我應該從什麼方向邁着小碎步下山? 而後你按照本身的判斷又邁出一步 ,往那個方向走了一步,而後重複上面的步驟 ,從這個新的點,你環顧四周,並決定從什麼方向將會最快下山 ,而後又邁進了一小步,又是一小步,並依此類推,直到你接近局部最低點的位置。it

梯度降低的數學表達

梯度降低是一種不斷且同時更新的。咱們採用一次函數來學習,所以只須要更新兩個值:
\[ \theta_j=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) \]
其中\(\alpha\)是成長速率,就是每一次更新的步長。io

其中要注意的是,\(\theta\)是先計算出來再賦值。也就是說,全部\(\theta\)的更新不會由於別的\(\theta\)先更新了而被影響。class

\(\alpha\)的大小對梯度降低的影響

  • \(\alpha\)過小,會致使更新迭代速率慢,要好久才能找局部最優解。
  • \(\alpha\)太大,會致使沒法靠近代價函數的底部,會致使算法是往上走而不是往下走。

所以,\(\alpha\)要控制好大小,可是直觀點看是寧願偏小也不要過大。方法

爲何梯度降低找到的是局部最優解而不是全局最優解

  • 代價函數不必定是隻有一個谷底的,可能有幾個谷底。

  • 若是隻有一個谷底,那麼梯度降低找到的必定是全局最優解。

  • 而不止一個谷底的時候,咱們觀察一下表達式:
    \[ \theta_j=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) \]
    當到達某個谷谷底,但該谷底不是最優的。那麼此使後面的微積分項表明的是函數的斜率,此時必定爲0。那就說明,只要達到谷底,函數就會中止迭代,不會繼續去尋找真正的全局最優解。

  • 所以咱們能夠得出一個結論:一開始選的起始點會影響最後解的結果,迭代出來的不必定是全局最優解。

二者結合,獲得第一個簡單的機器學習算法

這裏是使用一次函數作例子,若是不是一次函數那推廣便可。

推導

\[ J(\theta_0,\theta_1)=\frac{1}{2m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2 \tag{1} \]

\[ \theta_j=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)\tag{2} \]

將(1)代入(2):

\[ \theta_j=\theta_j-\alpha\frac{\partial}{\partial\theta_j}\frac{1}{2m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2 \tag{3} \]

將1和0分別代入\(\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)\),可得

\[ j=0:\frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1)=\frac{1}{m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})\tag{4} \]

\[ j=1:\frac{\partial}{\partial\theta_0}J(\theta_0,\theta_1)=\frac{1}{m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})·x^{(i)}\tag{5} \]

將(4),(5)代入(2),得:
\[ \theta_0=\theta_0-\alpha\frac{1}{m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)}) \]

\[ \theta_1=\theta_1-\alpha\frac{1}{m}\sum\limits^m_{i=1}(h_\theta(x^{(i)})-y^{(i)})·x^{(i)} \]

至此,咱們就獲得了兩個參數的迭代公式。

相關文章
相關標籤/搜索