機器學習算法 之 線性迴歸(linear regreesion)

相關文章目錄:python

  1. 機器學習 之線性迴歸
  2. 機器學習 之邏輯迴歸及python實現
  3. 機器學習項目實戰 交易數據異常檢測
  4. 機器學習之 決策樹(Decision Tree)
  5. 機器學習之 決策樹(Decision Tree)python實現
  6. 機器學習之 PCA(主成分分析)
  7. 機器學習之 特徵工程

linear regreesion(線性迴歸)

咱們將用來描述迴歸問題的標記以下:算法

m 表明訓練集中實例的數量數組

n 表明特徵的數量機器學習

x^{(i)} 表示第i個訓練實例,是特徵矩陣的第i行,是一個向量函數

x_j^{(i)} 表示特徵矩陣中第i行的第j個特徵,也就是第i個訓練實例的第j個特徵post

y 表明目標變量,也就是輸出變量學習

(x,y) 表明訓練集中的一個實例優化

(x^{(i)},y^{(i)}) 表明第i個觀察實例cdn

h 表明學習算法的函數,或者加假設(hypothesis)blog

對於多變量線性迴歸,假設函數能夠設爲

h_{\theta}(x) = \theta_0+\theta_1x_1 + \theta_2x_2 +...+\theta_nx_n

爲了使公式可以簡化,引入 x_0=1 則假設函數變爲

h_{\theta}(x) = \theta_0x_0+\theta_1x_1 + \theta_2x_2 +...+\theta_nx_n

進行向量化後,最終結果爲

h_{\theta}(x) = \theta^TX

咱們須要求出\theta,使得對於每個樣本,帶入到假設函數中,能獲得對應的一個預測值,而咱們的目標,是使求出的預測值儘量的接近真實值

經過最大似然估計來推導目標函數

因爲咱們實際預測的值和真實值之間確定會有偏差,對於每一個樣本:

y^{(i)} = \theta^Tx^{(i)} + \varepsilon^{(i)}

其中,y^{(i)}爲當前樣本實際真實值,\theta^Tx^{(i)}爲預測結果,\varepsilon^{(i)}即爲預測偏差

對於整個數據集來講,則:

Y =  \theta^TX + \varepsilon

偏差\varepsilon^{(i)}獨立的而且具備相同的分佈,而且服從均值爲0,方差爲\theta^2正態分佈

因爲偏差服從正態分佈,因此:

p(\varepsilon^{(i)}) = \frac{1}{\sqrt{2\pi}\sigma}exp\lgroup-\frac{(\varepsilon^{(i)})^2}{2\sigma^2}\rgroup

帶入得:

p(y^{(i)}\bracevert x^{(i)};\theta) = \frac{1}{\sqrt{2\pi}\sigma}exp\lgroup-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\sigma^2}\rgroup

咱們但願偏差越接近0越好,因爲偏差服從均值爲0的正態分佈,因此對應偏差越接近分佈的中心處越好。咱們能夠近似的用對應機率p來表示當前正態分佈的縱座標值,則因爲各個樣本的偏差互相獨立,因此,將每一個樣本偏差機率相乘,得總似然函數爲:

L(\theta) = \prod_{i=1}^{m} p(y^{(i)}\bracevert x^{(i)};\theta) =  \prod_{i=1}^{m}\frac{1}{\sqrt{2\pi}\sigma}exp\lgroup-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\sigma^2}\rgroup

咱們的問題是但願找到合適的\theta,與咱們的數據組合後儘量的接近真實值 因此咱們須要求解上述似然函數的針對於\theta最大值,即求解最大似然函數

因爲上述似然函數中的累乘運算過於複雜,咱們能夠將其進行轉換,變成對數似然,求加和,即:

上述公式中,m,\sigma,y^{(i)},x^{(i)} 都是已知的,只有\theta 是未知的。 因此咱們的目標是 找出一組\theta,使上述似然函數最大,即求最大似然函數。 因爲只有\theta 是未知的。上述問題能夠轉換爲,求 \sum_ {i=1}^m(y^{(i)}-{\theta^T}x^{(i)})^2 的最小值

最終,得出咱們的目標函數(也稱爲代價函數)爲:

J(\theta) = \frac{1}{2}\sum_ {i=1}^m(y^{(i)}-{\theta^T}x^{(i)})^2 \,\,(此處加上1/2是爲了求偏導時計算方便)

進行向量化:

J(\theta) =\frac{1}{2}(X\theta - y)^T(X\theta - y)

正規方程

要求J(\theta)取得最小值時對應的\theta值,一個辦法就是求偏導。因爲J(\theta)爲凸函數,因此在偏導等於0處取得最小值,此時的\theta即爲咱們所須要的,而且也是最優解 這種直接令偏導等於0,解方程得出\theta的方法稱爲正規方程

\begin{align*}
\nabla_{\theta}J(\theta) &= \nabla_{\theta}(\,\frac{1}{2}(X\theta - y)^T(X\theta - y)\,) \\
&=\nabla_{\theta}(\,\frac{1}{2}(\theta^TX^T - y^T)(X\theta - y)\,)   \\
&=\nabla_{\theta}(\,\frac{1}{2}(\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta+y^T y)\,)   \\
&=\frac{1}{2}(\,2X^TX\theta-X^Ty-(y^TX)^T\,) \\
&= X^TX\theta-X^Ty
\end{align*}

\nabla_{\theta}J(\theta) = 0,得:

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

