1.什么是支持向量機
支持向量機(Support Vector Machine,SVM)是一種經典的分類模型,在早期的文檔分類等領域有一定的應用。了解SVM的推導過程是一個充滿樂趣和挑戰的過程,耐心的看完整個過程,你會受益良多。所以,小Dream也決定好好講一講SVM的推導過程,還是跟此前一樣,講解務必追求通俗易懂,深入淺出。
首先要說的是,支持向量機最主要是用於分類。假設有一個訓練樣本集D={(x1,y1),(x2,y2),(x3,y3),...(xn,yn)},支持向量機分類學習最主要的思想就是基於訓練集D在樣本空間中,找到一個划分超平面,將不同類別的樣本分開。

圖 一 類別划分超平面
如圖一所示,那些能夠將+、-兩類樣本分開的直線(超平面),都是合理的分類器。那么,哪個分類器是最優的呢?我們可以看到,當一個新的樣本(樣本可能有擾動)出現在圖中4個紅色圓圈所在位置時,分類器1,2,4,5就極有可能把他分錯。根據圖一,肉眼可見,分類器3是圖中的最優分類器,因為它忍受樣本干擾的能力是最強的,用術語說,就是最魯棒的。那么怎么從數學上來定義這個最優的超平面呢?
在樣本空間中,假設划分超平面是這樣的一個平面:
(1)
稱為超平面的法向量,b定義了超平面到空間遠點的距離,回憶一下高中的立體幾何,我們知道,超平面可以由
和b唯一確定。那么。怎么樣的一個超平面是最優的呢?
首先,我問這樣一個問題,樣本空間中任意一個樣本,到該划分超平面的距離應該怎么表示?(趕緊回憶一下,點到平面的距離
(2)
我們先假設超平面
能夠將所有的樣本正確的進行分類。對任意
如果樣本屬於正類,則有yi=+1,且
;如果樣本屬於負類,則有yi=-1,且
。
我們可以選擇合適的b,使得離超平面最近的哪一類點滿足如下的條件:
,這些點就稱為支持向量。那么所有樣本可以這樣表示:
(3)
如圖二所示,支持向量用圈圈圈住了。兩個異類的支持向量的距離可以表示為:
(4)
圖二 支持向量與間隔
那么選擇最優的划分超平面就可以轉為成如下的數學表達式:
(5)
為了計算簡便,(5)式等價於如下:
(6)
怎么樣,這就是SVM的基本型了,有沒有感受到數學語言的魅力?簡潔、明確而又優美。
2. 支持向量機如何學習
既然我們明確了SVM是個怎么樣的問題,接下來要考慮的就是如何利用數據集D求得上述的超平面。
我們期望根據式6,獲得一個模型:
(7)
式6是一個凸二次規划問題,可能會有相關的優化計算包可以求解。但是SVM有自己的更為高效的求解方式,我們來好好說一下。
求解這種帶限制條件的極值問題,用的最多的應該式拉格朗日乘子法。我們對式6的每個約束條件乘以拉格朗日乘子
:
(8)
其中
為拉格朗日乘子向量,注意向量的長度和數據集D中樣本的數目相同。根據拉格朗日極值法,分別對w和b求偏導,並取極值得到:
(9)
(10)
將式(9)(10)帶入式(8),可以得到:

參考https://blog.csdn.net/zlsjsj/article/details/80522650
我們可以得到式6的對偶問題:
(11)
這么多公式,相信大家看到都有點煩了,這里總結一下,理一理思路。
我們得到式6的SVM基本型之后,想要用一種高效的方式來求解SVM的划分超平面。在限定條件下的極值問題,我們想到了拉格朗日乘子法。通過求偏導、解極值之后,我們消去w和b,問題變成了解決式6的對偶問題式11。這樣的話,求解w和b就轉化成了求解拉格朗日乘子
。將所有拉格朗日乘子求出之后,就得到了模型:

這里我們注意,拉格朗日乘子的個數與數據集樣本的個數相同。
那么,式11該如何高效的求解呢?下面我們SMO(Sequential Minimal Optimization)算法就登場了。
SMO算法的基本思路是各個擊破,逐個參數優化求解。具體來說就是,先選定一個參數
,然后固定除
之外的所有其他參數,這樣就可以根據式11求極值,求得合適的
。具體來說,是這樣的,先選定兩個參數
和
,根據式11的限制條件會有:
(12)
其中,
。
可以用式12將
用
來表示,帶入到式11中,得到一個關於
的單變量二次規划(二次函數求極值)問題,就可以高效的進行求解了。
2. SVM中的核函數
上述的SVM問題的定義及求解過程中,隱含了一個假設,就是存在一個超平面,能夠將兩類樣本分開,即問題是線性可分的。那么,如果問題不是線性可分的呢?例如,很簡答的“異或”問題就是線性不可分的。

圖三 線性不可分問題及其非線性映射
如圖三所示,在二維空間中,沒有辦法找到一條直線,將“異或”問題進行正確的區分。那么如何解決線性不可分的問題呢?在圖三中,將四個樣本經過一個映射函數,映射到三維空間中,就可以通過一個平面將該問題划分開了。
這樣我們就有了利用SVM去分類線性不可分問題的思路了。我們可以通過一個映射函數
,將樣本從原空間映射到高維空間,再利用上面章節的SVM原理進行分類就可以了。
下面我們再簡單說一下利用升維的辦法用SVM進行分類的過程。
訓練樣本集
經過
進行映射,變成了
,那么我們要獲得這樣一個模型:
(13)
在如下的限制條件下:
(14)
同樣,得到它的對偶問題:
(15)
同樣,問題的本質並沒有改變,我們其實還是可以用SMO算法求解向量
。只是多了一步,要計算
,當樣本空間的維度很大時,這個計算量時很大的。為了簡化計算,我們聰明的算法專家提出了核函數的概念,所謂核函數,就是為了簡化上述計算而設計出來的函數,它滿足如下要求:
(16)
那么式15就可以改寫為:
(17)
我們仔細回顧下抑或問題的映射過程,可以發現,其實映射過程不是唯一的,只要滿足一定的性質,映射函數可以很多,同樣核函數也可以很多。
我們先列出來常用的核函數:

圖四 常用核函數列表
那么,加入我們使用的高斯核,則式17可以表示為:
(18)
我們可以看到加入核函數后,能夠順利解決線性不可分的問題,但是計算過程卻並沒有因此而變得復雜。
關於核函數的選擇以及過擬合的處理,可以用軟間隔的技術,大體的思想就是在最大化間隔的同時,允許一些樣本出現在間隔里。感興趣的同學可以出門百度一下,這里不再詳述。
這篇博客可能沒有太多原創的思考,但是都是小Dream根據自己的理解一個字一個字碼的,可能在遣詞造句上沒有教科書那么嚴謹。但是我覺得技術博客存在意義就在於用一種朴實易懂的語言介紹一些在實際工作中非常實用的技巧、經驗和技術。
---------------------------------------------------------------------------------------------------------------------------------
分享時刻:
你要記住,人生聚散起伏太常見。生命太短,銘記那些溫暖與真誠吧,倒掉那些涼掉的茶水。

