天天看點

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

* 以下内容是在學習過程中的一些筆記,難免會有錯誤和纰漏的地方。如果造成任何困擾,很抱歉。 *

限于篇幅過長,分為三個部分:

1.SVM與SVR(1)——KKT條件和Lagrange對偶函數g

2.SVM與SVR(2)——SVM、SVM柔性邊界和核函數

3.SVM與SVR(3)——SVR和SVR、SVM的support vector對比

開始正文。

2.1 SVM(支援向量機, Support Vector Machines)

2.11 超平面(Hyperplane)

回到第一篇最開始給出的第一個例子(例1):

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

在如上圖的二維空間裡,有兩類不同個體(y=0和y=1),我們友善讨論就說C0類(y=0)和C1類(y=1)。。很明顯,在“中間”畫一條直線l,就可以判斷一個樣本的所屬類别(直線l上方為C1,直線下方為C0)。

那麼如果在三維空間裡呢?可以找到z=0(或z=0.25)的一個平面,把C0和C1區分出來:位于z=0平面上方為C1,位于z=0平面下方為C2。

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

更一般地,在n維線性空間,我們嘗試找到一個

超平面(Hyperplane)

。有了這個超平面,我們就可以判斷某個樣本屬于C0還是C1了。在二維空間裡面,超平面就是一條線;在三維空間裡,超平面就是一個面;...;在n維線性空間裡,超平面應該是(n-1)次元的。

我們設超平面的表達式為

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

。其中,

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

為n*1維列向量。

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

即,我們在意的是

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

,其中

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

表示判斷符号函數。

2.12 幾何間隔(Geometric Margin)

我們現在已經确定要找一個超平面(Hyperplane)。再回到最初的例1:會發現,直線l和直線2在這個圖中都可以作為我們想到的直線,如果隻是單純看起來區分C0和C1。或者說,這個例子中,其實能找出來無數條直線。那這無數條直線中,有沒有所謂的好壞呢?如果有好壞,怎麼樣找到那條最好的?

這個好壞的标準就是:

幾何間隔(Geometric Margin)

我們設一個樣本為

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

,其中

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

維列向量(可以了解成一個個體有n個特征(features)),

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

等于-1或者1。

定義,

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

。如果把

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

歸一化,用

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

表示,則有:

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

。其中,

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

為向量

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

的範數,它的p-範數為

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

。我們一般用2-範數。

當用2-範數時,

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

即為“幾何間距”,點到超平面的距離。我們一般設

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

。其中,

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

表示離超平面最近的點。這裡

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

設成1,我了解:設成幾都可以,無非就是前面的

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

同時放縮一下。就像下圖,

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

設成幾,無非就是所有的點到直線的距離擴大縮小而已。更嚴謹的證明見:為什麼SVM推導過程中,可以令幾何間隔等于1?

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

為什麼幾何間隔越大,越好?

因為幾何間隔與誤分次數有如下關系:誤分次數

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

。其中,

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

,即樣本中向量長度最長的值(樣本分布最遠)。

通過上式可知,

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

越大,誤分次數上界越小。是以,所謂的“最好” =

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

形象的也很友善。如下圖,Fig 1是一個幾何間隔大的超平面,Fig 2是一個幾何間隔小的超平面。實線代表超平面H(不應該用射線...),Fig 1的應該是更好的。因為在Fig 2中,超平面H離圓圈類别太近了。很容易就把圓圈類别誤判成方塊。

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

Fig 1 Fig 2

綜上所述,我們要找的超平面,最大化幾何間隔(

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

)是最好的。

上述幾何問題就變成了一個最優化的代數問題:

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

另外,上述過程我們設

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

。其中,

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

表示離超平面最近的點。即所有樣本點間隔

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數
pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

最開始的問題

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

2.2 SVM柔性邊界

現實中,有很多問題并不是像例1圖中那麼“完全可分”。如下圖,因為極個别樣本(樣本A),導緻無解(找不到一個超平面可以完全區分C0和C1)。又或者找一條非常彎曲的曲線用來高精度地區分C0和C1,不過其實這就犯了過度拟合的錯誤。用這種方法,在高次元中,因為一些極端值,需要頻繁地彎曲超平面。

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

