1. 程式人生 > >通俗理解線性迴歸(二)

通俗理解線性迴歸(二)

題外話:在上一篇中聊了一下線性迴歸的一些概念和損失函式的形式,那這篇就接著上一篇的思路來聊聊線性迴歸的正規方程解。(如果你是小白,可以點進上一篇的傳送門看看,沒準能讓你對線性迴歸有個大概的認識)

3.怎樣計算出線性迴歸的解?

上一篇中的最後聊到了損失函式是個什麼鬼,看懂了的老鐵們現在應該已經弄清楚了一個事實。那就是我只要找到一組引數(也就是線性方程每一項上的係數)能讓我的損失函式的值最小,那我這一組引數就能最好的擬合我現在的訓練資料。OK,那怎麼來找到這一組引數咩。。。其實要找這一組引數有兩種套路,一種是大名鼎鼎的梯度下降,其大概思路就是根據每個引數對損失函式的偏導來更新引數。另一種就是線性迴歸的正規方程解,這名字聽起來高大上,其實就是根據一個固定的式子來計算出引數。那在這篇博文中,主要聊聊線性迴歸的正規方程解,梯度下降的話,下一篇博文再單獨拎出來聊。

4.正規方程解

正規方程解其實是通過一堆數學運算推出來的式子。這裡呢先給出這個式子的最終形態,然後再揉碎了掰開了聊貨到底怎麼來的。
登登登登登登。。。這貨的完全體長這樣(其中的θ,就是我們要算出來的引數):
在這裡插入圖片描述

那祭出完全體之後,我們就來看看這貨怎麼從幼年期成長到完全體的。。。

在上一篇聊到線性迴歸的損失函式的時候,我們知道了線性迴歸的損失函式是醬紫:
在這裡插入圖片描述
如果我們想用線性迴歸來預測天朝某市的房價的話,式子中的y(i)就是訓練資料中的label,也就是真實的房價,y^(i)呢就是我們線性迴歸模型預測出來結果,也就是預測出來的房價。此時此刻,y(i)其實是已知的。因為既然是監督學習,那資料的label就是已知的。你可以想象成是某房產交易平臺上天朝某市的歷史房價資料,這些資料通常都是用當時真實房價的對不對[/滑稽]。

那y^(i)捏?這個其實就是一個線性表示式,樣子就長這樣:
在這裡插入圖片描述
這個式子其實非常好理解,θ0到θn是我們要求的結果。如果只看θ0到θ1的部分的話,那尼瑪就是個直線方程嘛(y=kx+b),如果只看θ0到θ2的話那還不是三維空間中的一條直線咩。。那拓展到θn的時候,也就是n維空間中的一條線。

那如果用房價這個例子來解釋這個式子的話,就更好理解了。假如X1代表的是房子的總面積,X2代表的是房子的房間數量,X3代表的是樓間距,X4代表的是離學校的距離,等等等等。那這個時候裡面的θ1就代表房子總面積對房價的重要程度,那如果θ1是個比較大的數,那就是說明房子總面積越大,那房價可能就越高。如果θ1等於0,就說明房價的高低跟房子的總面積沒有半毛錢關係。(其他的θ請自行腦補)

那現在雖然已經明白了這個式子代表的意思,但是我們發現這式子太尼瑪長了,而且如果扔給GPU去算的話,GPU會說:MMP,老子可不擅長這件事。這就很尷尬。。。所以我們不妨把這個式子進化一下(亞古。。啊呸。。損失函式進化。。。)。

如果你收悉線代的話,我估計你會有種條件反射。。。。就是看到一個式子的樣子是一堆乘法的加和的話,立馬會想到把它向量化。額,沒錯,接下來就是把那又臭又長的式子給向量化。

