在 SVM 中引入核方法便可使得 SVM 變為非線性分類器,給定非線性可分數據集 $\left \{ (x_i,y_i)\right\}_{i=1}^N$,如下圖所示,此時找不到一個分類平面來將數據分開,核方法可以將數據投影到新空間,使得投影后的數據線性可分,下圖給出一個 $\mathbb{R}^2\rightarrow \mathbb{R}^2$ 的映射,原空間為 $x=(x^{(1)},x^{(2)})$ ,新空間 為 $z = \phi(x) = \left \{ (x^{(1)})^2,(x^{(2)})^2\right \}$ ,根據圖可以看出映射后樣本點的變化,此時樣本便為線性可分的了,直接用 $w_1 \cdot z^{(1)} +w_2 \cdot z^{(2)} +b= 0$ 分類即可。
上圖是一個 $\mathbb{R}^2\rightarrow \mathbb{R}^2$ 的映射,但一般情況下,特征空間的選取往往是很高維度的 $\mathbb{R}^2\rightarrow \mathbb{R}^n$ ,如下為一個 $\mathbb{R}^2\rightarrow \mathbb{R}^3$ 的映射:
下面給核函數一個正式定義,設 $\chi$ 為輸入空間,$\omega$ 為特征空間,如果存在一個 $\chi$ 到 $\omega$ 的映射 $\phi(x):\chi \rightarrow \omega$ ,對所有的 $x,z \in \chi$,函數 $K(x,z)$ 滿足 $K(x,z) = \phi(x)\cdot\phi(z)$ ,則稱 $\phi(x)$ 為輸入空間到特征空間的映射函數,$K(x,z)$ 為核函數。
核函數常用的技巧是不計算映射函數 $\phi(x)$ ,因為特征空間 $\omega$ 通常是高維的,甚至無窮維,所以 $\phi(x)$ 計算並不容易,而計算核函數 $K(x,z)$ 卻相對簡單。映射 $\phi(x)$ 取法多種多樣,可以取不同的特征空間,即使在同一特征空間也可以取不同的映射。映射后的樣本一般是線性可分帶有異常值的,這時考慮 SVM 的優化目標:
\begin{aligned}
&\min_a \ \ \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N a_ia_jy_iy_j(x_i \cdot x_j) - \sum_{i=1}^Na_i \\
&s.t. \ \ \ \ \ 0 \le a_i \le C , \ i = 1,2,…,N\\
& \ \ \ \ \ \ \ \ \ \sum_{i=1}^Na_iy_i = 0,\ i = 1,2,…,N
\end{aligned}
由於在輸入空間計算的是 $x_i ,x_j$ 的內積,所以經過映射后分別為 $\phi(x_i)$ 與 $\phi(x_j)$ ,現在只需修改目標函數為 $\phi(x_i)$ 與 $\phi(x_j)$ 的內積即可,又由於 $\phi(x_i) \cdot \phi(x_j) = K(x_i,x_j)$ ,所以不需要定義映射函數 $\phi(x)$ ,只需要定義核函數便可得到高維空間中內積的結果,而這便是 Kernel Trick。所以線性不可分的數據集的優化目標變為:
\begin{aligned}
&\min_a \ \ \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N a_ia_jy_iy_jK(x_i , x_j) - \sum_{i=1}^Na_i \\
&s.t. \ \ \ \ \ 0 \le a_i \le C , \ i = 1,2,…,N\\
& \ \ \ \ \ \ \ \ \ \sum_{i=1}^Na_iy_i = 0,\ i = 1,2,…,N
\end{aligned}
也就是說給定核函數 $K(x,z)$ ,即可用求解線性 SVM 的方法來求解非線性問題,核技巧的好處在於不需要顯式的定義特征空間與映射函數,只需要選擇一個合適的核函數即可。綜上核函數是用來免去顯式計算高維變換的,直接用低維度的參數帶入核函數來等價計算高維度的向量的內積。
核函數的選擇
什么樣的函數 $K(x,z)$ 可以作為一個有效核函數呢?答案是只要滿足 Mercer 定理 即可,即如果函數 $K(x,z)$ 是 $\mathbb{R}^n \times \mathbb{R}^n \rightarrow \mathbb{R}$ 上的映射( 也就是兩個$n$ 維向量映射到實數域 )。那么如果 $K(x,z)$ 是一個有效核函數(也稱為Mercer核函數),那么當且僅當其訓練樣本 $\left \{x_1,x_2…,x_N \right \}$ 相應的核函數矩陣是對稱半正定的,這里先解釋一下正定矩陣:
首先來定義奇異矩陣,若 n 階矩陣 A 為奇異陣,則其行列式為零,即 $|A| = 0$ 。
設 M 是 n 階方陣,如果對任何非零向量 z ,都有 $z^TMz >0$ ,其中 $z^T$ 表示 z 的轉置,就稱 M 為正定矩陣。
正定矩陣性質如下:
1)正定矩陣一定是非奇異的。
2)正定矩陣的任一主子矩陣也是正定矩陣。
3)若 A 為 n 階正定矩陣,則 A 為 n 階可逆矩陣。
對於 N 個訓練樣本,每一個樣本 $x_i$ 對應一個訓練樣例。那么,我們可以將任意兩個 $x_i$ 和 $x_j$ 帶入核函數中,計算 $K_{ij} = K(x_i,x_j)$ 。這樣可以把 $K_{ij}$ 表示為一個 $m \times m$ 的 Gram 矩陣,只要 Gram 矩陣為對稱半正定的,則 K(x,z) 即為一個有效的核函數,Gram 矩陣如下:
\begin{bmatrix}
K_{11}& K_{12}& \cdots& K_{1m}& \\
K_{21}& K_{22}& \cdots& K_{2m}& \\
\vdots & \vdots& \ddots& \vdots& \\
K_{m1}& K_{m2}& \cdots& K_{mm}
\end{bmatrix}
顯然對於自己定義的核函數判定是否為正定核不太容易,所以在工業生產中一般使用一些常用的核函數,下面給出幾個:
1)線性核:線性核其實就是不采用非線性分類器,認為樣本是線性可分的;
\[K(x,z) = x \cdot z +c\]
2)多項式核:該核函數對應的是一個 p 次多項式的分類器,這時需要額外調節的參數為 c p ;
\[K(x,z) = (x \cdot z +c)^p\]
3)高斯核:或者叫做徑向基核,該核函數甚至可以將特征空間映射為無窮維,這時需要額外調節的參數為 $\delta$ ,
\[K(x,z) = exp \left ( \frac{-||x-z||^2 }{2 \delta^2}\right )\]
如果 $\delta$ 選得很大的話,高次特征上的權重實際上衰減得非常快,所以實際上(數值上近似一下)相當於一個低維的子空間;反過來,如果 $\delta$ 選得很小,則可以將任意的數據映射為線性可分,當然,這並不一定是好事,因為隨之而來的可能是非常嚴重的過擬合問題。總的來說,通過調控參數 $\delta$ ,高斯核實際上具有相當高的靈活性,也是使用最廣泛的核函數之一。
綜上,給出非線性可分支持向量機的學習算法1.4:
給定非線性可分數據集 $\left \{ (x_i,y_i)\right\}_{i=1}^N$ ;
(1)構造約束最優化問題:
\begin{aligned}
&\min_a \ \ \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N a_ia_jy_iy_jK(x_i , x_j) - \sum_{i=1}^Na_i \\
&s.t. \ \ \ \ \ 0 \le a_i \le C , \ i = 1,2,…,N\\
& \ \ \ \ \ \ \ \ \ \sum_{i=1}^Na_iy_i = 0,\ i = 1,2,…,N
\end{aligned}(2)求解得到 $a^* = (a^*_1,a^*_2,…,a^*_N)$ ,求解一般采用SMO算法
(3)根據 $a^*$ 求解得到 $w^*,b^*$ ,首先選擇 $0<a_j^*<C$ ,的支持向量 $(x_j,y_j)$ :
\begin{aligned}
&w^* = \sum_{i=1}^Na_i^*y_ix_i\\
&b^* = y_j - \sum_{i=1}^N y_ia_i^*K(x_i , x_j)
\end{aligned}(4)求得超平面 $w^* \cdot x +b^* = 0$ , 對於新的觀測數據 $x$ ,判斷其類別:
\[f(x) = sign \left( \sum_{i=1}^N a_i^*y_iK(x,x_i) +b^*\right)\]