第一個機器學習演算法:線性回歸與梯度下降
符號解釋
- \(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\)使得方差函式是最小的,
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度,看看我們的周圍,并問自己我要在某個方向上用小碎步盡快下山,如果我們站在山坡上的這一點,你看一下周圍你會發現最佳的下山方向,現在你在山上的新起點上 ,你再看看周圍,然后再一次想想 ,我應該從什么方向邁著小碎步下山? 然后你按照自己的判斷又邁出一步 ,往那個方向走了一步,然后重復上面的步驟 ,從這個新的點,你環顧四周,并決定從什么方向將會最快下山 ,然后又邁進了一小步,又是一小步,并依此類推,直到你接近區域最低點的位置,
梯度下降的數學表達
梯度下降是一種不斷且同時更新的,我們采用一次函式來學習,因此只需要更新兩個值:
\[\theta_j=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) \]
其中\(\alpha\)是成長速率,就是每一次更新的步長,
其中要注意的是,\(\theta\)是先計算出來再賦值,也就是說,所有\(\theta\)的更新不會因為別的\(\theta\)先更新了而被影響,
\(\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)} \]
至此,我們就得到了兩個引數的迭代公式,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/45464.html
標籤:其他
上一篇:數學不好也能看懂的線性回歸推導
下一篇:臨界區設計太大或太小有何缺點?
