一、概述
線性回歸是利用數理統計中的回歸分析,來確定兩種或兩種以上變量間相互依賴的定量關系的一種統計分析方法,在機器學習中屬於監督學習。在數據分析等領域應用十分廣泛。
很多情況下我們都用它進行預測,比如預測房屋價格。在這里用一個簡單的例子來說明,假設有一組房屋數據,為了理解方便,假設決定價格的只有房屋到市中心的距離:
Distance(km) |
Price(¥/m2) |
5 |
100000 |
10 |
80000 |
15 |
60000 |
25 |
50000 |
30 |
30000 |
從上面自擬的數據可以看到,距離越小價格就會越大。那么問題來了,假如你有一套房,距離市中心大約有8km,你想要知道大概能賣多少錢?這個時候線性回歸就起作用了。
將數據大概地繪制成如下的圖,由此可見這套房大致上能賣92000¥
這就是線性回歸,它可以用來預測值。在現實中,決定性的因素絕對不止一個,數據往往是多維的,那就會變得有些復雜了,這時候就需要通過算法來實現了。在學習算法之前,可以先過一下有關的數學知識。
二、數學基礎
1、導數
導數這個概念在高中的時候就接觸了,它的幾何意義為函數y=f(x)在某一點處沿x軸正方向的變化率,通俗地講,代表函數的斜率。
2、偏導數
偏導數的概念其實跟導數差不多,區別就在於偏導數一般是對於多元函數而言,y=f(x1,x2,…,xn)在某一點處沿某一坐標軸(x1,x2,…,xn)正方向的變化率。也就是說,函數對x1的偏導即為函數在x1方向上的變化率。
3、方向導數
方向導數是建立偏導數的基礎上的一個數學定義,偏導是指在正方向的變化率,而方向導數是指在其他特定方向上的變化率。以二元函數為例,假設已知x,y方向上的偏導,那么方向導數就可以是圖中藍色箭頭方向上的數值(不要被圖片迷惑了,它可以是其他任意方向上的數值,而且它是個標量)。
4、梯度
梯度是一個向量,即有方向有大小,它的方向是最大方向導數的方向,它的值是最大方向導數的值。就跟介紹方向導數的圖那樣,藍色的矢量,代表的就是梯度。
三、算法介紹
在線性回歸中,回歸方程為:,通過這個方程得到的預測值往往與真實值y之間會存在誤差。令誤差為
,則預測值與真實值之間的關系就可以表示為
,我們希望求出來的
使得誤差最小。因此,我們假設
服從均值為0,方差為
的正態分布,根據正態分布的概率密度函數可得
,其中
==
。
為了使得誤差盡可能的小,根據上式,我們可以令,這個公式表示求使得預測值更接近於真實值的
值的概率,因此我們希望它的值越大越好。接下來進行最大似然估計:
,相比於累加,這個公式累乘計算的難度會更大,所以不妨把它轉換成對數形式,如下圖所示:
最后得到: ,在這個式子中,起關鍵作用的式子是
,我們稱它為代價函數(Cost Function)。我們希望代價函數越小越好,因此我們需要求它的極小值,或者說局部最小值。假如只有一個,那么這個代價函數的圖像可以這樣表示:
可以看到,當曲線的斜率為0,即函數的導數值為0時,函數值最小。這只是對於一元函數而言,可事實上我們的數據是很多維度的,因此我們就需要通過梯度來得到我們需要的值。於是,梯度下降算法就出現了。
梯度下降算法是這樣的:
repeat until convergence {
;
}
其中,稱為速率因子,表示梯度下降的速度。對於這個算法,通俗點說,假設初始的時候某個點在曲面(曲線)上,它找到相對比較“陡峭”的方向,沿着這個方向“下坡”,直到最低點為止。在這里需要注意的一點是,
的值不宜太小也不宜太大,太小會使得“下坡”的次數很多,影響效率;太大的話可能會錯過最低點。通常我們可以通過斜率的值改變
的值。