SVM(Support Vector Machine,中文名:支持向量機),是一種很是經常使用的機器學習分類算法,也是在傳統機器學習(在以神經網絡爲主的深度學習出現之前)中一種很是牛X的分類算法。關於它的發展歷史,直接引用Wikipedia中的,畢竟本文主要介紹它的推導過程,而不是歷史發展。算法
The original SVM algorithm was invented by Vladimir N. Vapnik and Alexey Ya. Chervonenkis in 1963. In 1992, Bernhard E. Boser, Isabelle M. Guyon and Vladimir N. Vapnik suggested a way to create nonlinear classifiers by applying the kernel trick to maximum-margin hyperplanes. The current standardapi
接下來,就讓咱們回到過去,扮演它的發明者。(不要想太多,這個很是簡單,只需基礎的線性代數基礎)網絡
有以下幾條直線,哪條是黑白兩種點的最佳分割線?app
若是你看到了上面的那張圖,你確定會堅決果斷的說是H3,由於H1明顯沒有知足要求,H2雖然分開了,可是給人的感受沒有那麼好!若是如今在圖中給你一個未知顏色的點,讓你判斷它是黑仍是白,該如何判斷?若是是我,我就會說若是這個未知點在H3左邊的它就是黑色,若是他在H3的右邊,他就是白色。機器學習
若是到這兒你都徹底理解,那麼距離明白SVM就已經很是接近了。使用計算機程序尋找H3的過程,咱們管它叫作訓練;使用H3對未知點進行分類的過程,咱們管它叫作預測。svg
接下來,咱們就須要知道計算機是如何找到H3這條線,和如何使用H3作出決策?(計算機不是人類,因此它不能靠感受,而要編寫計算機程序,則必須有一個嚴謹的算法過程。)函數
首先,咱們將上面尋找H3的問題轉換一下,學習
如上圖,找到最佳的分割線,也就是讓兩條虛線之間的距離最大。this
首先咱們假設這條分割線的法向量爲,咱們知道在直角座標系中,任意一點均可以表示爲一貫量,w · u則表示該向量在上投影的長度,對於任意一個正樣本(設黑爲+,白爲-) 有w · u ≥ C,設b = C,則將其整理一下便可寫爲w · u - b ≥ 0, 若是已知w和b,使用此公式,咱們即可對未知點進行預測(或者叫分類)。spa
由上述,咱們知道了決策過程,接下來,咱們須要推導出訓練過程,即怎樣獲得w和b?
首先對於訓練集,在訓練集中對於任意一點xi 咱們知道它的標籤yi(若是爲正例yi = 1,若是爲負例yi = -1),而後對於正負例咱們假設(假設當點恰好在邊緣時等號成立), 不等式兩邊同乘以yi就能夠獲得。
兩條虛線之間的寬度求法以下:
即咱們要作工做的是:
即咱們須要在的約束下(只需關注邊界上的點),求。(這個問題,相信對於學過大學高等數學的人來講是很是簡單的)
使用拉格朗日乘數能夠很容易的進行求解,
設則:
,
將w迴帶到L中,
化簡得,
注意上式的末尾,要使L取極值(畫出決策邊界),結果只與訓練集中已知點向量的點積有關,與其它量無關。
若是再將 帶入到決策函數中,則
if
result = +
else
result = -
綜上所述,能夠發現,要求得最大間隔與對一個未知點的分類預測只與已知虛線點的點積有關。
在上述中,最後的決策函數爲,但這個決策函數對線性不可分的數據便無能爲力了,好比:
上圖,不能簡單的使用一條直線將其分開,可是,若是咱們換個角度,
對其多加一個維度Z,很容易即可將其用一條直線將其分開,若是咱們再回到最開始的維度下,則其以下圖所示,
這也就告訴咱們,在咱們當前維度下線性不可分的數據,若是換個角度,則其就會線性可分。
又因爲決策函數爲, 向量和在二維z座標系中,(這裏的指的是向量在第一和第二維度上的值),假設爲和在某個維度的點積,則其決策函數就可寫爲
,而. (稱K爲核函數)
經過上述兩式就可畫出最佳分割超平面,和對未知數據作出決策。
常見的核函數有(摘自Wikipedia):
注:大部分的機器學習任務使用這些核函數均可以獲得解決。