1. 程式人生 > >線性迴歸,邏輯迴歸,神經網路,SVM的總結

線性迴歸,邏輯迴歸,神經網路,SVM的總結

目錄

線性迴歸,邏輯迴歸,神經網路,SVM的總結

  • 詳細的學習筆記.
  • markdown的公式編輯手冊.
  • 迴歸的含義: 迴歸就是指根據之前的資料預測一個準確的輸出值.
  • 分類的含義: 分類就是預測離散的輸出值, 比如男生為1, 女生為0(0/1離散輸出問題).
  • 機器學習中往往會有一個假設(hypothesis), 本質上來講$h$代表學習演算法的解決方案或函式.
    • $h$可以理解為是我們預先選定的規則或者函式的形式,我們需要不停地得到對應的引數.
    • $h$是一個從$x$到$y$的函式對映.

單變數的線性迴歸(Linear Regression with One Variable)

  • 單變數的表達方式(hypothesis function):

    $$ h_{\theta(x)};=;\theta_{0}+\theta_{1}x $$

    • 因為只含有一個特徵(即輸入變數), 因此這類問題叫作單變數線性迴歸問題.
  • 模型所預測的值與訓練集中實際值之間的差距就是建模誤差(modeling error).
  • 目標函式(代價函式Cost Function): 目標是選擇出可以使得建模誤差的平方和能夠最小的模型引數.
    • 代價函式的數學公式的表達為:
      $$ J(\theta_{0},\theta_{1})=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)}-y^{(i)}))^{2} $$
    • 這個公式的$\frac{1}{2m}$是為了求偏導好計算; 大致的意思就是求每個樣本的均方誤差.
    • Goal: $\min \limits_{\theta_{0},\theta_{1}}J(\theta_{0},\theta_{1})$, 讓代價函式最小.
    • 需要一個有效的演算法, 能夠自動地找出使代價函式$J$取最小值的引數$\theta_{0}$和$\theta_{1}$, 這個演算法就是梯度下降.
梯度下降(Gredient Descent)
  • 梯度下降是一個用來求函式最小的優化演算法, 線上性迴歸的演算法中, 用它來求代價函式$J(\theta_{0},\theta_{1})$的最小值.
  • 梯度下降背後的思想: 開始隨機選擇一個引數組合$(\theta_{0},\theta_{1},\ldots,\theta_{n})$, 計算出代價函式對應的函式值, 然後尋找一個能讓代價函式下降最多的引數組合; 持續這麼做直到找到一個區域性最小值(local minimum),因為沒有嘗試所有的引數組合, 所以不能確定得到的區域性最小值是否為全域性最小值(global minimum), 選擇不同的初始引數組合可能會找到不同的區域性最小值.
  • 批量梯度下降(batch gradient descent)演算法的公式:
    $$ \theta_{j}:=\theta_{j} - \alpha\frac{\partial}{\partial\theta_{j}}J(\theta_{0},\theta_{1})\qquad(for,j = 0,,and,;j = 1) $$
    • 其中$\alpha$是學習率(learning rate),它決定了我們沿著能讓代價函式下降程度最大的方向向下邁出的步子有多大,在批量梯度下降中,我們每一次都同時讓所有的引數減去學習速率乘以代價函式的導數。
    • 梯度下降的過程為:
      • 根據代價函式求出其偏導函式, 因為所謂的梯度就是一階偏導, 也就是沿引數該方向的變化率.
      • 算出梯度的大小值(把上一次的$\theta_{0}$和$\theta_{1}$代入偏導函式求解).
      • 迭代算出可能更好的引數值(就是用原來的$\theta$值減去偏導值乘以學習率的積).
      • 不斷更新$\theta_{0}$和$\theta_{1}$
    • $\alpha$太大或太小會出現什麼情況:
      • 如果$\alpha$太小, 即學習速率太小, 需要迭代很多次才能達到區域性最優.
      • 如果$\alpha$太大, 梯度下降可能會越過最低點, 甚至無法收斂, 出現震盪或發散現象.
      • 即使學習率$\alpha$保持不變時, 梯度下降也可以收斂到區域性最優, 因為到最優點時偏導為零呀.
    • 批量梯度下降是指在梯度下降的每一步中, 都用到了所有的訓練樣本, 在梯度下降中, 在計算微分求導時, 需要對所有$m$個訓練樣本求和.
    • 有的梯度下降法不考慮整個訓練集, 而是每次關注訓練集中的一些小的子集.
  • 梯度下降演算法, 可以用來最小化任何代價函式$J$, 不只是線性迴歸中的代價函式, 只要是凸函式應該都可以使用梯度下降演算法來求解區域性最優.
  • 在資料量較大的情況下, 梯度下降法比正規方程(normal equations)要更適用一些.

多變數的線性迴歸(Linear Regression with Multiple Variables)

  • 第$i$個訓練例項, 就是特徵矩陣中的第$i$行, 是一個向量(vector).
  • 多變數的hypothesis function(假設函式)的數學表達為:$$h_{\theta}(x) = \theta_{0}x_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}+\ldots+\theta_{n}x_{n}$$
    • 此時模型有$n+1$維的特徵向量, 特徵矩陣的維度$m*(n+1)$.
    • hypothesis function的向量的表示式為: $h_{\theta}(x) = \theta^{T}X$.
  • 多變數的代價函式(cost function)為所有建模誤差的平方和, 數學表達為:
    $$J(\theta_{0},\theta_{1},\ldots,\theta_{n})=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)}-y^{(i)}))^{2}$$
    • 其中$h_{\theta}(x) = \theta_{0}x_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}+\ldots+\theta_{n}x_{n}$.
  • 目標函式還是要找出使得代價函式最小的一系列引數.
  • 多變數線性迴歸的批量梯度下降演算法為:
    $$Repeat{ \theta_{j}:=\theta_{j}-\alpha\frac{\partial}{\partial\theta_{j}}J(\theta_{0},\theta_{1},\ldots,\theta_{n})
    }$$
    • 求導計算為:
      $$Repeat{ \theta_{j}:=\theta_{j}-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})*x_{j}^{(i)}
      }$$
    • python的程式碼實現為:
    def computeCost(X, Y, theta):
        inner = np.power(((X * theta.T) - y), 2) # 內積
        return np.sum(inner) / (2 * len(X)) # len(X)為行數