支持向量機(Support Vector Machine)是Cortes和Vapnik於1995年首先提出的,它在解決小樣本、 非線性 及 高維模式識別 中表現出許多特有的優點,並可以推廣應用到函數擬合等其餘機器學習問題中。算法
支持向量機方法是創建在統計學習理論的VC維理論和結構風險最小原理基礎上的,根據有限的樣本信息在模型的複雜性(即對特定訓練樣本的學習精度,Accuracy)和學習能力(即無錯誤地識別任意樣本的能力)之間尋求最佳折衷,以期得到最好的推廣能力(或稱泛化能力)。機器學習
用二維的例子解釋SVM,能夠拓展到n維函數
二維狀況下:就是能夠用一條或幾條直線把屬於不一樣類別的樣本點分開
N維狀況下:就是能夠用一個超平面(線,面,超平面,n-1維)來分隔兩類點學習
如何找到最優的那條直線?是須要解決的問題優化
方法以下:spa
從直觀上來講,就是分割的間隙越大越好,把兩個類別的點分得越開越好。就像咱們平時判斷一我的是男仍是女,就是很難出現分錯的狀況,這就是男、女兩個類別之間的間隙很是的大致使的,讓咱們能夠更準確的進行分類。
在SVM中,稱爲Maximum Marginal,是SVM的一個理論基礎之一
上圖被紅色和藍色的線圈出來的點就是所謂的支持向量!.net
上圖就是線性方程,能夠得出M:
另外支持向量位於wx + b = 1與wx + b = -1的直線上,咱們在前面乘上一個該點所屬的類別y(還記得嗎?y不是+1就是-1),就能夠獲得支持向量的表達式爲:y(wx + b) = 1,這樣就能夠更簡單的將支持向量表示出來了。code
至此二維已經能求出w和b的值,咱們擴展到n維空間裏:
咱們要優化求解的表達式:blog
||w||的意思是w的二範數(空間兩個向量的直線距離),這兩個式子是等價的,之因此要寫成這樣是爲了後邊的求導
這個式子有還有一些限制條件,完整的寫下來,應該是這樣的:ip
這個實際上是一個帶約束的二次規劃(quadratic programming, QP)問題,是一個凸問題,凸問題就是指的不會有局部最優解,能夠想象一個漏斗,無論咱們開始的時候將一個小球放在漏斗的什麼位置,這個小球最終必定能夠掉出漏斗,也就是獲得全局最優解。s.t.後面的限制條件能夠看作是一個凸多面體,咱們要作的就是在這個凸多面體中找到最優解。
這個優化問題能夠用拉格朗日乘子法去解,使用了KKT條件的理論,這裏直接做出這個式子的拉格朗日目標函數:
首先讓L關於w,b最小化,分別令L關於w,b的偏導數爲0,獲得關於原問題的一個表達式:
將兩式帶回L(w,b,a)獲得對偶問題的表達式
新問題加上其限制條件是(對偶問題):
這個就是咱們須要最終優化的式子。至此,獲得了線性可分問題的優化式子。
得出這個式子徹底是爲了之後的優化計算而來,有不少方法,如SMO(序列最小最優化)等
讓空間從本來的線性空間變成一個更高維的空間,在這個高維的線性空間下,再用一個超平面進行劃分。
當維度增長到無限維的時候,必定可讓任意的兩個物體可分了
由於兩個不一樣的物體確定有不一樣的特徵
下圖是一個典型的線性不可分的狀況
事實上,上圖所述的這個數據集,是用兩個半徑不一樣的圓圈加上了少許的噪音生成獲得的,因此,一個理想的分界應該是一個「圓圈」而不是一條線(超平面)。若是用 X1 和 X2 來表示這個二維平面的兩個座標的話,咱們知道一條二次曲線(圓圈是二次曲線的一種特殊狀況)的方程能夠寫做這樣的形式:
注意上面的形式,若是咱們構造另一個五維的空間,其中五個座標的值分別爲 $Z_1=X_1, Z_2=X_1^2, Z_3=X_2, Z_4=X_2^2, Z_5=X_1X_2$,那麼顯然,上面的方程在新的座標系下能夠寫做:
這個列子爲了直觀比較特殊,不用投射到五維空間,用三維空間便可獲得:
$Z_1=X^2_1, Z_2=X_2^2, Z_3=X_2 $
那麼在新的空間中原來的數據將變成線性可分的,從而使用以前咱們推導的線性分類算法就能夠進行處理了。這正是 Kernel 方法處理非線性問題的基本思想。
用線性可分狀況下優化的公式:
咱們能夠將紅色這個部分進行改造,令:
這個式子所作的事情就是將線性的空間映射到高維的空間,k(x, xj)有不少種,下面是比較典型的兩種:
上面這個核稱爲多項式核,下面這個核稱爲高斯核,高斯核甚至是將原始空間映射爲無窮維空間,另外核函數有一些比較好的性質,好比說不會比線性條件下增長多少額外的計算量,等等,這裏也再也不深刻。通常對於一個問題,不一樣的核函數可能會帶來不一樣的結果,通常是須要嘗試來獲得的。
上面這個核稱爲多項式核,下面這個核稱爲高斯核,高斯核甚至是將原始空間映射爲無窮維空間,另外核函數有一些比較好的性質,好比說不會比線性條件下增長多少額外的計算量,等等,這裏也再也不深刻。通常對於一個問題,不一樣的核函數可能會帶來不一樣的結果,通常是須要嘗試來獲得的。
還有一個線性核,這實際上就是原始空間中的內積。這個核存在的主要目的是使得「映射後空間中的問題」和「映射前空間中的問題」二者在形式上統一塊兒來了(意思是說,我們有的時候,寫代碼,或寫公式的時候,只要寫個模板或通用表達式,而後再代入不一樣的核,即可以了,於此,便在形式上統一了起來,不用再分別寫一個線性的,和一個非線性的)。
上面說了這麼一大堆,讀者可能仍是沒明白核函數究竟是個什麼東西?我再簡要歸納下,即如下三點:
2.但進一步,若是凡是遇到線性不可分的樣例,一概映射到高維空間,那麼這個維度大小是會高到可怕的(如上文中19維乃至無窮維的例子)。那咋辦呢?
此時,核函數就隆重登場了,核函數的價值在於它雖然也是講特徵進行從低維到高維的轉換,但核函數絕就絕在它事先在低維上進行計算,而將實質上的分類效果表如今了高維上,也就如上文所說的避免了直接在高維空間中的複雜計算。
數據中的一些特殊值是噪聲
條件限制公式:
接下來就是一樣的,求解一個拉格朗日對偶問題,獲得一個原問題的對偶問題的表達式:
藍色的部分是與線性可分的對偶問題表達式的不一樣之處。在線性不可分狀況下獲得的對偶問題,不一樣的地方就是α的範圍從[0, +∞),變爲了[0, C],增長的懲罰ε沒有爲對偶問題增長什麼複雜度。
模型與真實值之間的偏差叫作風險
使用分類器在樣本數據上的分類的結果與真實結果之間的差值來表示。這個差值叫作經驗風險,在驍樣本上能夠保證沒有偏差,可是真實值之間不可能保證
之前的機器學習方法都把經驗風險最小化做爲努力的目標,但後來發現不少分類函數可以在樣本集上輕易達到100%的正確率,在真實分類時卻一塌糊塗,即所謂的推廣能力差,或泛化能力差
泛化偏差界,由兩部分刻畫:
泛化偏差界的公式爲:
R(w)≤Remp(w)+Ф(n/h)
公式中R(w)就是真實風險,Remp(w)就是經驗風險,Ф(n/h)就是置信風險。
統計學習的目標從經驗風險最小化變爲了尋求經驗風險與置信風險的和最小,即結構風險最小。
SVM正是這樣一種努力最小化結構風險的算法。
定義:對一個指標函數集,若是存在H個樣本可以被函數集中的函數按全部可能的2的H次方種形式分開,則稱函數集可以把H個樣本打散;函數集的VC維就是它能打散的最大樣本數目H。
二維:VC維爲3
VC維反映了函數集的學習能力,VC維越大則學習機器越複雜(容量越大),遺憾的是,目前尚沒有通用的關於任意函數集VC維計算的理論,只對一些特殊的函數集知道其VC維。例如在N維空間中線形分類器和線形實函數的VC維是N+1。(經過2維的推導)
小樣本 : 並非說樣本的絕對數量少(實際上,對任何算法來講,更多的樣本幾乎老是能帶來更好的效果),而是說與問題的複雜度比起來,SVM算法要求的樣本數是相對比較少的。
是指SVM擅長應付樣本數據線性不可分的狀況,主要經過鬆弛變量(也有人叫懲罰變量)和核函數技術來實現,這一部分是SVM的精髓,之後會詳細討論。多說一句,關於文本分類這個問題到底是不是線性可分的,尚沒有定論,所以不能簡單的認爲它是線性可分的而做簡化處理,在水落石出以前,只好先當它是線性不可分的(反正線性可分也不過是線性不可分的一種特例而已,咱們向來不怕方法過於通用)。