【機器學習演算法推導】簡單線性迴歸與多元線性迴歸
線性迴歸,主要用於從資料中擬合出一條直線(或更高維的平面),這條直線能夠很好地體現資料的特徵,比如,它能夠使得平面上的點都均勻地分佈在這條直線上。
演算法思想
對於簡單線性迴歸和多元線性迴歸,其演算法過程是相同的,不同之處在於簡單線性迴歸只有一個特徵需要擬合,多元線性迴歸有n個。線上性迴歸中,我們的資料集擁有一定的引數和相應的輸出,令
表示第i個數據的引數,
表示第i個數據的輸出,令目標函式
,這是我們最終得到的函式,其中x1,x2,…,xn為我們擁有的一個個已知引數,比如我們的線性迴歸最終要預測房價,那麼這裡的x可能是房屋大小,離市中心的距離等等條件,函式的最終輸出就是預測值。其中的θ都是未知的。不同的θ對應著不同的直線,為了得到最佳的擬合直線,我們的目標就是找到最佳的θ。因此線性迴歸的任務如下:
其中
表示函式的預測值與實際值的平方誤差(square error)。由於我們有若干的資料,因此對他們的平方誤差計算後累加,由於相加後誤差會變大,因此我們取一個均值除以m,最後再除以2的原因是,方便後面的計算(2可以被約掉),並且多除一個2並不會影響整個式子的意義。
損失函式
定義 ,其中的 作為損失函式,它定義了預測值與實際值之間的一種聯絡,當損失函式的值越小時,說明預測值與實際值越接近,從而我們的目標變為找到合適的θ使得損失函式的值越小越好。
梯度下降
梯度下降(Gradient Descent)演算法是機器學習中一種常用的演算法,可以用來最小化我們的損失函式。損失函式並不止上面用到的這種,還包括其他各種各樣的損失函式,都可以利用梯度下降來找到一個區域性最優解。
梯度下降演算法的思想是這樣的:對於一個由若干個θ形成的直線、曲線或者平面或其他形狀,我們隨機地給θ賦初始值,它必定位於影象上的某個位置,在那個位置上,尋找一個最陡的方向往下走,重複這個步驟,最終肯定能夠到達某個點,並且沒有比他更低的點,此時我們就找到了最優解。
所謂的“最陡”怎麼定義的呢?我們知道一條曲線,最陡的地方就是它的切線方向,因此我們可以通過求導的方式來得到它,對於多元函式,我們需要用到偏導來求。因此得到引數的更新公式如下:
學習率
其中α定義為學習率,直觀上看就是每次更新時的步長。當α較小時,每次更新變化的數值都比較小,因此可能需要多次迭代才能到達最優解。當α較大時,每次更新變化的數值較大,可能會跳過最低點,甚至導致無法收斂的情況。通常a從0.001,0.01,0.1,1這些值裡面嘗試。
計算公式
在簡單線性迴歸的情況下,有
。
當j=0時,
當j=1時,