如果我們把θ0,θ1,θ2…θn排成一列的話,那其實就是個列向量啦
在這裡插入圖片描述
同樣,如果我們把一行資料中的每個屬性,或者說每個欄位把他排成一行的話,那其實就是個行向量啦(上標i表示房價資料中的第i條資料,因為你歷史資料不可能只有一條嘛。0到n代表每一條資料中0到n個欄位。PS:X0=1
在這裡插入圖片描述
那如果我們把Xi和θ做一個矩陣乘法的話,不就是我們的y^i嘛
在這裡插入圖片描述
所以啊,y^i就進化成了醬紫:
在這裡插入圖片描述

-------------------------------------------我是分割線----------------------------------------------

那剛剛所做的進化僅僅是考慮了資料集中的一條資料,但我們算損失函式的時候,我們是要算所有資料的損失值的和。所以啊,我們還要進化一波。那假如我的房價特徵資料長醬紫:

房子面積 房間數量 樓間距 離學校距離
60 2 10 5000
90 2 7 10000
120 3 8 4000
40 1 4 2000
89 2 10 22000

也就是說X,表示

房子面積 房間數量 樓間距 離學校距離
60 2 10 5000
90 2 7 10000
120 3 8 4000
40 1 4 2000
89 2 10 22000

那OK,剛剛我們知道y^i進化後成了:
在這裡插入圖片描述
現在如果把y^i排成一列的話,不就成了一個矩陣了嘛
在這裡插入圖片描述

也就相當於Xb表示的是

無所謂 房子面積 房間數量 樓間距 離學校距離
1 60 2 10 5000
1 90 2 7 10000
1 120 3 8 4000
1 40 1 4 2000
1 89 2 10 22000

如果這個時候和θ這個列向量做矩陣乘法的話,就能把y^進化成醬紫(如果不知道為什麼能這麼進化。。請預習一下矩陣乘法。。而且請自行腦補結果的形狀):
在這裡插入圖片描述

此時此刻,你會發現,我們的預測房價的公式非常的線性。。這也就是線性迴歸這個名字的由來。

-------------------------------------------我是分割線----------------------------------------------

OJBK,我們已經知道y^的樣子了,那我們不妨回過頭來看看損失函式的樣子。損失函式呢長這樣:
在這裡插入圖片描述
其實損失函式也可以向量化,因為可以把所有的yi排成一列擼成個列向量叫y,y^i也是個列向量叫y ^。然後假設y-y ^這個列向量叫U。那其實y-y ^的平方和就是U的平方和。那U的平方和無非可以想象成U的轉置和U做個矩陣乘法。所以進化後就是醬紫:
在這裡插入圖片描述

這個時候,我們要做的事情就很明朗了。因為y是已知的,Xb是已知的,θ是未知的,也就是說我們要解出θ,讓這個等式成立。接下來我們來看看怎麼解θ!!

-------------------------------------------我是分割線----------------------------------------------
這個時候,我們可以先把式子給展開,展開後成醬紫(J(θ)表示損失函式):
在這裡插入圖片描述
嗯,發現就算展開後θ還是不知道怎麼算。。。但是如果我們算θ對J(θ)的導數的話就知道怎麼算了,因為J(θ)我們是想找一個θ(這時的θ是個向量)來最小化J(θ),所以求導後我們有醬紫的式子:
在這裡插入圖片描述
然後左右一移一就有:
在這裡插入圖片描述
然後兩邊同時乘以X^TX的逆就能得到θ的表示式(θ的完全體):
在這裡插入圖片描述

喏,這就是線性迴歸的正規方程解。也就是說你想用線性迴歸預測房價的話,直接套這個式子算你就能得到一組引數θ。有了θ之後,如果你要預測新的一條房子資料可能的房價的話,套這個式子就能預測出房價啦。
在這裡插入圖片描述

-------------------------------------------我是分割線----------------------------------------------
到此為止,線性迴歸的一些東西已經擼完了。希望當你看到這篇博文後能夠對你有所幫助吧。下一篇可能寫啥還沒想好。。可能是梯度下降吧。。。