機器學習(1)多元線性迴歸

概述

線性迴歸是一個典型的監督學習問題,它常常被用來解決連續值的預測問題。我們通常需要給出一個訓練集,訓練集中包含已知的目的數據,同時還有與該預測可能相關的特徵。
一個簡單的一元線性迴歸的示例是:
我們能否給出房屋價格與房屋面積的關係預測?(或者給出當房屋面積爲某個值時,房價的一個預測)
其中我們要給出一個訓練集,訓練集中包含多個房屋面積與對應房屋價格的真實數據。

符號約定與術語解釋

術語解釋

  • 特徵:在本例中,房屋的面積、房屋的建築年齡等一些與房屋價格可能相關的都是特徵。
  • 特徵向量:我們通常將同一個對象的特徵數據使用一個特徵向量來表示,該特徵向量的分量都是該對象的一個特徵。
  • 預測函數:我們想要得到的有關輸入與輸出的映射關係。
  • 代價函數:通常我們需要一種手段來衡量我們預測的好壞。我們一般使用一個代價函數來量化擬合與實際值的偏離程度。

符號約定

  • xix_i用來表示第i個特徵,x(i)x^{(i)}用來表示第i個輸入的特徵向量,同樣的xj(i)x^{(i)}_j表示第i個輸入的第j個特徵值。
  • 輸出向量我們用yy來表示,其中y(i)y^{(i)}代表第i個輸入向量對應的輸出。
  • 預測函數我們表示爲:
    hθ(x)=θ0+θ1x1+...+θnxn=θTxh_\theta(x)=\theta_0+\theta_1x_1+...+\theta_nx_n=\theta^Tx
    這表示預測函數的輸入向量xx有n個分量,也即n個特徵。
  • 代價函數我們表示爲:J(θ)J(\theta)

代價函數

代價函數是衡量預測函數給出的預測值與實際值之間的偏離程度。
一個常用的代價函數是:
J(θ)=12mi=1m(hθ(x(i))y(i))2J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2
值得說明的是:這裏的m指的是訓練集中樣本的個數,這裏的12\frac{1}{2}是爲了與求導時平方帶來的2抵消。

目的

我們的目的是:確定一個預測函數
hθ(x)=θ0+θ1x1+...+θnxn=Xθh_\theta(x)=\theta_0+\theta_1x_1+...+\theta_nx_n=X\theta
對於每一個輸入的向量xx,給出預測的yy值。
事實上是確定參數θ\theta,使得J(θ)J(\theta)取到最小值。
也即min(J(θ))min(J(\theta))

解決思路

可以看到我們經過問題形式的變化,已經將其轉化爲了一個最優化問題。由於線性迴歸的特殊性,其代價函數是一個凸函數,也就是說,不存在會陷入某個局部最優點的情況。
凸函數的解釋詳見 凸函數-維基百科
針對這個對於代價函數的最優化問題,我們想到了兩種解決思路:梯度下降法正規方程法

梯度下降法

梯度下降法的思路是:把代價函數看做一個勢函數,每次迭代時,選擇向該點的梯度方向前進一步。
梯度的解釋詳見 梯度-維基百科
也即每次向勢函數下降最快的方向前進一步,對於一個凸函數,只要我們每次前進的距離足夠小,那麼最終一定能到達該最優點。
值得注意的是,梯度下降法是一個普遍的最優化問題的啓發算法,該算法並不保證能找到一個全局最優解,事實上這依賴於我們選擇的初始點所在的位置。
該算法的工作過程示意圖如下:
在這裏插入圖片描述
再次重申一下,這裏目標是min(J(θ))min(J(\theta)),自變量是θ\theta
我們選擇的初始位置是θ\theta,則每次我們都需要根據當前的梯度來更新下一次的θ\theta
更新公式是:
θj=θjαθjJ(θ)\theta_j=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta) α\alpha是學習率,也叫步長。
值得注意的是:這其中 αθjJ(θ)\alpha\frac{\partial}{\partial\theta_j}J(\theta) 部分是這個代價函數對於θj\theta_j的偏導數。
這就是我們所說的每次向該函數的梯度方向前進一步。

我們通常結束迭代的條件是,θj\theta_j收斂或改變在某個精確度內。編程上應當注意的點是,對於θ\theta,其各維度應當同步更新。

學習率的選擇

學習率的選擇是一個困難的問題。
當學習率過小時,其收斂速度實在太慢,我們將不得不重複進行更多次的迭代。
當學習率過大時,我們很容易跨過最優點,而到達一個沒那麼好的點,甚至有可能會比原來的代價函數更大。
在實踐中,我們通常每3倍嘗試一次,比如:

