吳恩達機器學習(七)支持向量機 3/3 —— 非線性 SVM

  :  + \color{#f00}{***\ 點擊查看\ :吳恩達機器學習 \ —— \ 整套筆記+編程作業詳解\ ***}
第一部分:支持向量機 1/3 —— 建立 SVM 基本型(超平面與間隔)
第二部分:支持向量機 2/3 —— 線性可分SVM

非線性問題

我們已經瞭解到,SVM如何處理線性可分的情況,而對於非線性的情況,SVM的處理方式就是通過一個非線性變換,將輸入的低維特徵映射到高維特徵空間,將其變成在高維空間線性可分,並在這個高維空間中構造最優分類超平面,如下圖:

在這裏插入圖片描述

根據上篇文章,線性可分的情況下,可知最終的超平面方程爲:
f(x)=wTx+b=i=1mαiyixiTx+b\begin{aligned} f(\boldsymbol{x}) &=w^{T} x+b \\ &=\sum_{i=1}^{m} \alpha_{i} y_{i} \boldsymbol{x}_{i}^{T} \boldsymbol{x}+b \end{aligned} 用內積表示:f(x)=i=1mαiyixi,x+bf(\boldsymbol{x})=\sum_{i=1}^{m} \alpha_{i} y_{i}\left\langle\boldsymbol{x}_{i}, \boldsymbol{x}\right\rangle+b 對於線性不可分,我們使用一個非線性映射,將數據映射到特徵空間,在特徵空間中使用線性學習器,分類函數變形如下:
f(x)=i=1mαiyiϕ(xi),ϕ(x)+bf(\boldsymbol{x})=\sum_{i=1}^{m} \alpha_{i} y_{i}\left\langle\phi\left(\boldsymbol{x}_{i}\right), \phi(\boldsymbol{x})\right\rangle+b 其中 ϕϕ 表示從輸入空間(X)到某個特徵空間(F)的映射,這意味着建立非線性學習器分爲兩步:

  1. 首先使用一個非線性映射將數據變換到一個特徵空間F;
  2. 然後在特徵空間使用線性學習器進行分類。

由上式可知,我們的主要計算任務就是高維特徵空間的內積 <ϕ(xi),ϕ(x)><ϕ(x_i),ϕ(x)>

核技巧與核函數

假如在低維空間中存在某個函數KK,它恰好等於在高維空間中的內積,即K(xi,x)= <ϕ(xi),ϕ(x)>K(x_i, x)=\ <ϕ(x_i),ϕ(x)>那麼SVM就不用計算複雜的非線性變換,而由這個函數 K(xi,x)K(x_i, x) 直接得到非線性變換的內積,大大簡化了計算。這樣的函數 K(xi,x)K(x_i, x) 就被稱爲核函數

這種將內積替換成核函數的方式被稱爲 核技巧(kernel trick)

舉個例子:假設現在有兩個二維空間中的數據點 x=(x1,x2)x=(x1,x2)y=(y1,y2)y=(y1,y2),考慮下面這個二元函數:K(x,y)=(x.y+1)2=(x1y1+x2y2+1)2=x12y12+x22y22+2x1y1+2x2y2+2x1x2y1y2=(x12,x22,2x1x2,2x1,2x2,1)(y12,y22,2y1y2,2y1,2y2,1)=<ϕ(x),ϕ(y)>\begin{aligned} K(x, y)=(x . y+1)^{2}&=\left(x_{1} y_{1}+x_{2} y_{2}+1\right)^{2} \\ &=x_{1}^{2} y_{1}^{2}+x_{2}^{2} y_{2}^{2}+2 x_{1} y_{1}+2 x_{2} y_{2}+2 x_{1} x_{2} y_{1} y_{2} \\ &=\left(x_{1}^{2}, x_{2}^{2}, \sqrt{2} x_{1} x_{2}, \sqrt{2} x_{1}, \sqrt{2} x_{2}, 1\right) \cdot\left(y_{1}^{2}, y_{2}^{2}, \sqrt{2} y_{1} y_{2}, \sqrt{2} y_{1}, \sqrt{2} y_{2}, 1\right) \\ &=<ϕ(x),ϕ(y)> \end{aligned}發現最後結果恰好是兩個向量的內積,而且兩個向量分別是二維空間數據點 xxyy 在5維空間中的映射!想到剛纔核函數的定義,我們很容易知道,K(x,y)K(x,y) 就是一個核函數,這樣大大簡化了運算。

通過核技巧的轉變,我們的超平面方程變爲:
f(x)=i=1mαiyiK(xi,x)+bf(\boldsymbol{x})=\sum_{i=1}^{m} \alpha_{i} y_{i} K\left(\boldsymbol{x}_{i}, \boldsymbol{x}\right)+b 對偶問題變爲:
maxαi=1mαi12αiαjyiyjK(xi,xj) s.t. αi0,i=1,2,,mi=1mαiyi=0\begin{aligned} &\max _{\boldsymbol{\alpha}} \sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \alpha_{i} \alpha_{j} y_{i} y_{j} K\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right) \\ &\text { s.t. } \alpha_{i} \geq 0, i=1,2, \cdots, m \\ &\quad \sum_{i=1}^{m} \alpha_{i} y_{i}=0 \end{aligned}

核函數的選擇

常用的核函數有很多,例如,線性核、多項式核、拉普拉斯核等等,一般我們使用徑向基核函數(RBF)。

徑向基核函數是SVM中常用的一個核函數。徑向基核函數採用向量作爲自變量的函數,能夠基於向量舉例運算輸出一個標量。徑向基核函數的高斯版本的公式如下:
K(x1,x2)=exp{x1x222σ2}K\left(\boldsymbol{x}_{1}, \boldsymbol{x}_{2}\right)=\exp \left\{-\frac{\left\|\boldsymbol{x}_{1}-\boldsymbol{x}_{2}\right\|^{2}}{2 \sigma^{2}}\right\}
其中,σ是用戶自定義的用於確定到達率(reach)或者說函數值跌落到0的速度參數。

  • 如果σ選得很大,模型複雜度越高,高次特徵上的權重實際上衰減得非常快,所以實際上(數值上近似一下)相當於一個低維的子空間;
  • 如果σ選得很小,則可以將任意的數據映射爲線性可分——當然,這並不一定是好事,因爲隨之而來的可能是非常嚴重的過擬合問題。

總的來說,通過調控參數σ,高斯覈實際上具有相當高的靈活性,也是使用最廣泛的核函數之一。


推薦閱讀:
支持向量機實戰篇之再撕非線性SVM
Coursera-吳恩達-機器學習-(第7周筆記)支持向量機

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章