首先舉個樣例。若是咱們有一個二手房交易記錄的數據集。已知房屋面積、臥室數量和房屋的交易價格,例如如下表:算法
假若有一個房子要賣,咱們但願經過上表中的數據估算這個房子的價格。函數
這個問題就是典型的迴歸問題,這邊文章主要講迴歸中的線性迴歸問題。post
首先要明確什麼是迴歸。學習
迴歸的目的是經過幾個已知數據來預測還有一個數值型數據的目標值。優化
若是特徵和結果知足線性關係,即知足一個計算公式h(x)。這個公式的自變量就是已知的數據x,函數值h(x)就是要預測的目標值。url
這一計算公式稱爲迴歸方程,獲得這個方程的過程就稱爲迴歸。spa
線性迴歸就是若是這個方式是一個線性方程。即若是這個方程是一個多元一次方程。以我們上面提到的樣例爲例:若是房子的房屋面積和臥室數量爲自變量x,用x1表示房屋面積。x2表示臥室數量。房屋的交易價格爲因變量y,咱們用h(x)來表示y。若是房屋面積、臥室數量與房屋的交易價格是線性關係。他們知足公式3d
上述公式中的θ爲參數,也稱爲權重。可以理解爲x1和x2對h(x)的影響度。對這個公式稍做變化就是orm
公式中θ和x是向量。n是樣本數。blog
假如咱們根據這個公式來預測h(x)。公式中的x是咱們已知的,然而θ的取值殊不知道,僅僅要咱們把θ的取值求解出來,咱們就可以根據這個公式來作預測了。
那麼怎樣根據訓練數據求解θ的最優取值呢?這就牽扯到另一個概念:損失函數(Loss Function)。
咱們要作的是根據咱們的訓練集。選取最優的θ,在咱們的訓練集中讓h(x)儘量接近真實的值。
h(x)和真實的值之間的差距。咱們定義了一個函數來描寫敘述這個差距。這個函數稱爲損失函數,表達式例如如下:
這裏的這個損失函數就是著名的最小二乘損失函數。這裏還涉及一個概念叫最小二乘法。這裏再也不展開了。
咱們要選擇最優的θ,使得h(x)近期進真實值。這個問題就轉化爲求解最優的θ,使損失函數J(θ)取最小值。
那麼怎樣解決這個轉化後的問題呢?這又牽扯到一個概念:梯度降低(Radient Descent)
(對的朋友,你沒有看錯,不是梯度降低,是LMS算法。
耐心點,梯度降低一下子就出來了)
咱們先來看當訓練樣本僅僅有一個的時候的狀況,而後再將訓練樣本擴大到多個的狀況。訓練樣本僅僅有一個的狀況。咱們借鑑LMS算法的思想。擴大到多個咱們稍後說。
咱們要求解使得J(θ)最小的θ值。LMS算法大概的思路是:咱們首先隨便給θ一個初始化的值。而後改變θ值讓J(θ)的取值變小,不斷反覆改變θ使J(θ)變小的過程直至J(θ)約等於最小值。
首先咱們給θ一個初試值,而後向着讓J(θ)變化最大的方向更新θ的取值。如此迭代。公式例如如下:
公式中α稱爲步長(learning rate)。它控制θ每次向J(θ)變小的方向迭代時的變化幅度。J(θ)對θ的偏導表示J(θ)變化最大的方向。
由於求的是極小值。所以梯度方向是偏導數的反方向。求解一下這個偏導,步驟例如如下:
那麼θ的迭代公式就變爲:
這是當訓練集僅僅有一個樣本時的數學表達。咱們又兩種方式將僅僅有一個樣本的數學表達轉化爲樣本爲多個的狀況:梯度降低(gradient descent)和正則方程(The normal equations)。
這裏咱們重點講梯度降低。
例如如下公式是處理一個樣本的表達式:
轉化爲處理多個樣本就是例如如下表達:
這樣的新的表達式每一步都是計算的全部訓練集的數據。因此稱之爲批梯度降低(batch gradient descent)。
注意。梯度降低可能獲得局部最優。但在優化問題裏咱們已經證實線性迴歸僅僅有一個最長處,因爲損失函數J(θ)是一個二次的凸函數,不會產生局部最優的狀況。(若是學習步長α不是特別大)
批梯度降低的算法運行步驟例如如下圖:
你們細緻看批梯度降低的數學表達式。每次迭代的時候都要對所有數據集樣本計算求和,計算量就會很是大,尤爲是訓練數據集特別大的狀況。那有沒有計算量較小,而且效果也不錯的方法呢?有!這就是:隨機梯度降低(Stochastic Gradient Descent, SGD)
隨機梯度降低在計算降低最快的方向時時隨機選一個數據進行計算,而不是掃描全部訓練數據集,這樣就加快了迭代速度。隨機梯度降低並不是沿着J(θ)降低最快的方向收斂,而是震盪的方式趨向極小點。
餘凱教授在龍星計劃課程中用「曲線救國」來比喻隨機梯度降低。
隨機梯度降低表達式例如如下:
運行步驟例如如下圖:
批梯度降低和隨機梯度降低在三維圖上對照方下:
線性迴歸是迴歸問題中的一種,線性迴歸若是目標值與特徵之間線性相關,即知足一個多元一次方程。使用最小二乘法構建損失函數,用梯度降低來求解損失函數最小時的θ值。