α=0.001,0.003,0.010.3,1α=0.001,0.003,0.01…0.3,1

特徵縮放

有時我們會碰到參數的範圍差異過大的情況。比如,一個參數取值在[0,1],而另一個參數的範圍則在[0,100000],這在圖中會顯示出一個極其狹長的橢圓。(比下圖還要誇張的多),我們每次在進行梯度下降迭代時,會遇到困難,這將使我們不得不進行更多次的迭代。
在這裏插入圖片描述
解決該問題的一個思路是:特徵縮放(也叫歸一化),該方法的思想是將所有特徵的取值映射到一個合理的範圍內。
通常,我們會將特徵映射到[-0.5,0.5]的範圍內,縮放公式是:
xi=xixˉimax(xi)min(xi)x_i=\frac{x_i-\bar x_i}{max(x_i)-min(x_i)}
經過映射後的代價函數像下圖這樣,不會再呈現出一種奇怪的狹長橢圓形。
該方法事實上是換了一個座標系,將不同量度的特徵映射到了量程差別不大的座標系內。
在這裏插入圖片描述

正規方程法

還記得嗎?我們的優化目標是min(J(θ))min(J(\theta)),自變量是θ\theta
上面的方法,令我們頭疼的一點是學習率的選擇,而且它需要頻繁的迭代,除此之外,上面的方法並不能給出一個解析解。
因此我們嘗試使用正規方程法來解決該問題:
值得注意的是:由於我們是多元線性迴歸,最後得到的是一個 yy 向量,因此我們根據
J(θ)=12mi=1m(hθ(x(i))y(i))2J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2
寫出代價函數的向量表示方式:
J(θ)=12m(hθ(x)y)T(hθ(x)y)J(\theta)=\frac{1}{2m}(h_\theta(x)-y)^T(h_\theta(x)-y)
其中(hθ(x)y)(h_\theta(x)-y)是一個列向量。
下式是預測函數的定義:
hθ(x)=θ0+θ1x1+...+θnxn=Xθh_\theta(x)=\theta_0+\theta_1x_1+...+\theta_nx_n=X\theta
我們將其代入得到:
J(θ)=12m(Xθy)T(Xθy)J(\theta)=\frac{1}{2m}(X\theta-y)^T(X\theta-y)
其中XX是一個m×(n+1)m\times (n+1)的矩陣,構造方法是:
X={1x(1)T1x(2)T......1x(m)T}X= \left\{ \begin{matrix} 1 & x^{(1)^T} \\ 1 & x^{(2)^T} \\ ...&...\\ 1 & x^{(m)^T} \end{matrix} \right\}
其中x(i)x^{(i)}代表訓練集中第 i 組數據,被寫成一個(n×1n\times 1)的列向量形式。
dJ(θ)dθ=0\frac{d J(\theta)}{d\theta}=0 求使得代價函數取到最小值的點。
解得:
θ=(XTX)1XTy\theta=(X^TX)^{-1}X^Ty
這裏不給出證明
只給出一個幫助記憶的方式:
最理想的情況是:(Xθy)=0(X\theta-y)=0
或者說是至少爲一個很小很小的 δ\delta,因此有
Xθ=yX\theta=y
由於θ\theta是一個(n+1)×1(n+1)\times1的列向量,yy是一個(m×1m\times 1)的列向量。而XX是一個m×(n+1)m\times (n+1)的矩陣,X不是方陣無法求逆,因此需要左乘一個XTX^T在左邊構造一個((n+1)×(n+1))((n+1)\times (n+1))的方陣XTXX^TX
此時等式變爲:
XTXθ=XTyX^TX\theta=X^Ty
接着我們在兩邊左乘一個(XTX)1(X^TX)^{-1}
得到
θ=(XTX)1XTy\theta=(X^TX)^{-1}X^Ty
值得注意的是:(XTX)1(X^TX)^{-1}部分的計算要花費O(n3)O(n^3)的時間複雜度。同時(XTX)(X^TX)有時可能不可逆。
比如(XTX)(X^TX)不滿秩,也即有兩行內容線性相關,或者兩個特徵線性相關,或者訓練集的樣本個數小於特徵數。

梯度下降與正規方程的對比

梯度下降法 正規方程法
時間複雜度 O(n2)O(n^2) O(n^3)
優點 計算速度快 寫代碼方便,不需迭代
缺點 需要選擇適當的學習率α\alpha 當特徵數相當高時,時間代價相當高,此外有時逆矩陣可能不存在。
應用場景 比較普遍,除此之外甚至能應用到一些更加複雜的算法中 當特徵數不高時
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章