1. 程式人生 > >機器學習---線性回歸(Machine Learning Linear Regression)

機器學習---線性回歸(Machine Learning Linear Regression)

包括 rest 梯度下降法 向量 鞍點 麻煩 貝葉斯 div rem

線性回歸是機器學習中最基礎的模型,掌握了線性回歸模型,有利於以後更容易地理解其它復雜的模型。

線性回歸看似簡單,但是其中包含了線性代數,微積分,概率等諸多方面的知識。讓我們先從最簡單的形式開始。

一元線性回歸(Simple Linear Regression):

假設只有一個自變量x(independent variable,也可稱為輸入input, 特征feature),其與因變量y(dependent variable,也可稱為響應response, 目標target)之間呈線性關系,當然x和y之間不會完全是直線關系,而是會有一些波動(因為在現實中,不一定只有一個自變量x會影響因變量y,可能還會有一些其他影響因素,但是這些因素造成的影響並不大,有些只是偶然出現,這些因素被稱之為噪音

),因此我們可以將目標方程式寫為:

技術分享圖片

(a表示斜率,b表示截距,技術分享圖片表示由噪音造成的誤差項,這個誤差是無法減少的)

我們根據n個(x-y pair)觀測值(observations,或者說是樣本samples),想要捕捉x和y之間的關系(不包括噪音)。這樣,當出現新的x值時,我們就可以預測出其對應的y值。不僅如此,我們還能得知特征與目標之間的關聯關系。如果有多個特征存在,那麽可以知道哪些特征與目標之間有關系,關系的強弱分別如何。

技術分享圖片(讀作y-hat)表示對y進行的估計,其方程式是:

技術分享圖片

技術分享圖片技術分享圖片分別表示對a,b參數的估計)

那麽到底怎樣的一條直線可以最好地體現出x和y之間的關系呢?

技術分享圖片

我們肯定希望預測值與實際值之間的誤差越小越好。根據上圖,我們定義一個損失函數LL:

技術分享圖片

只要每個觀測點實際的y值與其在某條直線上對應的y估計值的誤差值(絕對值)的總和最小,那麽這條直線就是對x和y之間的關系的最好估計。

但是LL並不是一個處處可導的函數,數學上處理起來比較麻煩。因此,我們重新定義了一個數學上容易處理的損失函數L,就是實際值與預測值之間的歐式距離平方和

技術分享圖片

只要求出能使L最小的a,b參數估計值,我們就能找到x和y之間最好的對應關系,這被稱為最小二乘回歸(Least Sqaures Regression)

最小二乘其實也是使殘差平方和(RSS, Residual Sum of Squares)最小化。此外,如果從另外一種角度(使用極大似然估計)來看,也能達到和最小二乘同樣的結論。

首先,根據中心極限定理(Central Limit Theorem),如果對總體取樣足夠多,那麽每次取樣的樣本的平均值服從正態分布。據此,我們可以假設由噪音造成的誤差技術分享圖片獨立同分布,且服從平均值為0,方差為σ2的正態分布。而技術分享圖片,因此,y也獨立同分布,且服從平均值為ax+b,方差為σ2的正態分布,其概率密度函數是:技術分享圖片,將其寫成條件概率表達式就是:技術分享圖片。用通俗的話來說:如果對y總體進行n次取樣,每次取1個樣本,只要取樣次數足夠多,樣本就會呈正態分布,有更多的樣本聚集在樣本均值附近,且樣本均值逐漸逼近總體均值。樣本越靠近總體均值肯定越好,因此我們需要使這個概率最大化,可以用極大似然估計法(MLE)來求解,即求出技術分享圖片。這樣就能找到最佳的參數估計值,此參數估計值能使從模型中抽取的n組樣本的概率最大。

由於技術分享圖片有連乘運算,因此我們對似然函數取對數計算,就可以把連乘變成求和:

技術分享圖片

由於技術分享圖片技術分享圖片均為定值,因此求技術分享圖片也就是求技術分享圖片,這和上面說的最小二乘法的形式是一樣的。

現在,只要對損失函數L分別求偏導,令導數為0,也就是讓技術分享圖片技術分享圖片,解出的極值點就是a,b參數的估計值:

技術分享圖片

可以看出,由於最小二乘回歸假設了自變量和因變量之間存在一定的線性關系,因此把問題簡化為尋求線性模型的參數值,而不用去估計整個目標函數(這屬於parametric method)。這樣可能存在的問題就是,如果選擇的模型與自變量和因變量之間的真實關系相差太大,那麽模型就不能做出較為準確的預測。而non-parametric method可以不用做任何假設,因此它沒有上述的問題。但是因為它需要估計整個目標函數,因此需要比parametric method多得多的訓練數據。

