1. 程式人生 > >演算法工程師修仙之路:吳恩達機器學習(十三)

演算法工程師修仙之路:吳恩達機器學習(十三)

吳恩達機器學習筆記及作業程式碼實現中文版

第十章 支援向量機


優化目標

  • 在監督學習中,許多學習演算法的效能都非常類似,因此,重要的不是你該選擇使用學習演算法 A 還是學習演算法 B,而更重要的是,所建立的大量資料在應用這些演算法時,表現情況通常依賴於你的水平。比如你為學習演算法所設計的特徵量的選擇,以及如何選擇正則化引數,諸如此類。
  • 支援向量機(Support VectorMachine),簡稱 SVM,與邏輯迴歸和神經網路相比,在學習複雜的非線性方程時提供了一種更為清晰,更加強大的方式。
  • 從邏輯迴歸開始展示如何一點一點修改來得到本質上的支援向量機:
    • 在邏輯迴歸中我們已經熟悉了下圖的假設函式形式和右邊的 S 型激勵函式。
      在這裡插入圖片描述
    • 如果有一個 y = 1 y=1 的樣本,不管是在訓練集中或是在測試集中,又或者在交叉驗證集中,總之是 y
      = 1 y=1
      ,現在我們希望 h θ (
      x ) ℎ_\theta(x)
      趨近 1。因為我們想要正確地將此樣本分類,這就意味著當 h θ ( x ) ℎ_\theta(x) 趨近於 1 時, h θ ( x ) ℎ_\theta(x) 應當遠大於 0,這裡的>>意思是遠遠大於 0。
    • 相反地,如果我們有另一個樣本,即 y = 0 y=0 。我們希望假設函式的輸出值將趨近於 0,這對應於 θ T x \theta^Tx ,或者就是 z z 會遠小於 0,因為對應的假設函式的輸出值趨近 0。
      在這裡插入圖片描述
    • 現在,一起來考慮兩種情況:一種是y等於 1 的情況;另一種是y等於 0 的情況。
    • 在第一種情況中,假設 y = 1 y=1 ,此時在目標函式中只需有第一項起作用,因為 y = 1 y=1 時, ( 1 y ) (1 − y) 項將等於 0。因此,當在 y = 1 y=1 的樣本中時,即在 (x, y)中 ,我們得到 l o g ( 1 1 + e z ) -log(\frac{1}{1+e^{-z}}) 這一項。
    • 如果畫出關於 z z 的函式,我們同樣可以看到,當 z z 增大時,也就是相當於 θ T x \theta^Tx 增大時, z z 對應的值會變的非常小。對整個代價函式而言,影響也非常小。這也就解釋了,為什麼邏輯迴歸在觀察到正樣本 y = 1 y=1 時,試圖將 θ T x \theta^Tx 設定得非常大。因為,在代價函式中的這一項會變的非常小。
    • 現在開始建立支援向量機,我們會從這個代價函式開始,也就是 l o g ( 1 1 1 + e z ) -log(1-\frac{1}{1+e^{-z}}) 一點一點修改,取這裡的 z = 1 z=1 點,先畫出將要用的代價函式:
      在這裡插入圖片描述
    • 新的代價函式是一條直線,也就是用紫紅色畫的曲線,這裡已經非常接近邏輯迴歸中使用的代價函數了,不過這裡是由兩條線段組成,即位於右邊的水平部分和位於左邊的直線部分,左邊直線部分的斜率並不重要。但是,這裡我們將使用的新的代價函式,是在 y = 1 y=1 的前提下的。
    • 目前,我們只是討論了 y = 1 y=1 的情況,另外一種情況是當 y = 0 y=0 時,此時代價函式只留下了 l o g ( 1 1 1 + e z ) -log(1-\frac{1}{1+e^{-z}}) 這一項。如果你將這一項作為 z z 的函式,那麼,這裡就會得到橫軸 z z 。同樣地,我們要替代這一條藍色的線,用相似的方法:
      在這裡插入圖片描述
    • 如果我們用一個新的代價函式來代替,即這條從 0 點開始的水平直線,然後是一條斜線,像上圖。那麼,現在給這兩個方程命名為 c o s t 1 ( z ) cost_1(z) c o s t 0 ( z ) cost_0(z) 。這裡的下標是指在代價函式中,對應的 y = 1 y=1 y = 0 y=0 的情況,擁有了這些定義後,現在,我們就開始構建支援向量機:
      在這裡插入圖片描述
    • 首先,我們要除去1/m這一項,當然,這僅僅是由於人們使用支援向量機時,對比於邏輯迴歸而言,不同的習慣所致,這也會得出同樣的 θ \theta 最優值。
    • 第二點概念上的變化,我們只是指在使用支援向量機時,一些如下的標準慣例,而不是邏輯迴歸。對於邏輯迴歸,在目標函式中,我們有兩項:第一個是訓練樣本的代價,第二個是我們的正則化項。這就相當於我們想要最小化 A A 加上正則化引數 λ \lambda ,然後乘以其他項 B B ,我們所做的是通過設定不同正則引數 λ \lambda 達到優化目的,使得訓練樣本擬合的更好,即最小化 A A
    • 對於支援向量機,按照慣例,我們將使用一個不同的引數替換這裡使用的 λ \lambda 來權衡這兩項,就是第一項和第二項我們依照慣例使用一個不同的引數稱為 C C ,同時改為優化目標 C × A + B C×A+B
    • 在邏輯迴歸中,如果給定 λ \lambda 一個非常大的值,意味著給予 B B 更大的權重。而這裡,就對應於將 C C 設定為非常小的值,那麼,相應的將會給 B B 比給 A A 更大的權重。
    • 因此,這只是一種不同的方式來控制這種權衡或者一種不同的方法,即用引數來決定是更關心第一項的優化,還是更關心第二項的優化。
    • 那麼,我現在刪掉這裡的 λ \lambda ,並且用常數 C C 來代替。這就得到了在支援向量機中我們的整個優化目標函式。然後最小化這個目標函式,得到 SVM 學習到的引數 C C
      在這裡插入圖片描述
    • 最後有別於邏輯迴歸輸出的概率。在這裡,我們的代價函式,當最小化代價函式,獲得引數 θ \theta 時,支援向量機所做的是它來直接預測 y y 的值等於1,還是等於0,當 θ T x \theta^Tx 大於或者等於 0 時,這個假設函式會預測1,其他情況為0。
    • 這就是支援向量機數學上的定義。