機器學習 | 深刻SVM原理及模型推導(一)

本文始發於我的公衆號:TechFlow,原創不易,求個關注面試


今天是機器學習專題的第32篇文章,咱們來聊聊SVM。算法

SVM模型你們可能很是熟悉,可能都知道它是面試的常客,常常被問到。它最先誕生於上世紀六十年代。那時候雖然沒有機器學習的概念,也沒有這麼強的計算能力,可是相關的模型和理論已經提出了很多,SVM就是其中之一。機器學習

SVM徹底能夠說是經過數學推導出來的模型,因爲當時尚未計算機,因此模型當中的參數都是數學家們用手來算的。它有一個巨大的應用就是前蘇聯的計劃經濟體系,咱們知道在計劃經濟當中,國家有多少社會資源,每樣商品須要生產多少都是國家統籌規劃的。函數

可是國家和社會不是一成不變的,去年消耗了多少糧食不意味着今年也會消耗這麼多,不少因素會影響。因此當時前蘇聯的科學家們用當時最早進的方法來計算參數預測各項商品的消耗來完成社會資源的調度,這個最早進的方法就是SVM。學習

廢話說了這麼多,下面咱們就來看看這個模型實際的原理吧。spa


算法描述


SVM的英文全稱是Support Vector Machine,翻譯過來的意思是支持向量機。不管是英文仍是中文,咱們直觀上有些難以理解。翻譯

難以理解沒有關係,咱們先把支持向量這個概念放一放,先來介紹一下它總體的原理。3d

SVM最基本的原理就是尋找一個分隔「平面」將樣本空間一分爲二,完成二分類。進一步咱們能夠知道,對於二維的平面,咱們要分隔數據須要一條線。對於三維的空間咱們要分開須要一個面,發散開去對於一個n維的空間,咱們要將它分開須要一個n-1的超平面。blog

SVM尋找的就是這樣的超平面,爲了方便理解,咱們以最簡單的二維場景爲例。資源

咱們觀察一下上圖,很明顯圖中的數據能夠分紅兩個部分。對於上圖的數據而言理論上來講咱們有無數種劃分的方法,咱們既能夠像左邊這樣隨意的劃分,也能夠像右邊這樣看起來嚴謹許多的劃分,在這麼多劃分方法當中究竟哪種是最好的呢?咱們怎麼來定義劃分方法的好和壞呢?

SVM對這個問題的回答很乾脆,右圖的劃分是最好的,緣由是它的間隔最大

從圖中咱們能夠看到,間隔也就是被劃分紅兩個部分之間最接近的距離,間隔正中的這條紅線就是SVM找到的用來劃分的超平面。

咱們進一步觀察能夠發現,對於間隔這個事情來講,絕大多數樣本都不起做用,可以起做用的只有在落在虛線上也就是間隔邊緣的樣本。是這些樣本肯定了間隔,從而間接肯定了分隔平面,支撐起了模型。

因此SVM當中把這些落在邊緣上的樣本成爲支持向量,這也是SVM得名的由來。


模型推導


咱們首先來考慮最簡單的狀況,即線性可分,也就是說全部樣本均可以被正確的劃分。這樣劃分出來獲得的間隔是實實在在的,因此咱們把線性可分的狀況下的間隔稱爲硬間隔

首先咱們先寫出這個分隔平面的公式:

\[\omega^Tx+b = 0 \]

其中x表示一條n維的樣本特徵組成的向量,\(\omega\)是平面的n維法向量,決定平面的方向。雖然從公式上來看和線性迴歸很像,可是它們之間的本質區別是線性迴歸是用來擬合label的,而SVM的平面方程是用來肯定平面方向的。這裏的b就是簡單的偏移量,表示平面距離原點的距離。

表示出來分隔平面以後,咱們就能夠表示出每個樣本距離平面的距離:

\[\gamma = \frac{|\omega^Tx + b|}{||\omega||} \]

這個公式看起來好像不太明白,其實它是由二維的點到平面的距離公式演化獲得的:\(d = \frac{|Ax + By + c|}{A^2 + B^2}\)

這裏的\(||\omega||\)是一個L2範數,咱們把它也展開能夠寫成:\(||\omega|| = \sqrt{\sum_{i=1}^k \omega_i^2}\)


模型假設


這裏咱們作一點假設,對於樣本當中的點,在分隔平面上方的類別爲1,在分隔平面下方的類別爲-1。那麼咱們能夠進一步獲得\(\omega x_i +b\)應該和\(y_i\)同號。因此咱們能夠寫成:\(y(\omega^T x + b) > 0\)

咱們來觀察支持向量,也就是恰好在間隔邊緣的點,它們到分割平面的距離恰好是間隔的一半。咱們假設這個點的函數值是\(\gamma\),咱們把它表示出來能夠獲得:

\[\begin{aligned} y_i(\omega^T x_i + b)&=\gamma\\ y_i(\frac{\omega}{\gamma}x_i + \frac{b}{\gamma}) &= 1 \end{aligned} \]

咱們令新的\(\hat{\omega} = \frac{\omega}{\gamma}\),新的\(\hat{b}= \frac{b}{\gamma}\)。也就是說咱們經過變形能夠將函數值縮放到1,爲了方便計算,咱們選取恰當的參數,使得間隔恰好爲1。既然如此,對於全部的樣本點,咱們均可以獲得\(y_i(\omega^Tx_i + b) \ge 1\),對於支持向量來講\(y_i(\omega^Tx_i + b)\)=1。

利用這點,咱們能夠表示出間隔:

\[\gamma = 2\frac{|\omega^Tx + b|}{||\omega||} = \frac{2}{||\omega||} \]

\(\frac{2}{||\omega||}\)是一個分數,咱們要求它的最大值,也就是求\(||\omega||^2\)的最小值。咱們想要在線性可分的基礎上讓這個間隔儘可能大,因此這是一個帶約束的線性規劃問題,咱們把整個式子寫出來:

接下來咱們要作的就是在知足約束的前提下找到使得\(\frac{1}{2}||\omega||^2\)最小的\(\omega\),這個式子看起來很是麻煩,又有不等式摻和在裏面,那麼咱們應該怎麼辦呢?

這部份內容咱們將會在下一篇文章分享,敬請期待。

今天的文章到這裏就結束了,若是喜歡本文的話,請來一波素質三連,給我一點支持吧(關注、轉發、點贊)。

相關文章
相關標籤/搜索