機器學習演算法實踐-SVM核函數和軟間隔

前言

上文中簡單總結了對於線性可分數據的SVM的演算法原理,本文對於非線性可分以及有雜訊存在的時候我們需要對基本SVM演算法的改進進行下總結其中包括:

  1. 核函數在SVM演算法中的使用
  2. 引入鬆弛變數和懲罰函數的軟間隔分類器

SVM對偶問題

這裡稍微回顧下SVM最終的對偶優化問題,因為後面的改進都是在對偶問題的形式上衍生的。

標準形式

min frac{1}{2} lVert w 
Vert ^{2}

subject to y_{i}(w^{T}x_{i} + b) ge 1

對偶形式

arg max limits_{alpha} sum_{i=1}^{N} alpha_{i} - frac{1}{2}sum_{i=1}^{N}sum_{j=1}^{N}y_{i}y_{j}alpha_{i}alpha_{j}langle x_{i}, x_{j} 
angle

subject to alpha_{i} ge 0 , sum_{i=1}^{N}alpha_{i}y_{i}=0

其中 walpha 的關係: w = sum_{i=1}^{N}alpha_{i}y_{i}x_{i}

SVM預測

SVM通過分割超平面 w^{T}x + b 來獲取未知數據的類型,將上述 walpha 替換得到

h_{w, b}(x) = g(w^{T}x + b) = g(sum_{i=1}^{N}alpha_{i}y_{i} langle x_{i}, x 
angle + b)

通過 g(x) 輸出+1或者-1來獲取未知數據的類型預測.

核函數

對於分線性可分的數據我們通常需要將數據映射到高維空間中使得原本在低維空間線性不可分的數據在高維空間中線性可分。例如從一維映射到4維:

x xrightarrow{phi(x)} left[egin{matrix} x \ x^{2} \ x^{3} \ x^{4} \ end{matrix} 
ight]

然後對偶形式中也有數據向量的乘積,於是便可以進行替換:

langle x_{i}, x_{j} 
angle 
ightarrow langle phi(x_{i}), phi(x_{j}) 
angle

但是呢,有時候 phi(x) 會使得 x 維度太高,這樣計算內積的複雜度很高,計算起來就會很困難,這個時候我們便需要核函數來拯救我們的計算複雜度。

我們需要使用一個函數來代替向量內積,但是這個核函數是可以表示成向量內積的形式的,只不過在計算結果的時候我們直接求函數值就好了,不需要做內積運算。這樣複雜度會降低:

K(x, z) = langle phi(x), phi(z) 
angle

核函數例子

這裡總結下幾個例子來對核函數的作用加深下理解.

對於 x, z in mathbb{R}^{n} , 我們令核函數為:

K(x, z) = (x^{T}z)^{2} = (sum_{i=1}^{N}x_{i}z_{i})^{2} = sum_{i=1}^{N}sum_{j=1}^{N} (x_{i}x_{j})(z_{i}z_{j}) = langle phi(x), phi(z) 
angle

對於 x in mathbb{R}^{2} , 這個時候 phi(x) 的作用就相當於:

phi(x) = left[ egin{matrix} x_{1}x_{1} \ x_{1}x_{2} \ x_{2}x_{1} \ x_{2}x_{2} \ end{matrix} 
ight]

那麼我們可以分析下,如果沒有引入核函數,我們需要計算維數為 n^2 的向量的內積,其運算時間複雜度為 O(n^2) 。但是通過核函數的引入我們不需要顯式的計算向量內積了,而是直接計算核函數 (x^{T}z)^2 的值,計算核函數的值我們只需要計算一次維數為 n 的向量內積和一次平方運算,時間複雜度為 O(n)

可見,我們通過計算核函數,隱式的處理了一個維數很高的向量空間,降低了計算複雜度 O(n^{2}) 
ightarrow O(n)

對於上面的核函數進行推廣,我們可以有核函數:

K(x, z) = (x^{T}z + C)^{2} = (x^{T}z)^{2} + 2C(x^{T}z) + c^{2}

對於 x in mathbb{R}^{2} , 這時 phi(x) 相當於:

phi(x) = left[ egin{matrix} x_{1}x_{1} \ x_{1}x_{2} \ x_{2}x_{1} \ x_{2}x_{2} \ sqrt{2C}x_{1} \ sqrt{2C}x_{2} \ C \ end{matrix} 
ight]

這樣我們將原本需要計算長度為 n^{2} + n + 1 的向量內積改成了直接計算兩個長度為 n 的向量內積以及一個求和一次乘積運算。複雜度從 O(n^{2}) 降到了 O(n)

更通用的形式可以寫成:

K(x, z) = (x^{T}z + C)^{d}

可見,在我們原始的SVM推導中,直接使用原始向量的內積便是這種形式的一種特殊形式,即 C = 0, d = 1

另外,可以直觀的看到,如果 phi(x)phi(z) 的夾角比較小,則計算出來的 K(x,z) 就會比較大,相反如果 phi(x)phi(z) 的夾角比較大,則核函數 K(x,z) 會比較小。所以核函數一定程度上是 phi(x)phi(z) 相似度的度量。