雖然,經過正規方程,能夠求得最優解,可是,在實際項目中,咱們的樣本數量以及每一個樣本的特徵 數量很是大,這個時候,採用正規方程,算法的時間複雜度過高,耗時過高,甚至因爲樣本呢和特徵過大,或者矩陣不可逆,致使沒法計算。 尤爲對於矩陣求逆來講更是如此。因此,通常對於樣本數量和特徵數量較少時能夠採用此種求解方式。

對於通常狀況,咱們須要採用另一種很是經典的優化算法,即 梯度降低法

梯度降低法

對於直接求解正規方程的方式,首先,並不必定可解,另外,時間複雜度太高。 而機器學習的常規套路,都是使用梯度降低法,去求解最小值問題。

梯度降低背後的思想是:
開始時咱們隨機選擇一組參數(\theta_1,\theta_2,\theta_3,......\theta_n).計算對應代價函數,而後咱們須要尋找下一組能讓代價函數值降低最多的參數組合,一直迭代這個過程,直到最後代價函數值收斂,即找到一個局部最小值. 此時對應的(\theta_1,\theta_2,\theta_3,......\theta_n)即爲咱們須要求的結果.
咱們並無嘗試找出全部的\theta參數組合,因此,不能肯定咱們獲得的局部最小值是不是全局最小值。 可是,對於線性迴歸的代價函數來講,其實自己是個凸優化問題,因此局部最小值即爲全局最小值!

換個思路來理解,好比,你如今站在山上某一點,你須要下山,到達山底(即須要找到最小值點)<br> 在梯度降低算法中,你要作的就是,環顧四周,找到一個方向,往下走一步,而後再從新查找方向,往下走一步,以此循環,直到到達山底。<br> 上述場景中,影響到達山底的因素有兩個,一個是方向,另一個是步長。<br> 要想能快速到底山底,咱們首先須要保證每步走的都是最陡的方向,而後步子邁大點。 而最陡的方向,即爲梯度,又由於是找最小值,因此得沿着負梯度的方向,這就是梯度降低法

下面,咱們正式說下<br> 梯度降低法的基本結構(最小化J(\theta)) (下面表述中的k表示第幾回迭代)<br>

  1. 選擇一個初始點,即選擇一組參數\theta(\theta_1,\theta_2,\theta_3,......\theta_n)
  2. 選取搜索方向d_k = -g(\theta_k),使得函數降低最快
  3. 決定步長\alpha_k,使得J(\theta_k +\alpha_kd_k)對於\alpha_k >= 0最小化,構建\theta_{k+1} = \theta_k + \alpha_kd_k
  4. 能夠開始時設置一個閾值\epsilon,若是 \Arrowvert d_k \Arrowvert <=\epsilon,則中止迭代,輸出解\theta_{k+1},不然繼續重複迭代。 固然咱們也能夠直接設置迭代次數。<br><br> 須要注意下,上述中的\theta_k 指的是第k次迭代時的一組參數,即(\theta_1,\theta_2,\theta_3,......\theta_n)_k

下面說下,梯度降低中的三種方式,即:批量梯度降低,隨機梯度降低和小批量梯度降低

批量梯度降低

批量梯度降低,其實就是在每次迭代中,在更新一組參數\theta(\theta_1,\theta_2,\theta_3,......\theta_n)中的任意一個時,都須要對整個樣本的代價函數J(\theta) 求對應梯度 <br> 他的優勢是 容易獲得最優解,可是因爲每次都須要考慮全部樣本,因此速度很慢

下面看下具體數學表示

對於某次迭代

\begin{align*}
\theta_j &:= {\theta_j} - \alpha\frac{\partial}{\partial\theta_j}J(\theta)  \\
&:=\theta_j -\alpha\frac{\partial}{\partial\theta_j}\frac{1}{2m}\sum_ {i=1}^m(h_{\theta}(x^{(i)}) - y^{(i)})^2 \\
&:= {\theta_j} -\alpha\frac{1}{m}\sum_ {i=1}^m(h_{\theta}(x^{(i)}) - y^{(i)})x_j^{(i)} 
\end{align*}

其中,j = 0,1,2,3,...n,即特徵個數

進行向量化後,對於每次迭代

\theta := \theta - \alpha\frac{1}{m}X^T(X\theta - y)

隨機梯度降低

隨機梯度降低,其實就是在每次迭代中,在更新一組參數\theta(\theta_1,\theta_2,\theta_3,......\theta_n)中的任意一個時,只須要找一個樣本求對應梯度,進行更新。 他的優勢是 迭代速度快,可是不必定每次都朝着收斂的方向
具體數學表示爲:

\theta_j := \theta_j - \alpha(h_{\theta}(x^{(i)}) - y^{(i)})x_j^{(i)}

小批量梯度降低

小批量梯度降低,其實就是在每次迭代中,在更新一組參數\theta(\theta_1,\theta_2,\theta_3,......\theta_n)中的任意一個時,找一部分樣本求對應梯度,進行更新。

\theta_j := {\theta_j} -\alpha\frac{1}{64}\sum_ {k = i}^{i+63}(h_{\theta}(x^{(k)}) - y^{(k)})x_j^{(k)}

小批量梯度降低 其實就是上述兩種方法的權衡,實際應用中,大部分也都用此算法

學習率(步長)

梯度降低法中有兩個因素,一個是方向,即梯度,另一個就是學習率\alpha,也就是步長。

若是學習率太小,則達到收斂(也就是近似接近於最小值)所須要的迭代次數會很是高。 學習率過大,則可能會越過局部最小值點,致使沒法收斂

歡迎關注個人我的公衆號 AI計算機視覺工坊,本公衆號不按期推送機器學習,深度學習,計算機視覺等相關文章,歡迎你們和我一塊兒學習,交流。

相關文章
相關標籤/搜索