天天看點

Supervised learning demo監督學習案例

監督學習案例

規範

  • 假設函數: 使用h(hypothesis, 假設)表示
  • 輸入(input value)
    • 向量或者實數: 使用小寫字母x等
    • 矩陣: 使用大寫字母X等
  • 輸出(output value)
    • 向量或者實數: 使用小寫字母y等
    • 矩陣: 使用大寫字母Y等
  • 參數(Parameters): \(\theta\)
  • 樣本的數量(列數): m
  • 樣本中特征(feature)的個數: n
  • \(x_0^{(1)}\): 0表示第0個特征(為我們給出的樣本中的特征是從1開始的,這裡的0是我們自己添加上去的,所有的\(x_0^{(m)}\)都為1,其中1表示第幾行資料, 它的一般式就是\(x_j^{(i)}\), 以後j表示第幾個特征,i表示第幾個樣本

房價的Size和Price的預測

  • X 為 房子的 Size
  • 建立一個線性模型: \(h_\theta(x) = \theta_0 + \theta_1x\)
  • 要讓我們fit的model與y差異最小, 稱之為最小化(minimize)
    • 在這個案例中使用\[J(\theta_0, \theta_1) = {1\over2m}\sum_{i = 0}^m(h\theta(x^{(i)}) - y^{(i)})^2\]
    • 上面的就是我們的代價函數(cost function), 因為我們有讓得到的和除以了2m, 是以我們的到函數也稱之為平均誤差函數(squared error function), 注意: cost function的自變量時theta_0和theta_1, 不在是我們熟悉的x了
    • \[{minimize_{\theta_0\theta_1}} J(\theta_0, \theta_1)\]表示求出一個\(\theta_0\)和\(\theta_1\)使得\(J(\theta_0, \theta_1)\)的值最小, 我們稱之為最小化的過程, 上面的這個表達式就是我們的優化目标(optimization objective), 也就是我們的目标函數
  • 對于線性回歸模型來說, 它的\(J(\theta_0, \theta_1)\)目标函數是一個凸函數(沒有局部最優點, 隻有一個全局的最優點), 在二維上是抛物線, 在三維上是一個碗狀, 對于三維的(J有兩個theta參數), 一般使用等高線圖來替代三維凸函數
  • 使用gradient regression梯度降維求出最優解, 梯度降維的公式為\(\theta_0 := \theta_0 - \alpha \times {\partial\over\partial\theta_0}J(\theta_0, \theta_1)\), 對于另一個\(\theta_1\)也是一樣的, \(\theta_1 := \theta_1 - \alpha \times {\partial\over\partial\theta_1}J(\theta_0, \theta_1)\), 上面的是公式, 在實際更新我們的參數\(\theta_0, \theta_1\)的時候, 應該保證\(\theta_0, \theta_1\)同步更新, 是以應該這樣子\[tmp0 := \theta_0 - \alpha \times {\partial\over\partial\theta_0}J(\theta_0, \theta_1)\] \[tmp1 := \theta_1 - \alpha \times {\partial\over\partial\theta_1}J(\theta_0, \theta_1)\] \[\theta_0 := tmp0\] \[\theta_1 := tmp1\], 在最後同步更新\(\theta_0\)和\(\theta_1\)的值
  • 關于梯度下降公式的細節
    • 公式中, \(\alpha\)表示學習率, \({\partial\over\partial\theta_0}J(\theta_0, \theta_1)\)表示梯度下降的方向, 是以\(\alpha \times {\partial\over\partial\theta_0}J(\theta_0, \theta_1)\)表示\(\theta_0\)要更新多少的值, 形象一點就是說, 一個人在一個山頂上, 他步子的大小為\(\alpha\), 他希望盡快下山的方向為\({\partial\over\partial\theta_0}J(\theta_0, \theta_1)\), 這樣我們就可以更新\(\theta_0\)的值了
    • 雖然我們在公式中規定了\(\alpha\)學習率, 但是并不代表我們走的每一步就是不變的, 因為導數是在變化的, 為最低點的時候為0, 在其他地方有時别的值
    • 要應用梯度下降法, 我們需要為\(\theta_0\)和\(\theta_1\)進行初始化, 一般來說都初始化為0, 但是也要視情況而定
    • 什麼時候停止梯度下降?
      • 我們可以規定一個門檻值, 當我們的\(\alpha \times {\partial\over\partial\theta_0}J(\theta_0, \theta_1)\)小于這個門檻值的時候停止, 這個是通過計算機自動停止疊代的, 但是不推薦使用
      • 另外一種方式就是通過畫出\(minimize_{\theta_0\theta_1}J(\theta_0, \theta_1)\)與疊代次數的圖像來判斷應該疊代多少次, 如果畫出來的是一個抛物線則表示我們設定的\(\alpha\)學習率太大了, 應該減小\(\alpha\)的值
  • 其他
    • 對于這個房價的模型, 我們除了使用梯度下降的方法求出我們的目标函數之外還可以使用matrix的方法來求, 這個更加的簡單
    • 我們每求一次\(J(\theta_0, \theta_1)\)的值就要周遊一遍所有的資料, 因為the definition of the \(J(\theta_0, \theta_1)\) is \[\sum_{i=1}^{m}{1\over2m}{(h(x^{(i)}) - y^{(i)})^2})\], 這種方式我們稱之為Batch梯度下降

