【機器學習】線性迴歸

本文轉載自:知識庫-線性迴歸

前段時間其實已經寫過三篇關於迴歸類問題的博客,但是那三篇主要注重的是代碼練習。本篇博客注重的理論分析。而且對各類迴歸問題做一個總結,包括一元線性迴歸,多元線性迴歸,邏輯迴歸,嶺迴歸,softmax迴歸。以前在學習的時候感覺這部分很通暢,沒遇到什麼大問題,但是昨天覆習的時候竟然被幾個簡單概念給卡主了,最後還是開了吳恩達教授的視頻才恍然大悟的,哎正不知道該說什麼了。

在正式分析之前,先簡單講幾個概念,後面還會詳細分析。

1、梯度下降算法。是一種優化算法,優化就是求解一個函數的最大值或最小值。我們在尋找最佳參數時,按照參數梯度的方向去尋找,才能最快的找到最佳解。

2、損失函數。這部分在複習時,把我卡住了。原來在學習的時候很順暢,但是昨天,有很多細節就是想不通。損失函數就是衡量我們找的參數是不是最佳的函數,那怎麼衡量呢?最直觀的感覺就是拿預測值和真實值比較,計算一下差異。如果差異越大說明我們找到的參數越差,差異越小說明我們的參數越好。損失函數就是基於這個原理設計的。

正式開講:

1、線性迴歸

1.1 一元線性迴歸

分解:一元:和數學中的概念相同,指的是函數中只有一個變量(一般用x表示)

   線性:是說我們要尋找的預測函數是線性的,也就是直線函數

   迴歸:就是根據現有數據擬合出一個函數,利用這個函數可以對新數據進行預測,得到預測值。

        

下面我們來舉例何爲一元線性迴歸分析,圖1爲某地區的房屋面積(feet)與價格($)的一個數據集,在該數據集中,只有一個自變量面積(feet),和一個因變量價格($),所以我們可以將數據集呈現在二維空間上,如圖2所示。利用該數據集,我們的目的是訓練一個線性方程,無限逼近所有數據點,然後利用該方程與給定的某一自變量(本例中爲面積),可以預測因變量(本例中爲房價)。本例中,訓練所得的線性方程如圖3所示。

                                                  

 圖1、房價與面積對應數據集

                                            

                                                          圖2、二維空間上的房價與面積對應圖

 

                                                                                 圖3、線性逼近

同時,分析得到的線性方程爲:


        1.2 多元線性迴歸

       多元線性迴歸於一元線性迴歸的區別就在於變量的數量。

  因此,我將兩個放在一起分析。

接下來還是該案例,舉一個多元線性迴歸的例子。如果增添了一個自變量:房間數,那麼數據集可以如下所示:

                                  

                                                         圖4、房價與面積、房間數對應數據集

那麼,分析得到的線性方程應如下所示:

因此,無論是一元線性方程還是多元線性方程,可統一寫成如下的格式:

上式中x0=1,而求線性方程則演變成了求方程的參數ΘT

線性迴歸假設特徵和結果滿足線性關係。其實線性關係的表達能力非常強大,每個特徵對結果的影響強弱可以有前面的參數體現,而且每個特徵變量可以首先映射到一個函數,然後再參與線性計算,這樣就可以表達特徵與結果之間的非線性關係。


 從上面的兩個例子中我們可以看到,線性迴歸最終要找的就是h(x)函數,而h(x)函數是由參數θ決定,因此我們最終的目的是找到最佳的θ。這就用到了梯度下降算法。

1.3 梯度下降算法

我們怎樣評價我們找到的參數是否最佳呢?這就需要用到損失函數。對線性迴歸損失函數如下:


前面的係數是爲了求導方便而添加的,我們可以看到括號中計算的就是預測值與真實值的差值,之所以對其進行平方操作,因爲差值有正有負,進行求和有可能爲0,這不是我們想要的。損失函數越小就表示預測值與真實值的差異越小,即我們的h(x)越好。因此最終問題轉化成了計算損失函數的最小值問題。

在介紹利用梯度下降求最小值前,先來感受下什麼是梯度下降。

     

梯度下降法是按下面的流程進行的:

1)首先對θ賦值,這個值可以是隨機的,也可以讓θ是一個全零的向量。

2)改變θ的值,使得J(θ)按梯度下降的方向進行減少。

爲了更清楚,給出下面的圖:

                                                    image 

這是一個表示參數θ與誤差函數J(θ)的關係圖,θ0,θ1表示θ向量的兩個維度。J(θ)表示高度。J(θ)的最小值就是圖形的谷底所代表的值。那怎麼樣才能快速的到大谷底呢?我們做個假設,如果你是一個極限運動愛好者,正在玩山地速降,如果你想讓速度更快,你一定是找坡度比較陡的坡向下衝。梯度下降算法是一樣的,沿着坡陡的地方,才能快速到大谷底。在數學上陡坡就是梯度大的地方。

在上面提到梯度下降法的第一步是給θ給一個初值,假設隨機給的初值是在圖上的十字點。

然後我們將θ按照梯度下降的方向進行調整,就會使得J(θ)往更低的方向進行變化,如圖所示,算法的結束將是在θ下降到無法繼續下降爲止。

                                                          image 

當然,可能梯度下降的最終點並非是全局最小點,可能是一個局部最小點,可能是下面的情況:

                                                              image

上面這張圖就是描述的一個局部最小點,這是我們重新選擇了一個初始點得到的,看來我們這個算法將會在很大的程度上被初始點的選擇影響而陷入局部最小點

有了梯度下降算法,下面我們利用梯度下降算法進行參數跟新的推到。


上式中的導數部分就是梯度,theta按照負梯度的方向調整。

最重要的來了,這個梯度怎麼求呀!別擔心,仔細看下面的推導。

我當時卡主的地方就是對(h(x)- y)求導,我當時把h(x)想成邏輯迴歸中的sigma函數了,在線性迴歸中h(x)是線性函數。

有了上面的推導,公式5就演變成了


我們可以看到最後梯度部分就變成了減法和乘法運算。是不是很高興呢?


1.4 隨機梯度下降

       我們再次看看上式中有個求和的操作,如果我們的數據很多幾十萬個,我們就要瘋了,這計算量也忑大了吧。別擔心,爲了因對這個問題,隨機梯度應運而生。

         其實,前面講的梯度下降算法稱之爲批量下降,在批量下降算法中損失函數計算的是所有預測值和真實值之間的差異,而在隨機梯度中我們只關心當前輸入數據的預測值與真實值之間的差異,那這樣計算量就小很多。但是,相較於批量梯度下降算法而言,隨機梯度下降算法使得J(Θ)趨近於最小值的速度更快,但是有可能造成永遠不可能收斂於最小值,有可能一直會在最小值周圍震盪,但是實踐中,大部分值都能夠接近於最小值,效果也都還不錯。

修改完損失函數後,參數跟新推導和批量梯度是一樣的,這裏就不再寫了,最終的結果是:




本來想把迴歸問題總結成一個博客,但是發現已經寫了不少了,只能放到下一篇博客了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章