高斯核函數(Gaussian kernel)

K(x, z) = exp(-frac{lVert x - z 
Vert^{2}}{2sigma^{2}})

通過高斯核函數的公式可以看出,如果 xz 相差很小,則 K(x,z) 趨近於1, 相反如果相差很大則 K(x,z) 趨近於0。高斯核函數能夠將數據映射到無限維空間,在無限維空間中,數據都是線性可分的。

核函數的合法性

判定核函數的合法性需要構造一個矩陣,即核函數矩陣 K

對於一個核函數 K(x,z) 以及 m 個訓練數據 left{ x_{1}, x_{2}, …, x_{m} 
ight} , 核函數矩陣中的元素 K_{i,j} 定義如下:

K_{i, j} = K(x_{i}, x_{j})

現在在這裡簡單推導下核函數有效的必要條件:

K(x, z) 有效,則矩陣元素可寫成(矩陣為對稱矩陣)

K_{i, j} = phi(x_{i})^{T}phi(x_{j}) = phi(x_{j})^{T}phi(x_{i}) = K_{i, j}

對於向量 z , 我們有:

z^{T}Kz = sum_{i} sum_{j} z_{i}K_{i, j}z_{j} = sum_{i} sum_{j}z_{i}phi(x_{i})^{T}phi(x_{j})z_{j} = sum_{i} sum_{j} z_{i} (sum_{k}phi(x_{i})_{k} phi(x_{j})_{k}) z_{j}

= sum_{k} sum_{i} sum_{j} z_{i} phi(x_{i})_{k} phi(x_{j})_{k} z_{j} = sum_{k}(sum_{i} z_{i}phi(x_{i})_{k})^{2} ge 0

此為矩陣 K 為半正定矩陣的必要條件。這就證明了,矩陣 K ge 0 是對應核函數KK有效的必要條件。當然他也是充分條件(參考Mercer』s theorem)

因此通過mercer定理我們可以不需要顯式的去尋找核函數對應的 phi(x) 而是構造核函數矩陣 K ,進而判斷 K 是否半正定來判斷核函數的有效性。

L1軟間隔SVM(L1 soft margin SVM)

通過核函數將數據映射到高維空間能夠增加數據線性可分的可能性,但是對於含有雜訊的數據,優化出來的SVM可能不是我們最想要的,我們並不希望SVM會被雜訊影響,因此我們可以通過引入鬆弛變數來使我們優化SVM時忽略掉雜訊的影響,僅僅考慮那些真正有效的數據。

對於原始SVM標磚形式的約束條件:

y_{i}(w^{T}x_{i} + b) ge 1

意味著所有數據點距離分割平面的距離都大於1.

但有的時候具有雜訊,完全按照原始的約束條件,可能會是SVM發生較大的誤差,如下圖:

為了能讓SVM忽略某些雜訊,我們可以引入一個鬆弛變數 xi_{i} ge 0 來允許錯誤的分類發生,也就是允許有間隔小於1的數據點出現, 即:

y_{i}(w^{T}x_{i} + b) ge 1 - xi_{i}

但是只鬆弛約束條件可不行,我們同樣要限制這種鬆弛,這時候我們需要在目標函數上加一個懲罰函數。

原始的目標函數為:

arg min limits_{w, b} frac{1}{2} lVert w 
Vert^{2}

加入懲罰後:

arg min limits_{w, b, xi} frac{1}{2} lVert w 
Vert^{2} + Csum_{i=1}^{N}xi_{i}

其中CC為懲罰因子來衡量懲罰的程度, C越大表明離群點越不被希望出現。

於是加上懲罰函數的SVM優化問題就變為:

arg min limits_{w, b, xi} frac{1}{2} lVert w 
Vert^{2} + Csum_{i=1}^{N}xi_{i}

subject to y_{i}(w^{T} + b) ge 1 - xi_{i} , xi_{i} ge 0, i = 1, …, N

然後我們求此問題的對偶問題,方法與原始SVM推導方法相同,使用拉格朗日乘子法,然後獲取 w 的表達式,回代最後獲得對偶形式:

arg max limits_{alpha} [sum_{i=1}^{N}{alpha_{i}} - frac{1}{2}sum_{i=1}^{N}sum_{j=1}^{N}y_{i}y_{j}alpha_{i}alpha_{j}langle x_{i}, x_{j} 
angle]

subject to 0 le alpha_{i} le C , sum_{i=1}^{m}alpha_{i}y_{i} = 0

可見,軟間隔SVM的目標函數形式同硬間隔的形式相同,唯一不同的就在於 alpha_{i} 的範圍。

總結

本文對SVM中的核函數以及軟間隔的原理進行了總結,對於非線性可分以及含有雜訊的數據我們可以通過以上兩種方法獲得合適的分類器。後面將對目標函數的優化方法進行總結。

推薦閱讀:

機器學習演算法實踐-Platt SMO和遺傳演算法優化SVM
淺談最優化問題的KKT條件
為什麼svm不會過擬合?

TAG:SVM | kernel核函数 | 机器学习 |