1. 程式人生 > >實戰06 頂天立地,三分天下——支援向量機SVM

實戰06 頂天立地,三分天下——支援向量機SVM

SVM有三寶:間隔,對偶,核技巧。
軟間隔鬆弛變數( ζ {\zeta } ) or 懲罰因子( C)

核函式與鬆弛變數: 一般的過程應該是這樣,還以文字分類為例。在原始的低維空間中,樣本相當的不可分,無論你怎麼找分類平面,總會有大量的離群點,此時用核函式向高維空間對映一下,雖然結果仍然是不可分的,但比原始空間裡的要更加接近線性可分的狀態(就是達到了近似線性可分的狀態),此時再用鬆弛變數處理那些少數“冥頑不化”的離群點,就簡單有效得多啦。

——————————————————————————————
一 分隔超平面

  • 將資料集分隔開來的物件叫做分隔超平面,寫成 W T X + b
    W^{T}X+b
    。特別地,二維平面的分隔超平面是直線。
  • 尋找離分隔超平面最近的點,確保它們離分隔面的距離儘可能遠。這裡點到分隔面的距離被稱為間隔(margin)。
  • 支援向量(support vector)就是離分隔超平面最近的那些點。

二 最大間隔

分類器輸出的是類別標籤,這裡輸出的是{+1, -1}
目標:尋找分類器定義中的 w 和 b
第一步就是尋找支援向量,而滿足 α

\alpha >0時,則為支援向量。

  • 最大化間隔的公式如下:
    在這裡插入圖片描述

  • 優化目標(對偶問題):
    在這裡插入圖片描述
    尖括號表示內積。

  • 其約束條件為:
    在這裡插入圖片描述

在這裡插入圖片描述

三 SMO演算法

目標:求出一些列的 α \alpha 和b(進而可得到w),有了w和b就可以得到超平面。
原理:(由約束條件)每次迴圈中選擇兩個 α \alpha 進行優化,並固定其他。因為累加和為0,因此,優化過程中一個增大,一個必須減小。<內迴圈、外迴圈>

smo演算法公式推導

清單6-2 如何判斷正間隔還是負間隔?(存疑)

numpy陣列過濾 如:alphas[alphas>0]

優化加速:選擇最大步長

迴圈計算cache列表中的預測誤差,並返回使誤差變化量最大的下標maxK 和最大誤差值Ej。

計算w

smoP(…)返回b和 alphas後,根據對偶問題中的公式:
w = i = 1 m α i y i x i w = \sum_{i=1}^m \alpha_i y_i x_i

四 核技巧

核函式(kernel)的工具將資料轉換成易於分類器理解的形式。將低維特徵空間對映到高維空間。 其中,徑向基函式(radial basis function)是最流行的二分類的核函式。

將內積替換成核函式的方式,稱為核技巧。

  • 徑向基函式高斯版本中, σ \sigma 是使用者定義的到達率(reach)或者說是函式值跌落到0的速度引數。
  • 線性核函式中,內積計算實在“所有資料集X” 和“資料集中的一行X[i, :]”這兩個輸入中展開。

numpy矩陣中,除法指對矩陣元素展開計算,而不是matlab中的求逆。