房價的Size和Price的預測-其他解決方案

  • 在上一節中我們已經得到了一個線性模型\(h_\theta(x) = \theta_0 + \theta_1x\),根據這個假設函數我們定義出了一個目标函數(也稱之為損失函數)\[J(\theta_0, \theta_1) = {1 \over 2m}\sum_{i = 0}^{m}(h(x^{(i)}) - y^{(i)})^2\]接着通過梯度下降的方法計算出\(minimize_{\theta_0\theta_1}J(\theta_0, \theta_1)\), 我們知道這種方法需要對進行疊代,比較麻煩,那有沒有更加簡單的方法呢?能不能一次疊代就可以求出我們的\(\theta_0\)和\(\theta_1\)呢?答案就是正規方程
  • 正規方程: \(\theta = (A^{T}A)^{-1}A^{T}y\)
    • 其中\(\theta\)為一個列向量, 表示我們所有的參數

      \[

      \begin{bmatrix}

      \theta_0 \\

      \theta_1

      \end{bmatrix}

      \]

    • A 表示輸入的 x 組成的矩陣, 這裡就是

      \begin{bmatrix}

      1 & x_1^{(1)} \\

      1 & x_1^{(2)} \\

      \vdots & \vdots \\

      1 & x_1^{(m)}

      \end{bmatrix}

      \]

      上面的矩陣的原型就是

      x_0^{(1)} & x_1^{(1)} \\

      x_0^{(2)} & x_1^{(2)} \\

      x_0^{(m)} & x_1^{(m)}

      從上面我們可以知道\(x_0^{(n)}\)是值為1,這裡的

      x_0^{(1)} \\

      x_0^{(2)} \\

      x_0^{(3)} \\

      \vdots \\

      x_0^{(m)}

      • 就是我們自己添加上去的新的特征值,這個特征比較特殊,因為它所有的值都為0,為什麼要這樣做?通過觀察假設函數\(h(x^{(i)}) = \theta_0 \times 1 + \theta_1x^{(i)}\)我們發現,之後\(\theta_0\)沒有自變量,為了數學上的統一,于是我們對其進行修改\(h(x^{(i)}) = \theta_0x_0^{(i)} + \theta_1x_1^{(i)}\),其中\(x_0^{(i)}\)為1。
    • 其中y為一個列向量,它的值為

      y^{(1)} \\

      y^{(2)} \\

      y^{(3)} \\

      \vdots \\

      y^{(m)}

      是\(x_j^{(i)}\)對象的标簽值

  • 如果建構 A ?
    • 首先,在書寫假設函數的時候應該安裝階數的升序書序,如\(h(x^{(i)}) = \theta_0 + \theta_1x_1^{(i)} + \theta_2{(x_1^{(i)})}^2\)或者\(h(x^{(i)}) = \theta_0 + \theta_1x_1^{(i)} + \theta_2x_2^{(i)}\)分别從友善的式子中建構 A

      第一個是

      1 & x_1^{(1)} & {(x_1^{(1)})}^2 \\

      1 & x_1^{(2)} & {(x_1^{(2)})}^2 \\

      \vdots & \vdots & \vdots \\

      1 & x_1^{(m)} & {(x_1^{(m)})}^2 \\

      第二個是

      1 & x_1^{(1)} & x_2^{(1)} \\

      1 & x_1^{(2)} & x_2^{(2)} \\

      1 & x_1^{(m)} & x_2^{(m)} \\

  • 如果已經建構出了矩陣 A,接下來的y的建構是非常簡單的,就是安裝y給出的順序建構一個列向量即可
  • 帶入公式就可以直接求出 \(\theta\)
  • 正規方程的優點
    • 不需要像梯度下降法一樣麻煩,需要換出\(minimize_{\theta_0\theta_1}J(\theta_0, \theta_1)\)和疊代次數的圖像來确定疊代的次數,除此之外還要确定出\(\alpha\)學習率的大小
  • 正規方程的缺點
    • 在公式中發現這個A矩陣包含了所有的輸入,如果輸入量非常的大,則A矩陣就會非常大,在計算\({(A^{T}A)}^{-1}\)矩陣的次元就會增大,并且求矩陣的逆在大資料的情況下是非常消耗計算機的性能的
    • 使用的範圍小,隻适用于線性回歸,而梯度下降使用的範圍要廣很多

