Linear regression

線性回歸屬於迴歸問題。對於迴歸問題,解決流程爲: 

       給定數據集中每個樣本及其正確答案,選擇一個模型函數h(hypothesis,假設),併爲h找到適應數據的(未必是全局)最優解,即找出最優解下的h的參數,這裏我們稱之爲向量θ。

最基本的單變量線性迴歸(Single-linear regression): 
形如h(x)=θ_0 + θ_1*x1

多變量線性迴歸(Multi-linear regression): 
形如h(x)=θ_0 + θ_1*x1 + θ_2*x2 + θ_3*x3

多項式迴歸(Polynomial Regression): 
形如h(x)=θ_0 + θ_1*x1 + θ_2*(x2^2) + θ_3*(x3^3) 
在多項式迴歸中,我們可以令x2=x2^2,x3=x3^3,於是又將其轉化爲了線性迴歸模型。雖然不能說多項式迴歸問題屬於線性迴歸問題,但是一般我們就是這麼做的。

所以最終通用表達式就是: 

這裏寫圖片描述

1.代價函數(Cost Function)

計算建立的模型對真實數據的誤差,叫建模誤差(Modeling Error)。誤差越低,模型對數據擬合度越高。例如給出: 
m:訓練集的樣本個數 
n:訓練集的特徵個數(通常每行數據爲一個x(0)=1與n個x(i) (i from 1 to n)構成,在向量中表示爲[1 x1 x2 .....xn],所以一般都會將x最左側加一列“1”,變成n+1個特徵) 
x:訓練集(可含有任意多個特徵,二維矩陣,行數m,列數n+1,即x0=1與原訓練集結合) 
y:訓練集對應的正確答案(m維向量,也就是長度爲m的一維數組) 
h(x):我們確定的模型對應的函數(返回m維向量) 
theta(即θ):h的初始參數(常爲隨機生成。n+1維向量)

得代價函數J(theta): 
這裏寫圖片描述 
(圖中等號左側的theta0,theta1…thetan以後直接用向量theta表示。)

有了代價函數,我們的目的就是找到一組參數theta使得代價最小,稍有常識的人就能知道,這個函數肯定是有最小值的,不會出現負無窮下面兩個標題就是講了最小化J(theta)的兩個方法。

2.正規方程(Normal Equation)

正規方程是針對某些線性迴歸問題的方案,例如對於我們熟知的 
這裏寫圖片描述
要把上面的代價方程找出theta最小值,本質上就是二次函數嘛。我們直接求導計算導數爲0處即爲最小值。求解theta輕輕鬆鬆一步到位。同樣對於多參數的線性迴歸,只要求偏導即可獲得每個theta值到達全局最優解。。 
那麼現在在矩陣中,假設我們的訓練集矩陣爲X,“正確答案”爲y,則theta可以如上面所說的各自求偏導數直接求出。但是直接這樣做非常耗時,因此數學家由此推導出了更好的方法: 
這裏寫圖片描述 
這個公式本質就是從上面求導這一方法推導出來的。推導過程:https://zhuanlan.zhihu.com/p/22474562

當然很顯然的是,如果矩陣不可逆就不能用這個方案了(出現這個情況的原因可能是1.各個特徵不獨立、有關聯,比如出現了重量和質量兩個特徵(至少在同一個地方兩者完全成比例);2.特徵數量大於所給訓練集樣本個數,即m<n)。

通過正則化優化,可以推導出以下公式,且進過正則化後的正規方程可應用於任意Linear regression中。


3.梯度下降算法(Gradient Descent)

上述方法簡單易使用但是侷限高,而梯度下降算法使用更廣泛更通用。 先定下一組預設參數,通常可以是隨機生成的,不斷微調h的參數直到達到代價J的局部最小值(Local Minimum)。因此此算法並不一定能找到全局最小值(Global Minimum)。根據初始theta選擇的不同可能找到不同局部最小值、導致不同結果。下圖很形象的表現了這一點。 
這裏寫圖片描述

具體實現:我們循環以下算法直到到達局部最小值。 
這裏寫圖片描述

  • alpha是學習率(Learning Rate),其大小決定了每次循環中theta改變的大小,決定了梯度下降步子邁多大。尋找alpha很關鍵。alpha小了,每次循環步子也邁的小,要很多步才能到達最低點,速度慢。alpha太大了,可能一下就邁過頭了,越過了最低點,並不斷一次次越過來越過去就是下不來,太大了甚至可能導致循環無法收斂、甚至發散。
  • 可以看出,隨着算法越來越接近局部最小值,J’越小,下降速度越慢,因此alpha只需是個定值,無需在靠近最小值時一起減小alpha。

  • 注意(FBI Warning),每個theta i必須是同步變換,即不能修改了theta1爲新計算得的值後再計算要修改的theta2,這樣計算出的theta2是基於是修改後的theta1而得到的。因此要計算出全部新theta後統一賦值。運用向量計算可以很好解決這個問題。

  • 該梯度下降算法有時也被稱爲批量梯度下降。“批量”指的是在梯度下降的每一步中,我們都用到了所有的訓練樣本。

    線性迴歸上運用梯度下降
    按照梯度下降要求求得代價方程J的導數J’(爲了方便書寫記J的導數爲J’),而對於線性迴歸模型的J方程上面已經給出,所以將J求導帶入,得到: 
    這裏寫圖片描述
    將求導部分求出來,即: 
    這裏寫圖片描述
    其中 
    這裏寫圖片描述
    通過正則化優化,可以推導出以下公式:

