SVM熟練到精通4 偏離點與鬆弛變數

2021-07-25 15:11:48 字數 3060 閱讀 8947

文章引自pluskid於2023年發表於「machine learning」板塊,本文僅做編輯。

在最開始討論支援向量機的時候

,我們就假定,資料是線性可分的,亦即我們可以找到乙個可行的超平面將資料完全分開。後來為了處理非線性資料,

使用 kernel 方法對原來的線性 svm 進行了推廣

,使得非線性的的情況也能處理。雖然通過對映 ϕ(

⋅)將原始資料對映到高維空間之後,能夠線性分隔的概率大大增加,但是對於某些情況還是很難處理。例如可能並不是因為資料本身是非線性結構的,而只是因為資料有噪音。對於這種偏離正常位置很遠的資料點,我們稱之為 outlier ,在我們原來的 svm 模型裡,outlier 的存在有可能造成很大的影響,因為超平面本身就是只有少數幾個 support vector 組成的,如果這些 support vector 裡又存在 outlier 的話,其影響就很大了。例如下圖:

用黑圈圈起來的那個藍點是乙個 outlier ,它偏離了自己原本所應該在的那個半空間,如果直接忽略掉它的話,原來的分隔超平面還是挺好的,但是由於這個 outlier 的出現,導致分隔超平面不得不被擠歪了,變成途中黑色虛線所示(這只是乙個示意圖,並沒有嚴格計算精確座標),同時 margin 也相應變小了。當然,更嚴重的情況是,如果這個 outlier 再往右上移動一些距離的話,我們將無法構造出能將資料分開的超平面來。

為了處理這種情況,svm 允許資料點在一定程度上偏離一下超平面。例如上圖中,黑色實線所對應的距離,就是該 outlier 偏離的距離,如果把它移動回來,就剛好落在原來的超平面上,而不會使得超平面發生變形了。具體來說,原來的約束條件 y

i(wt

xi+b

)≥1,

i=1,

…,n

現在變成yi

(wtx

i+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=1

nξi–

∑i=1

nαi(

yi(w

txi+

b)−1

+ξi)

–∑i=

1nri

ξi

分析方法和前面一樣,轉換為另乙個問題之後,我們先讓 

l

針對 w

、b 和 ξ

最小化:∂l

∂w=0

∂l∂b

=0∂l

∂ξi=

0⇒w=

∑i=1

nαiy

ixi⇒

∑i=1

nαiy

i=0⇒

c−αi

−ri=

0,i=

1,…,

n 將 

w

帶回 l

並化簡,得到和原來一樣的目標函式:

maxα∑i

=1nα

i–12

∑i,j

=1nα

iαjy

iyj⟨

xi,x

j⟩

不過,由於我們得到 c−

αi−r

i=0

,而又有 ri

≥0(作為 lagrange multiplier 的條件),因此有 αi

≤c,所以整個 dual 問題現在寫作:

maxαs.

t.,∑

i=1n

αi–1

2∑i,

j=1n

αiαj

yiyj

⟨xi,

xj⟩0

≤αi≤

c,i=

1,…,

n∑i=

1nαi

yi=0

和之前的結果對比一下,可以看到唯一的區別就是現在 dual variableα

多了乙個上限 

c

。而 kernel 化的非線性形式也是一樣的,只要把 ⟨x

i,xj

換成 κ(x

i,xj

)

即可。這樣一來,乙個完整的,可以處理線性和非線性並能容忍噪音和 outliers 的支援向量機才終於介紹完畢了。

SVM熟練到精通1 初識SVM

文章引自pluskid於2010年發表於 machine learning 板塊,本文僅做編輯。支援向量機即 support vector machine 簡稱 svm 我最開始聽說這頭機器的名號的時候,一種神秘感就油然而生,似乎把 support 這麼乙個具體的動作和 vector 這麼乙個抽象的...

程式設計訓練 到底買不買

小紅想買些珠子做一串自己喜歡的珠串。賣珠子的攤主有很多串五顏六色的珠串,但是不肯把任何一串拆散了賣。於是小紅要你幫忙判斷一下,某串珠子裡是否包含了全部自己想要的珠子?如果是,那麼告訴她有多少多餘的珠子 如果不是,那麼告訴她缺了多少珠子。為方便起見,我們用 0 9 a z a z 範圍內的字元來表示顏...

迴圈的熟練應用

階乘為例 while迴圈 includeint main printf d n factor return 0 do while迴圈 includeint main while i n printf d n factor return 0 for迴圈 includeint main printf d...