天天看點

【AndrewNg機器學習】線性回歸(Linear Regression)1 單變量線性回歸2 多變量線性回歸

文章目錄

  • 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進而将資料集分為兩類。

假設有一個房價預測的問題,如下圖所示,我們有房子的面積和對應的價格,我們要建構一個模型來預測其他的房價,這個模型就是線性回歸,在下圖中,我們建構的模型為一條直線。

【AndrewNg機器學習】線性回歸(Linear Regression)1 單變量線性回歸2 多變量線性回歸

在之前的房價預測問題中,我們有面積大小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​+θ1​x

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​)=2m1​i=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​,θ1​min​J(θ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​(θ1​x(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時,代價函數最小,此時就認為我們找到了最優解。

【AndrewNg機器學習】線性回歸(Linear Regression)1 單變量線性回歸2 多變量線性回歸

當 θ 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​就是我們要找的模型參數。

【AndrewNg機器學習】線性回歸(Linear Regression)1 單變量線性回歸2 多變量線性回歸

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​)=m1​i=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​)=m1​i=1∑m​((hθ​(x(i))−y(i))⋅xj(i)​)如下圖所示,梯度下降的過程可以想象為下山的過程,其中學習率為每一步下降的大小,代價函數的梯度則控制下山的方向。在下圖中,我們可以看到,不同的初始點下山的路線也不同,是以梯度下降僅僅能找到一個局部最小值,由于我們沒有嘗試完所有的初始組合,是以不能找到全局最小值。

【AndrewNg機器學習】線性回歸(Linear Regression)1 單變量線性回歸2 多變量線性回歸

學習率選擇合适的大小是很重要的,如果學習率 α \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​−αm1​i=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​−αm1​i=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​+θ1​x1​+θ2​x2​+…+θn​xn​

這個公式中有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)=θ0​x0​+θ1​x1​+θ2​x2​+…+θn​xn​

此時公式中的參數及變量均為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​)=2m1​i=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​−αm1​i=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 學習率

梯度下降算法收斂時所需要的疊代次數是不确定的,我們可以繪制疊代次數-代價函數的圖來看算法在第幾次疊代後收斂。

【AndrewNg機器學習】線性回歸(Linear Regression)1 單變量線性回歸2 多變量線性回歸

另外也有一些自動測試的方法,比如将代價函數的每次疊代下降的值與某個門檻值進行比較,若下降的值小于門檻值,則認為算法收斂。

梯度下降算法的每次疊代受學習率的影響很大。若學習率過小,則疊代次數會很高;若學習率過大,則每次疊代可能不會減小代價函數。通常可以考慮以下學習率0.01,0.03,0.1,0.3,1,3,10。

2.3 特征與多項式回歸

2.3.1 特征的歸一化

在多變量線性回歸中,多元特征應該具有相近的尺度,這樣才能使得梯度下降算法更快的收斂。比如在之前的房價問題中,房屋尺寸和房屋數量為兩個特征,但尺寸的值為0-2000,房間數量的值為0-5,則繪制出來的代價函數圖像如下圖所示。可以看到圖像為細長狀,梯度下降算法需要非常多次的疊代才能收斂

【AndrewNg機器學習】線性回歸(Linear Regression)1 單變量線性回歸2 多變量線性回歸

此時,我們就需要将特征值盡量縮放到-1和1之間,這樣梯度下降算法可以取得更好的效果:

【AndrewNg機器學習】線性回歸(Linear Regression)1 單變量線性回歸2 多變量線性回歸

一般來說,特征縮放一般采用這個公式: x n = x n − μ n s n x _ { n } = \frac { x _ { n } - \mu _ { n } } { s _ { n } } xn​=sn​xn​−μ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​+θ1​x,通過這種特征的生成,會得到一個更好的模型。

這個概念就是多項式回歸。有時候線性回歸并不适合所有資料,我們需要曲線來拟合資料。如下圖所示,我們可以用一個二次函數來拟合,但是這不符合房價随面積升高而升高,是以我們選則三次函數來拟合模型,即 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​+θ1​x+θ2​x2+θ3​x3,若令 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​+θ1​x+θ2​x2​+θ3​x3​,進而将三次函數的模型轉化為一個線性回歸模型。

當然,還可以使用平方根函數模型等等。要特别注意的是,當我們使用這個模型之前,要進行特征縮放,比如上面的 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
  • 正規方程隻适用于線性模型,不适用于邏輯回歸或其他模型。

繼續閱讀