線性回歸是機器學習中最基礎的算法,掌握了線性回歸算法,有利於以后更容易地理解其它復雜的算法。
線性回歸看似簡單,但是其中包含了線性代數,微積分,概率等諸多方面的知識。讓我們先從最簡單的形式開始。
一元線性回歸(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進行的估計,對於某些觀測值,
>
,而對於另一些觀測值,
<
。
我們假設由噪音造成的誤差獨立同分布,且服從平均值為0,方差為σ2的正態分布,那么
的方程式就是:
(,
分別表示對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)等。
k近鄰法屬於non-parametric method,它把在需要預測的點的x值相鄰一段距離內所有對應的y觀測值取平均數,作為預測的y值。但是這個方法只適用於特征很少的情況,因為特征越多,維度就越大,數據就越稀疏,這樣很難找到足夠對應的觀測點來計算平均值。
貝葉斯線性回歸不同於最小二乘回歸,不是去找到模型參數的最佳估計值,而是確定模型參數的分布。具體來說就是在條件概率的基礎上加上懲罰項(正則化),這個模型的優點是可以防止過擬合,缺點是計算量很大。
多元線性回歸(Multivariate Linear Regression):
上面說的是最簡單的一元線性回歸,那么如果特征不止一個呢?這時就要用到多元線性回歸,此時目標方程式表示如下:
(x1~xp表示p個特征)
參數a,b,特征x以及目標y可以用向量和矩陣的方式表示出來。
首先將特征表示為 n行p+1列的矩陣,每行對應一個樣本,每列對應一個特征,外加一維全為1的常數項,記作大寫X(因為X是一個matrix):
(n代表樣本數量,p代表特征數量)
然后將目標表示為向量,記作小寫y(因為y是一個vector) :
誤差項也同理。
學術上通常用θ來表示參數,因此把參數a,b吸收入θ向量,表示為:
特征和參數之間的乘積可以用矩陣乘法表達式表示出來:
因此,目標方程式最終可以寫成:
對y的估計就是:
對參數θ的估計就是:
和一元線性回歸一樣,我們對損失函數求偏導,導數為0的極值點就是對參數θ最好的估計。
具體過程如下,首先展開式子:
得到的結果是
的標量,對於標量
:
,因此:
把此結果代入上式:
對上式進行求導:
令導數為0(導數為向量形式),這樣計算出的θ的最佳估計值為:(其中,
稱為偽逆矩陣,有(p+1)行n列)
但是這種矩陣解析方程式的方法只在矩陣可逆(滿秩)的情況下可用。有時候特征之間相互關聯,又或者特征數大於樣本數,那么此時矩陣是不滿秩的, 上述方程式可解出多個解。即使矩陣是滿軼的,但是如果矩陣特別大,那么計算這樣一個矩陣的逆是相當耗費時間的。因此,我們需要找到更有效的解決方法。
(注:對於特征數大於樣本數的情況,最小二乘回歸已不適用,因為在這種情況下會非常容易導致過擬合,解決的辦法是進行特征選擇)
下面介紹幾種常見的求解參數θ估計值的算法,分別是批量梯度下降法,隨機梯度下降法和小批量梯度下降法。
在微積分里面,對多元函數的參數求偏導數,把求得的各個參數的偏導數以向量的形式寫出來,就是梯度 。例如之前所說的損失函數L的梯度就記作▽L。從幾何意義上講,梯度指向函數增加最快的方向。如果我們需要求解損失函數的最大值,那么就用梯度上升法來迭代;反之,如果我們需要求解損失函數的最小值,就用梯度下降法。
(1)批量梯度下降法(Batch Gradient Descent)
(注:此處還是用矩陣表示法;α表示學習速率,也叫步長)
由於批量梯度下降法每次學習都使用整個訓練數據集,因此最后能夠保證凸函數收斂於全局極值點,非凸函數可能會收斂於局部極值點,但是缺點是學習時間太長。
(2)隨機梯度下降法(Stochastic Gradient Descent)
隨機梯度下降法是在批量梯度下降法基礎上的優化,一次迭代只用一條隨機選取的數據,因此每次學習非常快,但是容易引起振盪。
(3)小批量梯度下降法(Mini-Batch Gradient Descent)
小批量梯度下降法結合了批量梯度下降法和隨機梯度下降法的優點,一次迭代多條數據,如果Batch Size選擇合理,不僅收斂速度比隨機梯度下降法更快,而且在最優解附近的振盪也不會很大。
總結:梯度下降算法針對凸函數是可以收斂到全局最優點的,但是很多模型是非線性結構,一般屬於非凸問題,這意味着存在很多局部最優點(鞍點)。采用梯度下降算法可能會陷入局部最優,這是最令人頭疼的問題。因此,人們在梯度下降算法的基礎上又開發了很多其它優化算法,如:Momentum,AdaGrad、AdaDelta、RMSProp、Adam等。梯度下降算法中一個非常重要的參數是學習速率α,適當的學習速率很重要:學習速率過小時收斂速度慢,而過大時會導致振盪,而且可能會發散(diverge)。理想的梯度下降算法要滿足兩點:收斂速度快,能全局收斂。
線性回歸模型的優點:速度快,容易解釋
線性回歸模型的缺點:預測效果通常比復雜模型差