1. 程式人生 > >【機器學習演算法推導】簡單線性迴歸與多元線性迴歸

【機器學習演算法推導】簡單線性迴歸與多元線性迴歸

線性迴歸,主要用於從資料中擬合出一條直線(或更高維的平面),這條直線能夠很好地體現資料的特徵,比如,它能夠使得平面上的點都均勻地分佈在這條直線上。

演算法思想

對於簡單線性迴歸和多元線性迴歸,其演算法過程是相同的,不同之處在於簡單線性迴歸只有一個特徵需要擬合,多元線性迴歸有n個。線上性迴歸中,我們的資料集擁有一定的引數和相應的輸出,令 x ( i

) x^{(i)} 表示第i個數據的引數, y ( i )
y^{(i)}
表示第i個數據的輸出,令目標函式 H θ ( x (
i ) ) = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n H_θ(x^{(i)})=θ_0+θ_1x_1+θ_2x_2+...+θ_nx_n
,這是我們最終得到的函式,其中x1,x2,…,xn為我們擁有的一個個已知引數,比如我們的線性迴歸最終要預測房價,那麼這裡的x可能是房屋大小,離市中心的距離等等條件,函式的最終輸出就是預測值。其中的θ都是未知的。不同的θ對應著不同的直線,為了得到最佳的擬合直線,我們的目標就是找到最佳的θ。因此線性迴歸的任務如下:
min θ 1 , θ 2 , . . . θ n { 1 2 m i = 1 m ( h θ ( x ( i ) ) y ( i ) ) 2 } \min \limits_{θ_1,θ_2,...θ_n}\{\frac{1}{2m}\sum_{i=1}^{m}(h_θ(x^{(i)})-y^{(i)})^2\}
其中 ( h θ ( x ( i ) ) y ( i ) ) 2 (h_θ(x^{(i)})-y^{(i)})^2 表示函式的預測值與實際值的平方誤差(square error)。由於我們有若干的資料,因此對他們的平方誤差計算後累加,由於相加後誤差會變大,因此我們取一個均值除以m,最後再除以2的原因是,方便後面的計算(2可以被約掉),並且多除一個2並不會影響整個式子的意義。

損失函式

定義 J ( θ 0 , θ 1 , . . . , θ n ) = 1 2 m i = 1 m ( h θ ( x ( i ) ) y ( i ) ) 2 J(θ_0,θ_1,...,θ_n)=\frac{1}{2m}\sum_{i=1}^{m}(h_θ(x^{(i)})-y^{(i)})^2 ,其中的 ( h θ ( x ( i ) ) y ( i ) ) 2 (h_θ(x^{(i)})-y^{(i)})^2 作為損失函式,它定義了預測值與實際值之間的一種聯絡,當損失函式的值越小時,說明預測值與實際值越接近,從而我們的目標變為找到合適的θ使得損失函式的值越小越好。

梯度下降

梯度下降(Gradient Descent)演算法是機器學習中一種常用的演算法,可以用來最小化我們的損失函式。損失函式並不止上面用到的這種,還包括其他各種各樣的損失函式,都可以利用梯度下降來找到一個區域性最優解。
梯度下降演算法的思想是這樣的:對於一個由若干個θ形成的直線、曲線或者平面或其他形狀,我們隨機地給θ賦初始值,它必定位於影象上的某個位置,在那個位置上,尋找一個最陡的方向往下走,重複這個步驟,最終肯定能夠到達某個點,並且沒有比他更低的點,此時我們就找到了最優解。
所謂的“最陡”怎麼定義的呢?我們知道一條曲線,最陡的地方就是它的切線方向,因此我們可以通過求導的方式來得到它,對於多元函式,我們需要用到偏導來求。因此得到引數的更新公式如下:
θ j : = θ j α θ J ( θ 0 , θ 1 , . . . , θ n ) θ_j:=θ_j-α\frac{∂}{∂θ}J(θ_0,θ_1,...,θ_n)

學習率

其中α定義為學習率,直觀上看就是每次更新時的步長。當α較小時,每次更新變化的數值都比較小,因此可能需要多次迭代才能到達最優解。當α較大時,每次更新變化的數值較大,可能會跳過最低點,甚至導致無法收斂的情況。通常a從0.001,0.01,0.1,1這些值裡面嘗試。

計算公式

在簡單線性迴歸的情況下,有 h θ ( x ( i ) ) = θ 0 + θ 1 x 1 h_θ(x^{(i)})=θ_0+θ_1x1
當j=0時, θ 0 J ( θ 0 , θ 1 ) = 1 m i = 1 m ( h θ ( x ( i ) ) y ( i ) ) \frac{∂}{∂θ_0}J(θ_0,θ_1)=\frac{1}{m}\sum_{i=1}^{m}(h_θ(x^{(i)})-y^{(i)})
當j=1時, θ 1 J ( θ 0 , θ 1 ) = 1 m i = 1 m ( h θ ( x ( i ) ) y ( i ) ) x (