支持向量机:Outliers
支持向量機:Outliers
by pluskid, on 2010-09-13, in Machine Learning???? 21 comments本文是“支持向量機系列”的第四篇,參見本系列的其他文章。
在最開始討論支持向量機的時候,我們就假定,數據是線性可分的,亦即我們可以找到一個可行的超平面將數據完全分開。后來為了處理非線性數據,使用 Kernel 方法對原來的線性 SVM 進行了推廣,使得非線性的的情況也能處理。雖然通過映射 ?(?) 將原始數據映射到高維空間之后,能夠線性分隔的概率大大增加,但是對于某些情況還是很難處理。例如可能并不是因為數據本身是非線性結構的,而只是因為數據有噪音。對于這種偏離正常位置很遠的數據點,我們稱之為 outlier ,在我們原來的 SVM 模型里,outlier 的存在有可能造成很大的影響,因為超平面本身就是只有少數幾個 support vector 組成的,如果這些 support vector 里又存在 outlier 的話,其影響就很大了。例如下圖:
用黑圈圈起來的那個藍點是一個 outlier ,它偏離了自己原本所應該在的那個半空間,如果直接忽略掉它的話,原來的分隔超平面還是挺好的,但是由于這個 outlier 的出現,導致分隔超平面不得不被擠歪了,變成途中黑色虛線所示(這只是一個示意圖,并沒有嚴格計算精確坐標),同時 margin 也相應變小了。當然,更嚴重的情況是,如果這個 outlier 再往右上移動一些距離的話,我們將無法構造出能將數據分開的超平面來。
為了處理這種情況,SVM 允許數據點在一定程度上偏離一下超平面。例如上圖中,黑色實線所對應的距離,就是該 outlier 偏離的距離,如果把它移動回來,就剛好落在原來的超平面上,而不會使得超平面發生變形了。具體來說,原來的約束條件
yi(wTxi+b)≥1,i=1,…,n
現在變成
yi(wTxi+b)≥1?ξi,i=1,…,n
其中 ξi≥0 稱為松弛變量 (slack variable) ,對應數據點 xi 允許偏離的 functional margin 的量。當然,如果我們運行 ξi 任意大的話,那任意的超平面都是符合條件的了。所以,我們在原來的目標函數后面加上一項,使得這些 ξi 的總和也要最小:
min12∥w∥2+C∑i=1nξi
其中 C 是一個參數,用于控制目標函數中兩項(“尋找 margin 最大的超平面”和“保證數據點偏差量最小”)之間的權重。注意,其中 ξ 是需要優化的變量(之一),而 C 是一個事先確定好的常量。完整地寫出來是這個樣子:
mins.t.,12∥w∥2+C∑i=1nξiyi(wTxi+b)≥1?ξi,i=1,…,nξi≥0,i=1,…,n
用之前的方法將限制加入到目標函數中,得到如下問題:
L(w,b,ξ,α,r)=12∥w∥2+C∑i=1nξi–∑i=1nαi(yi(wTxi+b)?1+ξi)–∑i=1nriξi
分析方法和前面一樣,轉換為另一個問題之后,我們先讓 L 針對 w、b 和 ξ 最小化:
?L?w=0?L?b=0?L?ξi=0?w=∑i=1nαiyixi?∑i=1nαiyi=0?C?αi?ri=0,i=1,…,n
將 w 帶回 L 并化簡,得到和原來一樣的目標函數:
maxα∑i=1nαi–12∑i,j=1nαiαjyiyj?xi,xj?
不過,由于我們得到 C?αi?ri=0 ,而又有 ri≥0 (作為 Lagrange multiplier 的條件),因此有 αi≤C ,所以整個 dual 問題現在寫作:
maxαs.t.,∑i=1nαi–12∑i,j=1nαiαjyiyj?xi,xj?0≤αi≤C,i=1,…,n∑i=1nαiyi=0
和之前的結果對比一下,可以看到唯一的區別就是現在 dual variable α 多了一個上限 C 。而 Kernel 化的非線性形式也是一樣的,只要把 ?xi,xj? 換成 κ(xi,xj) 即可。這樣一來,一個完整的,可以處理線性和非線性并能容忍噪音和 outliers 的支持向量機才終于介紹完畢了。
總結
以上是生活随笔為你收集整理的支持向量机:Outliers的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支持向量机: Kernel
- 下一篇: 支持向量机:Numerical Opti