1.線性SVM
首先,回顧一下SVM問題的定義,如下:
線性約束很煩,不方便優化,是否有一種方法可以將線性約束放到優化問題本身,這樣就可以無拘無束的優化,而不用考慮線性約束了。其對應的拉格朗日對偶形式爲:
最終的優化結果保證離超平面遠的點的權重爲0。
經過上面的對偶變化,下面來一步一步的簡化我們的原始問題,
首先對b求偏導數,並且爲0:
對w求偏導數:
也就是
化簡原型
將w帶入,並且去掉min,得到如下
執行到這裏,現在目標函數只與有關,形式滿足QP,可以輕易得到,也就是得到w。但是在計算過程中,需要計算一箇中間矩陣Q,維度爲N*N,這個是主要計算開銷。上一講無需計算這個Q,因爲Q的形式十分簡單。
計算出拉格朗日乘子就得到了w:
而對於b的計算,KT條件幫助我們解決這個問題。如果原始問題和對偶問題都有最優解,且解相同,那麼會滿足KKT條件。這也是一個充分必要條件,其中很重要的一點是complementary slackness(互補鬆弛性),該條件有下面等式成立,
由於(對偶條件),且(原始條件),那麼兩者有一個不爲0時,另外一個必然爲0。所以,只要找到一個,就可以利用這個性質計算出b,計算方
理論來說,只需要一個點就可以,但是實際上由於計算有誤差,可能會計算所有的b,然後求平均。並且這些可以計算出b的點,就是支持向量,因爲他們滿足了原始問題中支撐向量的定義。但是,並不是所有的支撐向量,都有對應的。一般的,我們只用的向量稱爲支撐向量:
或者,b這樣計算:
2.非線性SVM
對於數據不可分的情況,使用核空間映射方法。即將線性不可分,映射到高維度空間,變爲線性可分。在線性不可分的情況下,支持向量機首先在低維空間中完成計算,然後通過核函數將輸入空間映射到高維特徵空間,最終在高維特徵空間中構造出最優分離超平面,從而把平面上本身不好分的非線性數據分開。
本質上,不知道非線性核映射的具體形式。實際上需要的也只是兩個向量在覈映射後的內積值而已。常使用的核函數包括SVM核函數。同時,對於新樣本,也並未實際需要計算出w。如分類函數所示
3.帶鬆弛變量的SVM
通常,高維數據本身是非線性結構的,而只是因爲數據有噪音。經常存在偏離正常位置很遠的數據點,我們稱之爲 outlier ,在我們原來的 SVM 模型裏,outlier 的存在有可能造成很大的影響,因爲超平面本身就是隻有少數幾個 support vector 組成的,如果這些 support vector 裏又存在 outlier 的話,其影響就很大了。
鬆弛變量定義了一個常量,即對於每個支撐樣本,容許他距離超平面的距離在1的一定範圍內波動,即:
C爲鬆弛係數或者懲罰因子,優化目標方程變爲:
其中 C是一個參數,用於控制目標函數中(“尋找margin最大的超平面”和“保證數據點偏差量最小”)之間的權重。注意,其中 ξ 是需要優化的變量(之一),而C是一個事先確定好的常量。對應的拉格朗日對偶形式爲:
(2)鬆弛變量的值實際上標示出了對應的點到底離羣有多遠,值越大,點就越遠。
(3)懲罰因子C決定了你有多重視離羣點帶來的損失,顯然當所有離羣點的鬆弛變量的和一定時,你定的C越大,對目標函數的損失也越大,此時就暗示着你非常不願意放棄這些離羣點,即希望鬆弛變量越小越好。最極端的情況是你把C定爲無限大,這樣只要稍有一個點離羣,目標函數的值馬上變成無限大,馬上讓問題變成無解,這就退化成了硬間隔問題。
(4)懲罰因子C不是一個變量,整個優化問題在解的時候,C是一個你必須事先指定的值。
參考: