首先,回顧一下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這樣計算:
本質上,不知道非線性核對映的具體形式。實際上需要的也只是兩個向量在核對映後的內積值而已。常使用的核函式包括
svm核函式。同時,對於新樣本,也並未實際需要計算出w。如分類函式所示
通常,高維資料本身是非線性結構的,而只是因為資料有噪音。經常存在偏離正常位置很遠的資料點,我們稱之為 outlier ,在我們原來的 svm 模型裡,outlier 的存在有可能造成很大的影響,因為超平面本身就是只有少數幾個 support vector 組成的,如果這些 support vector 裡又存在 outlier 的話,其影響就很大了。
鬆弛變數定義了乙個常量,即對於每個支撐樣本,容許他距離超平面的距離在1的一定範圍內波動,即:
c為鬆弛係數或者懲罰因子,優化目標方程變為:
其中 c
是乙個引數,用於控制目標函式中(「尋找margin最大的超平面」和「保證資料點偏差量最小」)之間的權重。注意,其中 ξ
是需要優化的變數(之一),而c
是乙個事先確定好的常量。對應的拉格朗日對偶形式為:
即整個過程中,只不過計算的拉格朗日乘子alpha多了乙個上限。
(1)並非所有的樣本點都有乙個鬆弛變數與其對應。實際上只有「離群點」才有,或者也可以這麼看,所有沒離群的點鬆弛變數都等於0。
(2)鬆弛變數的值實際上標示出了對應的點到底離群有多遠,值越大,點就越遠。
(3)懲罰因子c決定了你有多重視離群點帶來的損失,顯然當所有離群點的鬆弛變數的和一定時,你定的c越大,對目標函式的損失也越大,此時就暗示著你非常不願意放棄這些離群點,即希望鬆弛變數越小越好。最極端的情況是你把c定為無限大,這樣只要稍有乙個點離群,目標函式的值馬上變成無限大,馬上讓問題變成無解,這就退化成了硬間隔問題。
(4)懲罰因子c不是乙個變數,整個優化問題在解的時候,c是乙個你必須事先指定的值。
鬆弛變數也有變形形式。例如用來解決分類問題中樣本的「偏斜」問題。先來說說樣本的偏斜問題,也叫資料集偏斜(unbalanced),它指的是參與分類的兩個類別(也可以指多個類別)樣本數量差異很大。
對於svm。假設正樣本明顯多於負樣本,會導致分類超平面往負樣本偏移。對於此種情況,可以給負樣本較大的懲罰因子,對應正樣本小一點的懲罰因子。
libsvm即使用此種方式調節,實際過程中。libsvm就直接使用樣本數量的比來作為正負樣本的懲罰因子。
svm方法,在經驗誤差和推廣誤差方面達到平衡。但是在大樣本上存在較大的計算代價,此時可以使用樣本抽樣來解決。對於多分類問題,則存在死區。
參考:
1.機器學習基石--學習筆記02--hard dual svm
2.svm學習(五):鬆弛變數與懲罰因子
3.支援向量機通俗導論(理解svm的三層境界)
4.機器學習演算法與python實踐之(二)支援向量機(svm)初
SVM支撐向量機
參考 麥好,機器學習實踐指南 svm在解決小樣本 非線性及高維模式識別問題中具有許多優勢。1 演算法思想 svm首先將向量對映到乙個更高維的空間裡,在其中建立最大間隔超平面,將資料分開 然後,在超平面兩邊再設立兩個互相平行的超平面 最後分隔超平面,使兩個平行平面的距離最大化。svm假定平行超平面的距...
SVM學習筆記 線性支撐向量機
對於pla演算法來說,最終得到哪一條線是不一定的,取決於演算法scan資料的過程。從vc bound的角度來說,上述三條線的複雜度是一樣的 eout w ein 0 h dvc d 1 直觀來看,最右邊的線是比較好的hyperplane。為什麼最右邊的分隔面最好?對於測量誤差的容忍度是最好的。例如對...
70 什麼是支撐向量機(SVM)
我們將開始學習一種新的機器學習演算法 支撐向量機 svm 那什麼是支撐向量機呢?它的英文是 support vector machine。其實我們使用支撐向量機的思想既可以解決分類問題,也可以解決回歸問題。我們首先會學習使用支撐向量機解決分類問題,之後會學習使用支撐向量機來解決回歸問題。我們先來看看...