通俗理解線性迴歸(一)

0 什麼是迴歸?

假設線性迴歸是個黑盒子,那按照程序員的思維來說,這個黑盒子就是個函數,然後呢,我們只要往這個函數傳一些參數作爲輸入,就能得到一個結果作爲輸出。那回歸是什麼意思呢?其實說白了,就是這個黑盒子輸出的結果是個連續的值。如果輸出不是個連續值而是個離散值那就叫分類。那什麼叫做連續值呢?非常簡單,舉個栗子:比如我告訴你我這裏有間房子,這間房子有40平,在地鐵口,然後你來猜一猜我的房子總共值多少錢?這就是連續值,因爲房子可能值80萬,也可能值80.2萬,也可能值80.111萬。再比如,我告訴你我有間房子,120平,在地鐵口,總共值180萬,然後你來猜猜我這間房子會有幾個臥室?那這就是離散值了。因爲臥室的個數只可能是1, 2, 3,4,充其量到5個封頂了,而且臥室個數也不可能是什麼1.1, 2.9個。所以呢,對於ML萌新來說,你只要知道我要完成的任務是預測一個連續值的話,那這個任務就是迴歸。是離散值的話就是分類。(PS:目前只討論監督學習)

1 線性迴歸

OK,現在既然已經知道什麼是迴歸,那現在就要來聊一聊啥叫線性。其實這玩意也很簡單,我們在上初中的時候都學過直線方程對不對?來來來,我們來回憶一下直線方程是啥?

y = k x + b

喏,這就是初中數學老師教我們的直線方程。那上過初中的同學都知道,這個式子表達的是,當我知道k(參數)和b(參數)的情況下,我隨便給一個x我都能通過這個方程算出y來。而且呢,這個式子是線性的,爲什麼呢?因爲從直覺上來說,你都知道,這個式子的函數圖像是條直線。。。。從理論上來說,這式子滿足線性系統的性質。(至於線性系統是啥,我就不扯了,不然沒完沒了)那有的同學可能會覺得疑惑,這一節要說的是線性迴歸,我扯這個low逼直線方程幹啥?其實,說白了,線性迴歸無非就是在N維空間中找一個形式像直線方程一樣的函數來擬合數據而已。比如說,我現在有這麼一張圖,橫座標代表房子的面積,縱座標代表房價。
這裏寫圖片描述
然後呢,線性迴歸就是要找一條直線,並且讓這條直線儘可能地擬合圖中的數據點。
那如果讓1000個老鐵來找這條直線就可能找出1000種直線來,比如這樣
這裏寫圖片描述
這樣
這裏寫圖片描述
或者這樣
這裏寫圖片描述
喏,其實找直線的過程就是在做線性迴歸,只不過這個叫法更有逼格而已。。。

2 損失函數

那既然是找直線,那肯定是要有一個評判的標準,來評判哪條直線纔是最好的。OK,道理我們都懂,那咋評判呢?其實簡單的雅痞。。。只要算一下實際房價和我找出的直線根據房子大小預測出來的房價之間的差距就行了。說白了就是算兩點的距離。當我們把所有實際房價和預測出來的房價的差距(距離)算出來然後做個加和,我們就能量化出現在我們預測的房價和實際房價之間的誤差。例如下圖中我畫了很多條小數線,每一條小數線就是實際房價和預測房價的差距(距離)
這裏寫圖片描述
然後把每條小豎線的長度加起來就等於我們現在通過這條直線預測出的房價與實際房價之間的差距。那每條小豎線的長度的加和怎麼算?其實就是歐式距離加和,公式如下。(其中y(i)表示的是實際房價,y^(i)表示的是預測房價)
這裏寫圖片描述
這個歐氏距離加和其實就是用來量化預測結果和真實結果的誤差的一個函數。在ML中稱它爲損失函數(說白了就是計算誤差的函數)。那有了這個函數,我們就相當於有了一個評判標準,當這個函數的值越小,就越說明我們找到的這條直線越能擬合我們的房價數據。所以說啊,線性迴歸無非就是通過這個損失函數做爲評判標準來找出一條直線。

剛剛我舉的例子是一維的例子(特徵只有房子大小),那現在我們假設我的數據中還有一個特徵是樓間距,那圖像可能就是醬紫了。
這裏寫圖片描述
從圖我們可以看得出來,就算是在二維空間中,還是找一條直線來擬合我們的數據。所以啊,換湯不換藥,損失函數還是這個歐式距離加和。
這裏寫圖片描述


先寫到這裏,因爲如果篇幅太長,對於萌新來說不太友好,而且後面想用人話來聊聊線性迴歸的正規方程解,所以先蓄個力。