文章引自pluskid於2023年發表於「machine learning」板塊,本文僅做編輯。
支援向量機即
support vector machine
,簡稱 svm 。我最開始聽說這頭機器的名號的時候,一種神秘感就油然而生,似乎把 support 這麼乙個具體的動作和 vector 這麼乙個抽象的概念拼到一起,然後再做成乙個 machine ,一聽就很玄了!
不過後來我才知道,原來 svm 它並不是一頭機器,而是一種演算法,或者,確切地說,是一類演算法,當然,這樣摳字眼的話就沒完沒了了,比如,我說 svm 實際上是乙個分類器 (classifier) ,但是其實也是有用 svm 來做回歸 (regression) 的。所以,這種字眼就先不管了,還是從分類器說起吧。
svm 一直被認為是效果最好的現成可用的分類演算法之一(其實有很多人都相信,「之一」是可以去掉的)。這裡「現成可用」其實是很重要的,因為一直以來學術界和工業界甚至只是學術界裡做理論的和做應用的之間,都有一種「鴻溝」,有些很 fancy 或者很複雜的演算法,在抽象出來的模型裡很完美,然而在實際問題上卻顯得很脆弱,效果很差甚至完全 fail 。而 svm 則正好是乙個特例——在兩邊都混得開。
好了,由於 svm 的故事本身就很長,所以廢話就先只說這麼多了,直接入題吧。當然,說是入貼,但是也不能一上來就是 svm ,而是必須要從線性分類器開始講。
這裡我們考慮的是乙個兩類的分類問題,資料點用 x
來表示,這是乙個 n
維向量,而類別用 y
來表示,可以取 1 或者 -1 ,分別代表兩個不同的類(有些地方會選 0 和 1 ,當然其實分類問題選什麼都無所謂,只要是兩個不同的數字即可,不過這裡選擇 +1 和 -1 是為了方便 svm 的推導,後面就會明了了)。乙個線性分類器就是要在 n
維的資料空間中找到乙個超平面,其方程可以表示為
wtx+
b=0
乙個超平面,在二維空間中的例子就是一條直線。我們希望的是,通過這個超平面可以把兩類資料分隔開來,比如,在超平面一邊的資料點所對應的 y
全是 -1 ,而在另一邊全是 1 。具體來說,我們令 f(x
)=wt
x+b ,顯然,如果 f(x
)=0 ,那麼 x
是位於超平面上的點。我們不妨要求對於所有滿足 f(x
)<
0 的點,其對應的 y
等於 -1 ,而 f(x
)>
0 則對應 y=1
的資料點。當然,有些時候(或者說大部分時候)資料並不是線性可分的,這個時候滿足這樣條件的超平面就根本不存在,不過關於如何處理這樣的問題我們後面會講,這裡先從最簡單的情形開始推導,就假設資料都是線性可分的,亦即這樣的超平面是存在的。
如圖所示,兩種顏色的點分別代表兩個類別,
紅顏色的線表示乙個可行的超平面。在進行分類的時候,我們將資料點 x
代入 f(x
) 中,如果得到的結果小於 0 ,則賦予其類別 -1 ,如果大於 0 則賦予類別 1 。如果 f(x
)=0 ,則很難辦了,分到哪一類都不是。事實上,對於 f(x
) 的絕對值很小的情況,我們都很難處理,因為細微的變動(比如超平面稍微轉乙個小角度)就有可能導致結果類別的改變。理想情況下,我們希望 f(x
) 的值都是很大的正數或者很小的負數,這樣我們就能更加確信它是屬於其中某一類別的。
從幾何直觀上來說,由於超平面是用於分隔兩類資料的,越接近超平面的點越「難」分隔,因為如果超平面稍微轉動一下,它們就有可能跑到另一邊去。反之,如果是距離超平面很遠的點,例如圖中的右上角或者左下角的點,則很容易分辯出其類別。
實際上這兩個 criteria 是互通的,我們定
義 functional margin 為 γˆ=
y(wt
x+b)
=yf(
x),注意前面乘上類別 y
之後可以保證這個 margin 的非負性(因為 f(x
)<
0 對應於 y=−
1 的那些點),而點到超平面的距離定義為 geometrical margin 。不妨來看看二者之間的關係。如圖所示,對於乙個點 x
,令其垂直投影到超平面上的對應的為 x
0 ,由於 w
是垂直於超平面的乙個向量(請自行驗證),我們有 x
=x0+
γw∥w
∥ 又由於 x
0 是超平面上的點,滿足 f(x
0)=0
,代入超平面的方程即可算出γ=
wtx+
b∥w∥
=f(x
)∥w∥
不過,這裡的 γ
是帶符號的,我們需要的只是它的絕對值,因此類似地,也乘上對應的類別 y
即可,因此實際上我們定義 geometrical margin 為:γ˜
=yγ=
γˆ∥w
∥ 顯然,functional margin 和 geometrical margin 相差乙個 ∥w∥
的縮放因子。按照我們前面的分析,對乙個資料點進行分類,當它的 margin 越大的時候,分類的 confidence 越大。對於乙個包含 n
個點的資料集,我們可以很自然地定義它的 margin 為所有這 n
個點的 margin 值中最小的那個。於是,為了使得分類的 confidence 高,我們希望所選擇的 hyper plane 能夠最大化這個 margin 值。 不過這裡我們有兩個 margin 可以選,不過 functional margin 明顯是不太適合用來最大化的乙個量,因為在 hyper plane 固定以後,我們可以等比例地縮放 w
的長度和 b
的值,這樣可以使得 f(x
)=wt
x+b 的值任意大,亦即 functional margin γ
ˆ 可以在 hyper plane 保持不變的情況下被取得任意大,而 geometrical margin 則沒有這個問題,因為除上了 ∥w∥
這個分母,所以縮放 w
和 b的時候 γ
˜ 的值是不會改變的,它只隨著 hyper plane 的變動而變動,因此,這是更加合適的乙個 margin 。這樣一來,我們的 maximum margin classifier 的目標函式即定義為
maxγ˜
當然,還需要滿足一些條件,根據 margin 的定義,我們有yi
(wtx
i+b)
=γˆi
≥γˆ,
i=1,
…,n
其中 γˆ=
γ˜∥w
∥ ,根據我們剛才的討論,即使在超平面固定的情況下,γ
ˆ 的值也可以隨著 ∥w∥
的變化而變化。由於我們的目標就是要確定超平面,因此可以把這個無關的變數固定下來,固定的方式有兩種:一是固定 ∥w∥
,當我們找到最優的 γ
˜ 時 γ
ˆ 也就可以隨之而固定;二是反過來固定 γ
ˆ ,此時 ∥w∥
也可以根據最優的 γ
˜ 得到。處於方便推導和優化的目的,我們選擇第二種,令 γˆ=
1 ,則我們的目標函式化為:
max1∥w
∥,s.
t.,y
i(wt
xi+b
)≥1,
i=1,
…,n
通過求解這個問題,我們就可以找到乙個 margin 最大的 classifier ,如下圖所示,中間的紅色線條是 optimal hyper plane ,另外兩條線到紅線的距離都是等於 γ
˜ 的:
到此為止,算是完成了 maximum margin classifier 的介紹,通過最大化 margin ,我們使得該分類器對資料進行分類時具有了最大的 confidence (實際上,根據我們說給的乙個資料集的 margin 的定義,準確的說,應該是「對最不 confidence 的資料具有了最大的 confidence」——雖然有點拗口)。不過,到現在似乎還沒有一點點 support vector machine 的影子。很遺憾的是,這個要等到下一次再說了,不過可以先小小地劇透一下,如上圖所示,我們可以看到 hyper plane 兩邊的那個 gap 分別對應的兩條平行的線(在高維空間中也應該是兩個 hyper plane)上有一些點,顯然兩個 hyper plane 上都會有點存在,否則我們就可以進一步擴大 gap ,也就是增大 γ
˜ 的值了。這些點呢,就叫做 support vector ,嗯,先說這麼多了。
SVM熟練到精通4 偏離點與鬆弛變數
文章引自pluskid於2010年發表於 machine learning 板塊,本文僅做編輯。在最開始討論支援向量機的時候 我們就假定,資料是線性可分的,亦即我們可以找到乙個可行的超平面將資料完全分開。後來為了處理非線性資料,使用 kernel 方法對原來的線性 svm 進行了推廣 使得非線性的的...
SVM從入門到精通 一
我是標題黨 doge 最近在看svm演算法的原理,之前只知道用,但是對理論推導並不是很明白,這次算是複習一下,加深理解。要深入理解svm,首先要從感知機說起。什麼是感知機呢?感知機 perceptron 是二類分類的線性分類模型。假設輸入空間為 rn rn 輸出空間是y 1,1y 1,1 由輸入空間...
機器學習實戰 初識支援向量機 SVM
svm 支援向量機。支援向量機,其含義是通過支援向量運算的分類器。其中 機 的意思是機器,可以理解為分類器。它是一種二類分類模型,其基本模型定義為特徵空間上的間隔最大的線性分類器,其學習策略便是間隔最大化,最終可轉化為乙個凸二次規劃問題的求解。給定訓練樣本集d y 我 分類學習的基本思想是基於訓練集...