其實上圖中,除了A點,其他點就可以被直線分類了。是以,我們可能會認為點A是個極端點,可以忽略這類點。是以,為了引入容錯性,給式子(1)的硬性門檻值(1)加一個“

松弛變量
pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

”。

在2.1中公式變成如下形式:

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

式子中的

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

的出現,即允許出現間隔比1小的點,而且我們放棄了對這類點的精确分類。換回來的,我們不必因為極端點頻繁地移動,可以得到更大的幾何間隔。

式子中的

C被稱為懲罰因子。

可以從以下幾個角度了解它。

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

如果考慮所有點,那麼在極端值附近,波動會很大(,突然地跳躍,出現過拟合現象)。因為有了

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

這項的存在,在一個求最小值的過程中,相當于對它的懲罰(損失)。

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數
pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

的大小說明了對于離群點的在意程度。C越大,說明這個離群點損失就越大,即越不願意放棄這個點。

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

C是一個使用者指定的系數。

其實SVM柔性邊界的存在,就像個别(離散)點和更大幾何間隔(分類邊界更平衡)的一個trade off。

從幾何角度了解一下柔性邊界做了一個什麼工作:

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

完美可分 柔性邊界

在完美可分的情況下,帶狀區域就是兩倍的幾何間距,柔性邊界呢就是把這個距離放大了,本來這個帶狀區域中沒有訓練樣本,現在我允許可以有一些訓練樣本了,不等式中的1就是縮放後的帶狀區間的邊界,現在訓練樣本滿足的公式可以比這個邊界小了,自然就是允許一部分訓練樣本點在帶狀區域裡面了。

回到式子(2),發現它符合KKT條件,拉格朗日乘子式即為:

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

KKT條件可得:

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

。當

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

等于0時,相當于限制條件無效,即點i是邊界外的非異常點。對求解超平面H,無影響;當

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

大于0的時候,限制條件有效。

它的幾何意義就是說,樣本點(Observations)可能會很多,但真正對H确定有影響的可能就那麼幾個點:在完全可分情況下,為H1,H2上的點;在柔性邊界的情況下,為H1和H2區域内的點(反方向太多,也允許超過區域,例如圖中點5)。這些點也被稱為

支援向量(Support Vector)

。SVM也就可以了解成其實就是在找“支援向量(Support Vector)”。少數的支援向量确定了SVM 的最終決策函數,計算的複雜性取決于支援向量,而不是整個樣本空間,這就可以避免“維數災難”。

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

完全可分,虛線上的點為支援向量 柔性邊界下的支援向量

2.3 完美可分情況下的SVM求解:

柔性邊界情況下的解法,跟第三篇中的SVR解法很像。這裡僅以完美可分SVM為例:

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數
pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

上式的dual question為:

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數
pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

第一個等式展開即為:

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

。其中

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

了解為個體i的第f個特征(features)。将式子(5)帶回(4),求得:

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

解出

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

後,求出

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

即可得到模型:

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

2.4 核函數( kernel function )

回到這個圖上,如果單純在二維(x, y)想找到一個線性函數對C0和C1分類是非常困難的。但在三維空間,找一個超平面就會非常容易區分C0和C1。

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

是以,樣本在原始樣本空間是不可分的,可以嘗試映射到更高次元,那可能就可以線性區分C0和C1了。幸運的是,有如下結論:如果原始空間是有限維,即屬性數有限,那麼一定存在一個高維特征空間使樣本可分。令

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

表示将x映射後的特征向量,那麼在新次元空間中,超平面即為:

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

。2.3中求得的對偶問題中就包含

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

。因為這涉及到了更高次元的内積,次元很高的時候計算該值可能就比較困難。但是我們最終目的是求一個内積。如果有一個函數可以保證

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數

, 那就可以在原始次元計算出來(高緯度)內積。這個

pcl把3dmesh 映射成2維_SVM與SVR(2)——SVM、SVM柔性邊界和核函數
就是核函數(kernel function)