1. 程式人生 > >線性最小二乘兩種方法

線性最小二乘兩種方法

梯度下降 神經網絡 log des sum 直線 ini 結束 erro

線性最小二乘擬合 y = w0 +w1x (參數 w0, w1)

(1)如何評價一條擬合好的直線 y = w0 +w1x 的誤差?

  "cost" of a given line : Residual sum of squares (RSS)

    技術分享圖片

(2)最小二乘方法的思路

  使 RSS 盡量小。

  即

      技術分享圖片

  而RSS 函數的圖像是這樣的:

      技術分享圖片

   極小值 處導數為0.

  

   對RSS 求導:

      技術分享圖片

   

  有兩種方法求解。

 1.closed form:

  解析解, 使gradient = 0

  得到:

  w1:  slope = ((sum of X * Y) - (1/N)*(sum of X)*(sum of Y)) / ((sum of X^2) -(1/N)* (sum of X)*(sum of X))

  w0:  intercept = (1/N)*(sum of Y) - slope * (1/N)* (sum of X)

  

  2.gradient descent

  梯度下降方法。

  對於簡單的函數擬合,可以直接求出解析解。但對於一些不能直接求出解析解的情況(例如神經網絡),就可以使用梯度下降方法。

  註意到:

   技術分享圖片

   w0 的導數 = sum (yi - (w0+w1xi) ) ,即 w0導數 = sum( error )

   w1的導數 = sum( error*x )

  

  算法過程:

   step 0.初始化:

      initial_w0 = 0

      initial_w1 = 0

      step_size = 0.05

      tolerance = 0.01

    step 1 ~. 對於接下來的每一步:

    (1)根據當前 w0、 w1 計算 y ,並計算w0 、w1的導數 sum( error ) 和 sum( error *x)

     (2)更新 w0 、w1 的值:

           adjustment = step_size * derivative(導數)

          w0 = w0 - adjustment (w1 同理)

      (3)檢查算法是否應該結束(導數是否已經收斂到一個很小的值了):

          magnitude = sqrt(sum (derivative ^2))

          if magnitude < tolerance:

             end

出處:華盛頓大學machine learning:regression week 1

線性最小二乘兩種方法