文章目錄
- 1 單變量線性回歸
-
- 1.1 模型基本概念
- 1.2 代價函數
- 1.3 梯度下降
- 1.4 訓練過程
- 2 多變量線性回歸
-
- 2.1 多元特征及假設函數
- 2.2 多變量梯度下降
-
- 2.2.1 基本算法
- 2.2.2 學習率
- 2.3 特征與多項式回歸
-
- 2.3.1 特征的歸一化
- 2.3.2 多項式回歸
- 2.4 正規方程
1 單變量線性回歸
1.1 模型基本概念
線性回歸模型是監督學習的一種。之是以叫做回歸,是因為我們的模型預測結果為一個準确的數值;與之相對應的是分類問題,即預測結果為0或1進而将資料集分為兩類。
假設有一個房價預測的問題,如下圖所示,我們有房子的面積和對應的價格,我們要建構一個模型來預測其他的房價,這個模型就是線性回歸,在下圖中,我們建構的模型為一條直線。
在之前的房價預測問題中,我們有面積大小x及房屋價格y兩個變量量作為資料集來構模組化型,這一資料集就稱為訓練集(Training Set),我們采用下面的符号來進行描述:
- m:代表訓練集中執行個體的數量
- x,y:代表輸入/輸出的特征
- ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)):代表訓練集中第i個執行個體
- h:代表算法的函數,即假設函數(Hypothesis Function),輸入x得到輸出y
那麼可以用下面公式來表示假設函數,其中 θ \theta θ為函數的參數,這個模型就是單變量線性回歸(Linear Regression with One Variable):
h θ ( x ) = θ 0 + θ 1 x h _ { \theta } ( x ) = \theta _ { 0 } + \theta _ { 1 } x hθ(x)=θ0+θ1x
1.2 代價函數
在知道了假設函數後,我們就可以進行預測了,但是函數中的兩個 θ \theta θ參數未知,選擇這兩個參數的過程就可以稱為這個模型的訓練過程。顯然,我們選擇時應該遵循的原則:對于訓練集的某一執行個體 ( x ( i ) , y ( i ) ) (x^{(i)},y^{(i)}) (x(i),y(i)), h θ ( x ( i ) ) h _ { \theta } ( x^{(i)}) hθ(x(i))要無限接近 y ( i ) y^{(i)} y(i)。
是以,我們的目标選擇出可以使得整個訓練集的平均誤差最小的模型參數,評價這一誤差的函數就是代價函數(cost function),整個訓練過程就是讓這個函數趨于最小值:
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J \left( \theta _ { 0 } , \theta _ { 1 } \right) = \frac { 1 } { 2 m } \sum _ { i = 1 } ^ { m } \left( h _ { \theta } \left( x ^ { ( i ) } \right) - y ^ { ( i ) } \right) ^ { 2 } J(θ0,θ1)=2m1i=1∑m(hθ(x(i))−y(i))2 min θ 0 , θ 1 J ( θ 0 , θ 1 ) \min_{\theta _ { 0 } , \theta _ { 1 }} J \left( \theta _ { 0 } , \theta _ { 1 } \right) θ0,θ1minJ(θ0,θ1)
為了能夠直覺的了解代價函數,現在我們令 θ 0 = 0 \theta_0 = 0 θ0=0,則代價函數就變為 J ( θ 1 ) = 1 2 m ∑ i = 1 m ( θ 1 x ( i ) − y ( i ) ) 2 J(\theta_1) = \frac {1}{2m}\sum_{i=1}^{m}({\theta_1}x^{(i)} - y^{(i)})^ 2 J(θ1)=2m1∑i=1m(θ1x(i)−y(i))2。假設訓練集為{(1,1),(2,2),(3,3)},則代價函數 J ( θ 1 ) J \left( \theta _ { 1 }\right) J(θ1)的函數圖像為一個抛物線(如下圖),當 θ 1 = 1 \theta_1 =1 θ1=1時,代價函數最小,此時就認為我們找到了最優解。
當 θ 0 ≠ 0 \theta_0 \neq 0 θ0̸=0時,代價函數 J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0,θ1)的函數圖像如下,此時我們可以看到 J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0,θ1)最低點在曲面的的中間,這個點所對應的 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1就是我們要找的模型參數。
1.3 梯度下降
梯度下降是一個用來求函數最小值的算法,對于很多複雜的機器學習模型,這種方法都是很有用的。算法基本思想是:首先随機選擇一個參數組合 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1,然後通過代價函數的梯度不斷改變 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1,最後求得代價函數的最小值。其中 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1參數的更新方法如下,其中 α \alpha α為學習率: θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) ( j = 0 , j = 1 ) \theta _ { j } : = \theta _ { j } - \alpha \frac { \partial } { \partial \theta _ { j } } J \left( \theta _ { 0 } , \theta _ { 1 } \right)(j=0,j=1) θj:=θj−α∂θj∂J(θ0,θ1)(j=0,j=1)通過計算,可以得到 ∂ ∂ θ 0 J ( θ 0 θ 1 ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \frac { \partial } { \partial \theta _ { 0 } } J \left( \theta _ { 0 } \theta _ { 1 } \right) = \frac { 1 } { m } \sum _ { i = 1 } ^ { m } \left( h _ { \theta } \left( x ^ { ( i ) } \right) - y ^ { ( i ) } \right) ∂θ0∂J(θ0θ1)=m1i=1∑m(hθ(x(i))−y(i)) ∂ ∂ θ I J ( θ 0 θ I ) = 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) ) \frac { \partial } { \partial \theta _ { I } } J \left( \theta _ { 0 } \theta _ { I } \right) = \frac { 1} { m } \sum _ { i = 1 } ^ { m } \left( \left( h _ { \theta } \left( x ^ { ( i ) } \right) - y ^ { ( i ) } \right) \cdot x _j^ { ( i ) } \right) ∂θI∂J(θ0θI)=m1i=1∑m((hθ(x(i))−y(i))⋅xj(i))如下圖所示,梯度下降的過程可以想象為下山的過程,其中學習率為每一步下降的大小,代價函數的梯度則控制下山的方向。在下圖中,我們可以看到,不同的初始點下山的路線也不同,是以梯度下降僅僅能找到一個局部最小值,由于我們沒有嘗試完所有的初始組合,是以不能找到全局最小值。
學習率選擇合适的大小是很重要的,如果學習率 α \alpha α過小,那麼就需要很多步才能到達最低點,使得整個訓練時間加長;如果 α \alpha α過大,那麼算法可能越過最低的點,在其附近震蕩而無法收斂,甚至發散。
1.4 訓練過程
在了解了代價函數和梯度下降後我們就可以對模型進行訓練,大緻過程如下:
- 首先随機初始化參數 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1
- 将訓練集帶入梯度下降算法的公式中,進行疊代: θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \theta _ { 0 } : = \theta _ { 0 } - \alpha \frac { 1 } { \mathrm { m } } \sum _ { \mathrm { i } = 1 } ^ { \mathrm { m } } \left( \mathrm { h } _ { \theta } \left( \mathrm { x } ^ { ( \mathrm { i } ) } \right) - \mathrm { y } ^ { ( \mathrm { i } ) } \right) θ0:=θ0−αm1i=1∑m(hθ(x(i))−y(i)) θ 1 : = θ 1 − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) ) \theta _ { 1 } : = \theta _ { 1 } - \alpha \frac { 1 } { \mathrm { m } } \sum _ { \mathrm { i } = 1 } ^ { \mathrm { m } } \left( \left( \mathrm { h } _ { \theta } \left( \mathrm { x } ^ { ( \mathrm { i } ) } \right) - \mathrm { y } ^ { ( \mathrm { i } ) } \right) \cdot \mathrm { x }_j ^ { ( \mathrm { i } ) } \right) θ1:=θ1−αm1i=1∑m((hθ(x(i))−y(i))⋅xj(i))
- 直到前後兩次梯度下降的結果內插補點滿足一定條件後,停止疊代,此時 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1即為我們訓練的結果。
在上述過程中,我們所使用的梯度下降稱為批量梯度下降算法。在每一次梯度下降中,我們都使用了所有的m個訓練樣本,并對其進行求和,這種算法就稱為批量梯度下降算法。
2 多變量線性回歸
2.1 多元特征及假設函數
在上一部分中,資料集中的x僅有一個特征值,但是有時侯一個特征值不足以代表該樣本,比如房價的高低不僅取決于房子的面積,還取決于房子的時間、位置、布局等等。增添特征後,我們加入一些符号:
- n:代表特征的數量
- x ( i ) x^{(i)} x(i):代表第i個執行個體,i最大為m,其中每個執行個體有n個特征,比如 x ( 2 ) = [ 1416 3 2 40 ] { x } ^ { ( 2 ) } = \left[ \begin{array} { c } { 1416 } \\ { 3 } \\ { 2 } \\ { 40 } \end{array} \right] x(2)=⎣⎢⎢⎡14163240⎦⎥⎥⎤,此時n=4
- x j ( i ) x^{(i)}_j xj(i):代表第i個執行個體的第j個特征
那麼多變量的假設函數為: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n h _ { \theta } ( x ) = \theta _ { 0 } + \theta _ { 1 } x _ { 1 } + \theta _ { 2 } x _ { 2 } + \ldots + \theta _ { n } x _ { n } hθ(x)=θ0+θ1x1+θ2x2+…+θnxn
這個公式中有n+1個參數和n個變量,為了能夠向量化公式,加入 x 0 = 1 x_0=1 x0=1,則公式變為: h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n h _ { \theta } ( x ) = \theta _ { 0 } x _ { 0 } + \theta _ { 1 } x _ { 1 } + \theta _ { 2 } x _ { 2 } + \ldots + \theta _ { n } x _ { n } hθ(x)=θ0x0+θ1x1+θ2x2+…+θnxn
此時公式中的參數及變量均為n+1,特征矩陣X的次元為 m × ( n + 1 ) m\times(n+1) m×(n+1),參數向量次元 Θ \Theta Θ為 ( n + 1 ) × 1 (n+1)\times1 (n+1)×1。是以公式可以簡化為 h θ ( X ) = X Θ h _ { \theta } ( X ) =X \Theta hθ(X)=XΘ?
2.2 多變量梯度下降
2.2.1 基本算法
在多變量線性回歸中,我們也要建構一個代價函數,即所有模組化誤差的平方和: J ( θ 0 , θ 1 … θ n ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J \left( \theta _ { 0 } , \theta _ { 1 } \ldots \theta _ { n } \right) = \frac { 1 } { 2 m } \sum _ { i = 1 } ^ { m } \left( h _ { \theta } \left( x ^ { ( i ) } \right) - y ^ { ( i ) } \right) ^ { 2 } J(θ0,θ1…θn)=2m1i=1∑m(hθ(x(i))−y(i))2
那麼多變量線性回歸的批量梯度下降算法為: θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 , … , θ n ) = θ j − α 1 m ∑ i = 1 m ( ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) ) \theta _ { j } : = \theta _ { j } - \alpha \frac { \partial } { \partial \theta _ { j } } \mathrm { J } \left( \theta _ { 0 } , \theta _ { 1 } , \ldots , \theta _ { n } \right)= \theta _ { j } - \alpha \frac { 1 } { m } \sum _ { i = 1 } ^ { m } \left( \left( h _ { \theta } \left( x ^ { ( i ) } \right) - y ^ { ( i ) } \right) \cdot x _ { j } ^ { ( i) } \right) θj:=θj−α∂θj∂J(θ0,θ1,…,θn)=θj−αm1i=1∑m((hθ(x(i))−y(i))⋅xj(i))
将結果表示為向量化的形式為:
Θ : = Θ − α 1 m ( X T ( X Θ − Y ) ) \Theta := \Theta-\alpha \frac{1}{m} ( X^T (X\Theta -Y) ) Θ:=Θ−αm1(XT(XΘ−Y))
2.2.2 學習率
梯度下降算法收斂時所需要的疊代次數是不确定的,我們可以繪制疊代次數-代價函數的圖來看算法在第幾次疊代後收斂。
另外也有一些自動測試的方法,比如将代價函數的每次疊代下降的值與某個門檻值進行比較,若下降的值小于門檻值,則認為算法收斂。
梯度下降算法的每次疊代受學習率的影響很大。若學習率過小,則疊代次數會很高;若學習率過大,則每次疊代可能不會減小代價函數。通常可以考慮以下學習率0.01,0.03,0.1,0.3,1,3,10。
2.3 特征與多項式回歸
2.3.1 特征的歸一化
在多變量線性回歸中,多元特征應該具有相近的尺度,這樣才能使得梯度下降算法更快的收斂。比如在之前的房價問題中,房屋尺寸和房屋數量為兩個特征,但尺寸的值為0-2000,房間數量的值為0-5,則繪制出來的代價函數圖像如下圖所示。可以看到圖像為細長狀,梯度下降算法需要非常多次的疊代才能收斂
此時,我們就需要将特征值盡量縮放到-1和1之間,這樣梯度下降算法可以取得更好的效果:
一般來說,特征縮放一般采用這個公式: x n = x n − μ n s n x _ { n } = \frac { x _ { n } - \mu _ { n } } { s _ { n } } xn=snxn−μn,其中 μ n \mu_n μn時平均值, s n s_n sn是标準差。
2.3.2 多項式回歸
在我們預測房屋價格時,若選取房屋的長和寬作為變量,得到如下的假設函數: h ( θ ) = θ 0 + θ 1 × frontage + θ 1 × depth h ( \theta ) = \theta _ { 0 } + \theta _ { 1 } \times \text { frontage } + \theta _ { 1 } \times \text { depth } h(θ)=θ0+θ1× frontage +θ1× depth 。但是真正的房屋價格應該是和房屋的面積有關的,是以我們可以重新生成一個特征 x = frontage × depth x = \text { frontage } \times \text { depth } x= frontage × depth ,則此時假設函數為 h ( θ ) = θ 0 + θ 1 x h ( \theta ) = \theta _ { 0 } + \theta _ { 1 } x h(θ)=θ0+θ1x,通過這種特征的生成,會得到一個更好的模型。
這個概念就是多項式回歸。有時候線性回歸并不适合所有資料,我們需要曲線來拟合資料。如下圖所示,我們可以用一個二次函數來拟合,但是這不符合房價随面積升高而升高,是以我們選則三次函數來拟合模型,即 h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 h _ { \theta } ( x ) =\theta _ { 0 } + \theta _ { 1 } x + \theta _ { 2 } x ^ { 2 } + \theta _ { 3 } x ^ { 3 } hθ(x)=θ0+θ1x+θ2x2+θ3x3,若令 x 2 = x 2 , x 3 = x 3 x_2 = x^2,x_3=x^3 x2=x2,x3=x3,則 h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 h _ { \theta } ( x ) =\theta _ { 0 } + \theta _ { 1 } x + \theta _ { 2 } x _2 + \theta _ { 3 } x _3 hθ(x)=θ0+θ1x+θ2x2+θ3x3,進而将三次函數的模型轉化為一個線性回歸模型。
當然,還可以使用平方根函數模型等等。要特别注意的是,當我們使用這個模型之前,要進行特征縮放,比如上面的 x 1 , x 2 , x 3 x _1,x _2, x _3 x1,x2,x3是處于不同的尺度的。
2.4 正規方程
在前面的訓練過程中,我們一直使用梯度下降來求最優解,對于某些問題來說,正規方程有更好的解決方案。當代價函數 J ( θ ) = a θ 2 + b θ + c J ( \theta ) = a \theta ^ { 2 } + b \theta + c J(θ)=aθ2+bθ+c時,我們可以通過求解 ∂ ∂ θ j J ( θ j ) = 0 \frac { \partial } { \partial \theta _ { j } } J \left( \theta _ { j } \right) = 0 ∂θj∂J(θj)=0來求得最優解,這就是正規方程。
假設訓練集特征矩陣X,且資料集的結果y,則利用正規方程可以解出 θ = ( X T X ) − 1 X T y \theta = \left( X ^ { T } X \right) ^ { - 1 } X ^ { T } y θ=(XTX)−1XTy,過程如下:
已知 J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J ( \theta ) = \frac { 1 } { 2 m } \sum _ { i = 1 } ^ { m } \left( h _ { \theta } \left( x ^ { ( i ) } \right) - y ^ { ( i ) } \right) ^ { 2 } J(θ)=2m1∑i=1m(hθ(x(i))−y(i))2, X X X為 ( m × ( n + 1 ) ) (m\times(n+1)) (m×(n+1))的矩陣, θ \theta θ為 ( ( n + 1 ) × 1 ) ((n+1)\times1) ((n+1)×1)的向量, y y y為 ( m × 1 ) (m\times1) (m×1)的向量,則 J ( θ ) = 1 2 ( X θ − y ) 2 = 1 2 ( X θ − y ) T ( X θ − y ) = 1 2 ( θ T X T X θ − θ T X T y − y T X θ − y T y ) J ( \theta ) = \frac { 1 } { 2 } ( X \theta - y ) ^ { 2 }= \frac { 1 } { 2 } ( X \theta - y ) ^ { T } ( X \theta - y )= \frac { 1 } { 2 } \left( \theta ^ { T } X ^ { T } X \theta - \theta ^ { T } X ^ { T } y - y ^ { T } X \theta - y ^ { T } y \right) J(θ)=21(Xθ−y)2=21(Xθ−y)T(Xθ−y)=21(θTXTXθ−θTXTy−yTXθ−yTy) ∂ J ( θ ) ∂ θ = 1 2 ( 2 X T X θ − X T y − X T y − 0 ) = X T X θ − X T y \frac { \partial J ( \theta ) } { \partial \theta } = \frac { 1 } { 2 } \left( 2 X ^ { T } X \theta - X ^ { T } y - X ^ { T } y - 0 \right)= X ^ { T } X \theta - X ^ { T } y ∂θ∂J(θ)=21(2XTXθ−XTy−XTy−0)=XTXθ−XTy w h e n ∂ J ( θ ) ∂ θ = 0 , θ = ( X T X ) − 1 X T y when \frac { \partial J ( \theta ) } { \partial \theta } = 0,\theta = \left( X ^ { T } X \right) ^ { - 1 } X ^ { T } y when∂θ∂J(θ)=0,θ=(XTX)−1XTy
使用正規方程應注意以下幾點:
- 當矩陣X不可逆時,正規方程方法是不能用的。比如當X中的特征之間不獨立,或者特征數量n+1大于訓練集的數量m
- 當特征數量比較大時,最好使用梯度下降方法,因為正規方程随特征數量增大,計算複雜度也比較大,一般這個值選擇在10000
- 正規方程隻适用于線性模型,不适用于邏輯回歸或其他模型。