最小二乘回歸只是線性回歸模型中的一種,其他的還有k近鄰回歸(k-nearest neighbors regression),貝葉斯線性回歸(Bayesian Linear Regression)等。

近鄰回歸屬於non-parametric method,它把在需要預測的點的x值相鄰一段距離內所有對應的y觀測值取平均數,作為預測的y值。但是這個方法只適用於特征很少的情況,因為特征越多,維度就越大,數據就越稀疏,這樣很難找到足夠對應的觀測點來計算平均值。

貝葉斯線性回歸不同於最小二乘回歸,不是去找到模型參數的最佳估計值,而是確定模型參數的分布。具體來說就是在條件概率的基礎上加上懲罰項(正則化),這個模型的優點是可以防止過擬合,缺點是計算量很大。

多元線性回歸(Multivariate Linear Regression):

上面說的是最簡單的一元線性回歸,那麽如果特征不止一個呢?這時就要用到多元線性回歸,此時目標方程式表示如下:

技術分享圖片

(x1~xn表示n個特征)

學術上通常用θ來表示參數,X表示特征,因此這裏將方程式改寫成:

技術分享圖片

參數θ和特征X可以用向量的方式表示出來:

技術分享圖片

把θ進行轉置,它們之間的乘積可以用矩陣乘法表達式表示出來:

技術分享圖片

技術分享圖片代表對θ的轉置)

因此,目標方程式最終可以寫成:

技術分享圖片

對y的估計就是:

技術分享圖片

對參數θ,b的估計就是:

技術分享圖片

和一元線性回歸一樣,我們對損失函數求導,導數為0的極值點就是對參數θ,b最好的估計。

首先將X表示為 m 行n+1列的矩陣,每行對應一個樣本,每列對應一個特征,外加一維全為1的常數項:

技術分享圖片

把參數θ,b吸收入β向量,表示為:

技術分享圖片

而y用向量表示為:

技術分享圖片

因此,對參數的估計可以改寫成(矩陣表示法):

技術分享圖片

在式子技術分享圖片上對β求導,並令其為0:

技術分享圖片

這樣計算出的β的最佳估計值為:技術分享圖片

但是此方法只在矩陣可逆(滿秩)的情況下可用。有時候特征(矩陣的列)會遠遠多於樣本數(矩陣的行),那麽此時矩陣是不滿秩的, 上述方程式可解出多個解。因此,我們需要找到對大多數情況都適用的方法。

下面介紹幾種常見的求解參數β估計值的算法,分別是批量梯度下降法,隨機梯度下降法和小批量梯度下降法。

在微積分裏面,對多元函數的參數求偏導數,把求得的各個參數的偏導數以向量的形式寫出來,就是梯度 。例如之前所說的損失函數L的梯度就記作▽L。從幾何意義上講,梯度指向函數增加最快的方向。如果我們需要求解損失函數的最大值,那麽就用梯度上升法來叠代;反之,如果我們需要求解損失函數的最小值,就用梯度下降法。

(1)批量梯度下降法(Batch Gradient Descent)

技術分享圖片

(註:此處還是用矩陣表示法;α表示學習速率,也叫步長)

具體可參見這篇文章,已經介紹得很清楚了:https://www.jianshu.com/p/c7e642877b0e

由於批量梯度下降法每次學習都使用整個訓練數據集,因此最後能夠保證凸函數收斂於全局極值點,非凸函數可能會收斂於局部極值點,但是缺點是學習時間太長。

(2)隨機梯度下降法(Stochastic Gradient Descent)

技術分享圖片

隨機梯度下降法是在批量梯度下降法基礎上的優化,一次叠代只用一條隨機選取的數據,因此每次學習非常快,但是可能會引起震蕩。

(3)小批量梯度下降法(Mini-Batch Gradient Descent)

技術分享圖片

小批量梯度下降法結合了批量梯度下降法和隨機梯度下降法的優點,一次叠代多條數據,如果Batch Size選擇合理,不僅收斂速度比SGD更快,而且在最優解附近的跳動也不會很大。

總結:梯度下降算法針對凸函數是可以收斂到全局最優點的,但是很多模型是非線性結構,一般屬於非凸問題,這意味著存在很多局部最優點(鞍點)。采用梯度下降算法可能會陷入局部最優,這是最令人頭疼的問題。因此,人們在梯度下降算法的基礎上又開發了很多其它優化算法,如:Momentum,AdaGrad、AdaDelta、RMSProp、Adam等。梯度下降算法中一個非常重要的參數是學習速率α,適當的學習速率很重要:學習速率過小時收斂速度慢,而過大時導致訓練震蕩,而且可能會發散(diverge)。理想的梯度下降算法要滿足兩點:收斂速度快,能全局收斂。

機器學習---線性回歸(Machine Learning Linear Regression)