上式中,j是從0開始出發,到n截止,所以,正則化中,並沒有對θ_0進行懲罰。

特徵縮放(Feature Scaling)

以房價爲例子,現在假設房子價格只受房屋的尺寸(對應theta1)和房間的數量(theta2)影響,房子尺寸的值爲 0-2000 平方英尺,而房間數量的值是 0-5,以兩個參數爲橫縱座標繪圖,可以看出圖像很扁,梯度下降算法需要非常多次迭代才能收斂。 
這裏寫圖片描述

具體爲什麼會導致迭代很多次,老師的解釋是根據圖來的,雖然很直觀但是根本原因他沒說清楚,現在分析下來我認爲原因在於,梯度下降時,alpha對於每個參數都是一樣的(現在假定alpha爲1),則根據最終得到的算法(“Repeat”裏面那行),alpha、1/m、h(xi)-y(i)都是一樣的,不一樣的只有xj(i)(上標下標不會打,湊合着看),那麼對於房屋尺寸,尺寸都上千了,數值很大,則theta1的變化也很大,因此對於theta1,alpha太大了,看那張草圖,已經導致了越過最小值的情況。而對於theta2呢,房間一共不會超過5,因此對於theta2,alpha太小了,每次就靠近最小值一點點。

這時候我們就需要特徵縮放,把所有參數縮放到-1~1的範圍,讓alpha適應每個參數,每個參數每次的變化都相當。 
這裏寫圖片描述

具體實施就是令這裏寫圖片描述 
其中u是平均值,s是標準差。把每個數據都如上修改範圍,相當於預處理,這樣可以對後面線性迴歸有幫助。而對於多項式迴歸模型,在運行梯度下降算法前,特徵縮放就顯得更有必要了。

學習率alpha的選擇

上面說到了,alpha太大,步子大了容易扯到蛋,可能導致越過最小值甚至無法收斂;alpha小了又顯得娘炮,太慢了。 
通常可以考慮嘗試這些學習率:α=0.01,0.03,0.1,0.3,1,3,10,多試一試找出比較好的。

局部最優解還是全局最優解

之前也明確說了,梯度下降不一定能獲得全局最優解,但是網上那麼多教程、博客還是寫的很混亂,或者說非常不嚴謹,都說“到達全局最小值”;包括在吳恩達老師的視頻裏,也不是描述的很清爽。搞得我很懵。所以問題是,梯度下降用來求最優解,哪些問題可以求得全局最優?哪些問題可能獲得局部最優解? 
如果函數圖像只有一個凹坑,像吳大大視頻裏的例子全都是一個峯的,那梯度下降最終求得的肯定是全局最優解,應該說獲得的局部最優解就是全局最優解。然而對於有多個凹坑的問題,梯度下降獲得的局部最優解很有可能的最終結果不是全局最優。對於線性迴歸問題這也是一樣的,網上看到有人說線性迴歸問題只有一個全局最小值沒有局部最小值,感覺這不對,我記得吳恩達老師有說過線性迴歸也可以有極小值存在的。先mark,等我驗證後更新。 
但是正規方程呢?當有多個極小值時他一定會返回最小值嗎?這點我也不清楚,但是按照周志華老師的機器學習的書上說,當特徵數量大於所給訓練集樣本個數時使用正規方程,會得到多個解,而具體返回哪個解就看算法的選擇了。

4.正規方程、梯度下降的選擇、比較

梯度下降正規方程
需要選擇學習率 α不需要
需要多次迭代一次運算得出
當特徵數量 n 大時也能較好適用需要計算(X.T X)^-1。如果特徵數量 n 較大則運算代價大,因爲矩陣逆的計算時間複雜度爲 O(n 3 ),通常來說當 n 小於 10000 時還是可以接受的
適用於各種類型的模型只適用於線性模型,不適合邏輯迴歸模型等其他模型

總結一下,只要特徵變量的數目並不大,標準方程是一個很好的計算參數 θ 的替代方法。具體地說,只要特徵變量數量小於一萬,我通常使用標準方程法,而不使用梯度下降法。 
隨着我們要講的學習算法越來越複雜,例如,當我們講到分類算法,像邏輯迴歸算法,我們會看到, 實際上對於那些算法,並不能使用標準方程法。對於那些更復雜的學習算法,我們將不得不仍然使用梯度下降法。因此,梯度下降法是一個非常有用的算法,可以用在有大量特徵變量的線性迴歸問題。或者我們以後在課程中,會講到的一些其他的算法,因爲標準方程法不適合或者不能用在它們上。但對於這個特定的線性迴歸模型,標準方程法是一個比梯度下降法更快的替代算法。所以,根據具體的問題,以及你的特徵變量的數量,這兩種算法都是值得學習的。





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