1. 程式人生 > >支援向量機(Support Vector Machine)

支援向量機(Support Vector Machine)

關於支援向量機,這裡只解釋一些概念以及關於超平面引數是如何計算的,本篇不對引數優化推導過程進行詳解,這塊比較複雜,個人也需要時間捋一捋,日後再做整理。

首先,SVM的分類器為:,其中令為0時,即為該分類器的超平面,在二維中即是一條直線,如下圖所示:


1.函式間隔

函式間隔表示式:,當訓練樣本,只要將該樣本的輸入與輸出代入該公式,即可計算該訓練樣本的函式間隔。函式間隔僅僅反映該樣本偏離超平面的程度,間隔越大,表明該點到超平面的距離就越大。這裡以二維空間為例,直線ax+by+c=0,對於點(x0,y1)的函式間隔可以這樣去理解,我們可以求出直線上橫座標為x0的縱座標y0,那麼函式間隔也即是b(y1-y0)這個數值的絕對值。這說明什麼?對於任意一點,都可以計算以該點橫座標對應直線上的一個點,此時就可以比較這兩個點縱座標相差程度,如果相差越大,表明該點偏離直執行緒度較大,也即是該點到直線的距離越大,但這個間隔並不是該點到直線距離的真實值,它只是反映點到直線距離這層關係。對於N維情形也是如此,我們可以固定前面N-1維的座標值,計算超平面最後一維所對應的數值,最後根據這兩個點的最後一維的差值與該維繫數的乘積作為函式間隔來反映該點到超平面的距離大小,當然固定哪些維數的座標值,任由自己選擇。

2.幾何間隔


對於給定超平面,如果我們同時對w,b進行縮放,肯定不會影響超平面所在的位置。那麼我們對超平面的引數同時縮放,也即向量w變為,b變為。通過這樣變化,我們可以得到他的幾何間隔(幾何間隔也即是點到超平面的距離):


如果,我們會發現函式間隔與幾何間隔相等。關於這種情況,大家可以簡化維數,自己以二維直線為例驗證下,找下實體感受。眼光犀利的兄弟,就不會去驗證,因為他們知道上面的幾何間隔公式就是我們所學的點到直線的距離公式。

3.優化轉換

針對線性可分情況,我們知道對於最差樣本,無論是函式間隔還是幾何間隔,在訓練樣本中肯定都是最小的。優化最終目的就是最大化這些最差樣本的最小間隔。我們可以獲取最差樣本的函式間隔:

我們同樣可以獲取最差樣本的幾何間隔:

進一步優化表示式:


考慮上面有限制條件w的模必須為1,我們可以將之去掉,又轉換到函式間隔上來,得到優化表示式:


再看,因為我們對w、b任意縮放,都不會改變超平面的位置,所以這裡可以縮放使最小函式間隔為1,那麼優化表示式又轉換成下面:


後面就是根據拉格朗日對偶條件以及KKT可優化極值條件(這塊後續另起一篇詳細說明),進行求解了,進一步優化轉換:



構造拉格朗日表達式:


優化後的結果最終轉換為拉格朗日表達式進行極值求解各個引數。

4.超平面引數w、b計算

這裡著重講解下是如何求解超平面引數w、b

我們根據拉格朗日表達式對w和b進行偏導求解,得到如下表達式:


知道了w的形式,我們可以將w回代到拉格朗日表達式中,可得:


由於後面表示式為0,進一步簡化為:


這裡面只有afa是待求的引數,根據KKT條件的優化問題,我們可以優化下面表示式:


這種情形可以通過SMO(sequential minimal optimization)演算法進行afa求解,再根據上面的afa與w的關係,可以解出向量w,關於b的求解,這裡做以下解釋:


下圖×是正樣本,○為負樣本


在正樣本和負樣本中各找一個最差樣本,那麼我們就可以計算出b。這裡我們如何來判定正負樣本中,哪個樣本為最差樣本?這是最關鍵的。 我們還是以二維為例,可以更直觀的給予描述:直線ax+by+c=0,如果c不定,那麼這條直線是不是可以平移經過每一個樣本點?每經過一個樣本點,就相當於該點在這直線上,那麼我們是不是可以確定這條直線了?確定直線也就是確定c的值。c值反映直線在Y軸上的截距,但不是真的截距,相差一個係數。我們可以找到正樣本的最小截距,以及負樣本的最大截距,那麼分割線的截距就是兩截距的平均值。

5.核函式

核函式優點及性質:

【1】將低維線性不可分情形轉換至高維線性可分;

【2】無需尋找低維對映到高維上的對映函式,一個核函式可以直接計算出結果,不需要高維對映函式對映成一高維向量,再計算高維向量之間的點積,節省大量運算時間;

【3】核矩陣的半正定性可以試圖判別事先定義的函式是否是核函式,如果不滿足,該函式就不是核函式

6.非線性可分

對於非線性可分情形,我們通常不會利用核函式將低維轉換至高維情形進行處理,因為核函式這個東西本身就不好進行選定,我們也不知道選取的核函式是否真的就可以將線性不可分轉換成線性可分。事實上,對於某些樣本的干擾,我們通常使用軟間隔進行分類:


對於線性可分,我們通常限制函式間隔是大於等於1的,但是對於不可分情形,有些樣本的值是可以大於1的,這樣它的函式間隔就有可能小於0,這裡允許個別樣本的錯分類發生,關於這部分的優化計算有空另起一篇加以說明。