房價的Size和Price的預測-多變量

  • 在上兩節中我們隻考慮到了房子的大小和房子的關系,當然這個是不包括我們計自己添加上去的第0個特征,它們的值都為1。下面我們再添加一些特征,下面就添加 Age。
  • 此時我們的假設函數為\(h(x^{(i)}) = \theta_0 + \theta_1x_1^{(i)} + \theta_2x_2^{(i)}\),其中\(x_1^{(i)}\)為size輸入,\(x_2^{(i)}\)為age的輸入,建構目标函數(cost function)\[J(\theta_0, \theta_1, \theta_2) = {1 \over 2m}\sum_{i = 0}^{m}(h(x^{(i)}) - y^{(i)})\],為了友善起見,通常我們會将向量輸入到函數中而不是一個實數,因為在程式設計中我們就是輸入向量或者矩陣的\[J(\theta) = {1 \over 2m}\sum_{i = 0}^{m}(h(x^{(i)}) - y^{(i)})\]其中,\(\theta\)是一個向量,它的值為\[

    \begin{bmatrix}

    \theta_0 \\

    \theta_1 \\

    \theta_2

  • 接下來就是我們熟悉的步驟了通過畫出\(minimize_{\theta_0, \theta_1, \theta_2}J(\theta_0, \theta_1, \theta_2)\)和疊代次數的圖求出應該疊代幾次,關于\(minimize_{\theta_0, \theta_1, \theta_2}J(\theta_0, \theta_1, \theta_2)\)$的值已經在前幾節講過了,使用梯度下降的方法

tmp0 := \theta_0 - \alpha \times {\partial\over\partial\theta_0}J(\theta)

tmp1 := \theta_1 - \alpha \times{\partial\over\partial\theta_1}J(\theta)

tmp2 := \theta_2 - \alpha \times{\partial\over\partial\theta_2}J(\theta)

\theta_0 := tmp0

\theta_1 := tmp1

\theta_2 := tmp2

在最後同步更新\(\theta_0\), \(\theta_1\)和\(\theta_2\)的值,道理都是一樣的

另外的思考-房子的寬(width)和長(length)對房價進行預測

  • 根據标題知道,題目給出了兩個特征width和length,我們當然可以和上一節那樣建構假設函數,上一節的假設函數絕對是首選,但是如果拟合的不好呢?這就意味着我們需要重新建構假設函數,現在我們建構一個新的假設函數\(h(x^{(i)}) = \theta_0 + \theta_1{x_1^{(i)}} + \theta_2{(x^{(i)})}^{2}\),我們發現這與我們之前的假設函數不一樣的地方在于有2階,這個地方就有技巧了,将\({x_1^{(i)}}\)看成一個新的特征\(xnew_1^{(i)}\) 和 \({(x_2^{(i)})}^{2}\)看成另外一個新的特征\(xnew_2^{(i)}\),這樣子我們的假設函數就又成為了一階了的,操作步驟就和之前的一樣了

對資料的處理

在擷取到需要訓練的資料的時候,我們需要對資料進行去均值化

  • 什麼是去均值化
    • 去均值化就是将我們的一列資料的範圍固定到\(-1 \to 1\)$這個範圍之間,但是這個範圍不是硬性要求,可以在這個區間内波動
    • 公式:

      v = {{x - avg} \over {max - min}}

      • v 為去均值之後的資料樣本列向量
      • x 為待去均值的資料樣本列向量
      • avg 為 x 的均值
      • max 為 x 的最大值
      • min 為 x 的最小值
      • 還是要提的是x是一個列向量,就是我們資料表中的一列,就是\(x_j^{(i)}\)中的第j個特征的所有的值
    • 舉例:
      • 假設我們的房價中size的範圍是在(0, 3000)區間内,可想而知有10,有200, 有3000,這樣資料之間的差異太大了,對我們的拟合時候影響的,如果我們使用梯度下降發進行最小化,因為資料差異大,會導緻最小化的速度變慢
      • 使用公式

        得到的v,它所有元素的大小都在\(-1 \to 1\)區間内

  • 為什麼要去均值
    • 很簡單,為了在使用梯度下降的方法進行最小化的時候加快速度
  • 執行去均值之後,我們應該儲存mean和std,因為我們使用的是去均值之後的資料拟合的模型,在使用這個模型的時候,我們也要對輸入進行去均值,這樣拟合出來的資料才是我們需要的。

所有在之前的案例中,我們應該加上去均值這一步

繼續閱讀