1. 程式人生 > >線性迴歸演算法原理推導講解

線性迴歸演算法原理推導講解

線性迴歸演算法

       線性迴歸演算法是機器學習中最基本的一個演算法,但是該演算法的思想、原理相當重要。本文將詳細從原理上講解線性迴歸演算法

       從一個例子引入:想象一下,假如我要去銀行貸款,銀行會問我兩個問題,一是工資、二是年齡。根據我的回答,銀行將計算出能貸多少給我。

       目標:預測銀行會貸給我多少錢(貸款額度),標籤;是一個具體的值,屬於迴歸問題。

       資料:工資和年齡這兩個特徵

       考慮:工資和年齡都會最終影響到貸款額度,那麼工資和年齡對貸款額度的影響權重是多少?

如下表:

x0 工資 x1 年齡 x2 貸款額度 y
1 4000 25 20000
1 8000 30 70000
1 5000 28 35000
1 7500 33 50000
1 12000 40 85000

此表有5個樣本(5行),特徵x1表示工資,特徵x2表示年齡,預測貸款額度y(具體資料),特徵x0為方便矩陣計算而插入的資料(可以這樣理解,1x任何數=任何數,只是起到佔位的功能)

通俗的解釋就是輸入x1、x2(工資、年齡),輸出銀行的貸款額度y。即畫出一條"線,面"來擬合我們的資料點。如下圖:

如何擬合出這樣一條最合適的“線,面”呢?上圖中,紅色點為真實值,每一個紅色點到面的距離為一個誤差,線段的長短表示誤差的絕對值,面上或面下的紅色點分別表示了誤差的正負。 數學推導來了!直接上圖片吧

備註:偏置項引數對結果的影響小於權重引數對結果的影響。對第三行化簡得到的式子解釋一下,有多少個特徵x有多少個引數theta

誤差,這是一個非常核心的概念,貫穿整個機器學習的過程

1000個樣本就有1000個誤差,10000個樣本就有一萬個誤差,誤差是獨立並且有相同分佈,並且都服從均值為0的高斯分佈,由誤差組成的矩陣為實對稱矩陣,實對稱矩陣的平方=該矩陣的轉置x該矩陣本身。這是概率論的知識。

獨立:張三和李四一起來貸款,他倆沒有任何關係(獨立的兩個樣本)。

同分布:他倆都來的是我們假定的這家銀行(貸款金額計算規則一樣)。

高斯分佈:銀行可能會多給,也可能會少給,但絕大多數情況下這個浮動不會太大,極小情況下浮動會比較大,符合正常情況。高斯分佈大概長成這樣:

接著上面的數學推導

似然函式:通俗講,假設我去賭場賭博,可是我不知道我今天能不能贏錢(不知道今天賭場服從什麼規則),於是我堵在賭場門口,出來一個人問一個人,總共問了10個人,有9個人都說贏錢了,1個人輸了。這時我就能認為,只要我進去賭錢,90%的概率能夠贏錢,賭場的規則對於每個樣本是一樣的。似然函式就是通過樣本估計引數的值,也就是引數估計,通過觀察一批樣本就可以推匯出賭場服從theta引數的規則。

得到如下的似然函式:

似然函式解釋:什麼樣的引數跟我們的資料組合後恰好是真實值(樣本估計引數)。

對數似然函式:計算機處理加法效率高於乘法。乘積的對數=對數的和,取對數並化簡得到如下圖所示:

似然函式是越大越好,對數似然函式也是越大越好,要想讓對數似然越大,只需讓目標函式J(Θ)越小,即:

最小二乘法相當重要,全稱為最小化誤差的平方和,使得擬合物件無限接近真實物件。

這裡解釋一個很重要的問題,為什麼是平方的問題

答:上面的推導是通過求解極大似然函式而得到了平方,下面從幾何的角度直觀的解釋這個問題。假設有一條直線y=ax+b,要在直線上找到一個點,使得該點到定點(x0,y0)的距離最短。

        1、如果用絕對值得方法尋找,也就是取min(|y-y0|+|x-x0|),由於絕對值最小為0,所以最小的情況就是x=x0或者y=y0處,如下圖所示:

        2、如果採用平方和的方法尋找,就是取點到直線的垂直距離,也就是數學中最常見的數學的概念。如下圖所示:

因此,相比於絕對值的方法,取平方的方法可以得到更短的距離,使得擬合函式接近真實值。這是從範數的角度回答了這個問題,絕對值對應的範數是1,平方(最小二乘法)對應的範數是2。完美的解釋了最小二乘法為什麼能應用到線性迴歸中,知其然也知其所以然。

面試必問:1、為什麼要引入似然函式?

                  2、為什麼要對似然函式進行對數變換?

                  3、為什麼要讓目標函式越小越好?

                  4、為什麼範數是2不是1?

接下來就是對目標函式J(Θ)的求解,什麼樣的Θ能使目標函式最小,解Θ。

接下來涉及到矩陣的求偏導公式,簡單的有四個,如下:

Y = A * X --> DY/DX = A' Y = X * A --> DY/DX = A Y = A' * X * B --> DY/DX = A * B' Y = A' * X' * B --> DY/DX = B * A'

按照公式帶入求解就可得到如下圖:

根據高數知識,要求最小值,只需令偏導數等於零(方程兩端乘以對應的逆矩陣),即可解出Θ,如下圖,矩陣X,Y已知,可得出Θ向量

現在我們把Θ解出來得到一個三行一列的列向量(具體資料我也沒帶入計算),解出了兩個權重引數和一個偏置項引數

接下來談談這樣做的不足:

1、這與機器學習本身有矛盾,機器學習應該是一個逐步求解優化的過程,而不是一下得到精確答案的過程(當然上面的解法沒有錯,只是線性迴歸是數學上的一個巧合,剛好可以解出最精確的答案,不需要一步一步迭代求解)。

2、由結果可以看出,前提得要求(X的轉置乘以X)可逆,否則無法解出結果。

綜上,以上就是我對線性迴歸演算法的理解,希望對你有所幫助,機器學習小白,有誤之處,萬望諒解,喜歡博主就關注一波吧,會持續更新相關內容!