支持向量機(Support Vector Machine,SVM)是衆多監督學習方法中十分出色的一種,幾乎全部講述經典機器學習方法的教材都會介紹。關於SVM,流傳着一個關於天使與魔鬼的故事。git
傳說魔鬼和天使玩了一個遊戲,魔鬼在桌上放了兩種顏色的球。魔鬼讓天使用一根木棍將它們分開。這對天使來講,彷佛太容易了。天使不假思索地一擺,便完成了任務。魔鬼又加入了更多的球。隨着球的增多,彷佛有的球不能再被原來的木棍正確分開,以下圖所示。github
SVM其實是在爲天使找到木棒的最佳放置位置,使得兩邊的球都離分隔它們的木棒足夠遠。依照SVM爲天使選擇的木棒位置,魔鬼即便按剛纔的方式繼續加入新球,木棒也能很好地將兩類不一樣的球分開。面試
看到天使已經很好地解決了用木棒線性分球的問題,魔鬼又給了天使一個新的挑戰,以下圖所示。算法
按照這種球的擺法,世界上貌似沒有一根木棒能夠將它們 完美分開。但天使畢竟有法力,他一拍桌子,便讓這些球飛到了空中,而後憑藉 念力抓起一張紙片,插在了兩類球的中間。從魔鬼的角度看這些 球,則像是被一條曲線完美的切開了。安全
後來,「無聊」的科學家們把這些球稱爲「數據」,把木棍稱爲「分類面」,找到最 大間隔的木棒位置的過程稱爲「優化」,拍桌子讓球飛到空中的念力叫「核映射」,在 空中分隔球的紙片稱爲「分類超平面」。這即是SVM的童話故事。機器學習
支持向量機,因其英文名爲support vector machine,故通常簡稱SVM,通俗來說,它是一種二類分類模型,其基本模型定義爲特徵空間上的間隔最大的線性分類器,其學習策略即是間隔最大化,最終可轉化爲一個凸二次規劃問題的求解。ide
線性分類器:給定一些數據點,它們分別屬於兩個不一樣的類,如今要找到一個線性分類器把這些數據分紅兩類。若是用x表示數據點,用y表示類別(y能夠取1或者0,分別表明兩個不一樣的類),一個線性分類器的學習目標即是要在n維的數據空間中找到一個超平面(hyper plane),這個超平面的方程能夠表示爲( wT中的T表明轉置):函數
\[w^Tx+b=0\]學習
這裏能夠查看我以前的邏輯迴歸章節回顧:點擊打開優化
這個超平面能夠用分類函數 \(f(x)=w^Tx+b\) 表示,當f(x) 等於0的時候,x即是位於超平面上的點,而f(x)大於0的點對應 y=1 的數據點,f(x)小於0的點對應y=-1的點,以下圖所示:
在超平面wx+b=0肯定的狀況下,|wx+b|可以表示點x到距離超平面的遠近,而經過觀察wx+b的符號與類標記y的符號是否一致可判斷分類是否正確,因此,能夠用(y(w*x+b))的正負性來斷定或表示分類的正確性。於此,咱們便引出了函數間隔(functional margin)的概念。
函數間隔公式:\[\gamma=y(w^Tx+b)=yf(x)\]
而超平面(w,b)關於數據集T中全部樣本點(xi,yi)的函數間隔最小值(其中,x是特徵,y是結果標籤,i表示第i個樣本),便爲超平面(w, b)關於訓練數據集T的函數間隔:
\[\gamma=min\gamma i(i=1,...n)\]
但這樣定義的函數間隔有問題,即若是成比例的改變w和b(如將它們改爲2w和2b),則函數間隔的值f(x)卻變成了原來的2倍(雖然此時超平面沒有改變),因此只有函數間隔還遠遠不夠。
幾何間隔
事實上,咱們能夠對法向量w加些約束條件,從而引出真正定義點到超平面的距離--幾何間隔(geometrical margin)的概念。假定對於一個點 x ,令其垂直投影到超平面上的對應點爲 x0 ,w 是垂直於超平面的一個向量,\(\gamma\)爲樣本x到超平面的距離,以下圖所示:
這裏我直接給出幾何間隔的公式,詳細推到請查看博文:點擊進入
幾何間隔:\(\gamma^{'}=\frac{\gamma}{||w||}\)
從上述函數間隔和幾何間隔的定義能夠看出:幾何間隔就是函數間隔除以||w||,並且函數間隔y(wx+b) = yf(x)實際上就是|f(x)|,只是人爲定義的一個間隔度量,而幾何間隔|f(x)|/||w||纔是直觀上的點到超平面的距離。
對一個數據點進行分類,當超平面離數據點的「間隔」越大,分類的確信度(confidence)也越大。因此,爲了使得分類的確信度儘可能高,須要讓所選擇的超平面可以最大化這個「間隔」值。這個間隔就是下圖中的Gap的一半。
經過由前面的分析可知:函數間隔不適合用來最大化間隔值,由於在超平面固定之後,能夠等比例地縮放w的長度和b的值,這樣可使得 \(f(x)=w^Tx+b\) 的值任意大,亦即函數間隔能夠在超平面保持不變的狀況下被取得任意大。但幾何間隔由於除上了,使得在縮放w和b的時候幾何間隔的值是不會改變的,它只隨着超平面的變更而變更,所以,這是更加合適的一個間隔。換言之,這裏要找的最大間隔分類超平面中的「間隔」指的是幾何間隔。
以下圖所示,中間的實線即是尋找到的最優超平面(Optimal Hyper Plane),其到兩條虛線邊界的距離相等,這個距離即是幾何間隔,兩條虛線間隔邊界之間的距離等於2倍幾何間隔,而虛線間隔邊界上的點則是支持向量。因爲這些支持向量恰好在虛線間隔邊界上,因此它們知足\(y(w_Tx+b)=1\),對於全部不是支持向量的點,則顯然有\(y(w_Tx+b)>1\)。
OK,到此爲止,算是瞭解到了SVM的第一層,對於那些只關心怎麼用SVM的朋友便已足夠,沒必要再更進一層深究其更深的原理。
SVM 求解使經過創建二次規劃原始問題,引入拉格朗日乘子法,而後轉換成對偶的形式去求解,這是一種理論很是充實的解法。這裏換一種角度來思考,在機器學習領域,通常的作法是經驗風險最小化 (empirical risk minimization,ERM),即構建假設函數(Hypothesis)爲輸入輸出間的映射,而後採用損失函數來衡量模型的優劣。求得使損失最小化的模型即爲最優的假設函數,採用不一樣的損失函數也會獲得不一樣的機器學習算法。SVM採用的就是Hinge Loss,用於「最大間隔(max-margin)」分類。
\[L_i=\sum_{j\neq t_i}max(0,f(x_i,W)_j-(f(x_i,W)_{y_i}-\bigtriangleup))\]
要理解這個公式,首先先看下面這張圖片:
接着考慮以前獲得的目標函數(令函數間隔=1):
\[max\frac{1}{||w||}s.t.,y_i(w^Tx_i+b)\ge1,i=1,...,n\]
轉換爲對偶問題,解釋一下什麼是對偶問題,對偶問題是實質相同但從不一樣角度提出不一樣提法的一對問題。
因爲求 \(\frac{1}{||w||}\) 的最大值至關於求 \(\frac{1}{2}||w||^2\) 的最小值,因此上述目標函數等價於(w由分母變成分子,從而也有原來的max問題變爲min問題,很明顯,二者問題等價):
\[min\frac{1}{2}||w||^2s.t.,y_i(w^Tx_i+b)\ge1,i=1,...,n\]
由於如今的目標函數是二次的,約束條件是線性的,因此它是一個凸二次規劃問題。這個問題能夠用現成的QP (Quadratic Programming) 優化包進行求解。一言以蔽之:在必定的約束條件下,目標最優,損失最小。
此外,因爲這個問題的特殊結構,還能夠經過拉格朗日對偶性(Lagrange Duality)變換到對偶變量 (dual variable) 的優化問題,即經過求解與原問題等價的對偶問題(dual problem)獲得原始問題的最優解,這就是線性可分條件下支持向量機的對偶算法,這樣作的優勢在於:一者對偶問題每每更容易求解;兩者能夠天然的引入核函數,進而推廣到非線性分類問題。
詳細過程請參考文章末尾給出的參考連接。
事實上,大部分時候數據並非線性可分的,這個時候知足這樣條件的超平面就根本不存在。在上文中,咱們已經瞭解到了SVM處理線性可分的狀況,那對於非線性的數據SVM咋處理呢?對於非線性的狀況,SVM 的處理方法是選擇一個核函數 κ(⋅,⋅) ,經過將數據映射到高維空間,來解決在原始空間中線性不可分的問題。
具體來講,在線性不可分的狀況下,支持向量機首先在低維空間中完成計算,而後經過核函數將輸入空間映射到高維特徵空間,最終在高維特徵空間中構造出最優分離超平面,從而把平面上自己很差分的非線性數據分開。如圖所示,一堆數據在二維空間沒法劃分,從而映射到三維空間裏劃分:
一般人們會從一些經常使用的核函數中選擇(根據問題和數據的不一樣,選擇不一樣的參數,實際上就是獲得了不一樣的核函數),例如:多項式核、高斯核、線性核。
讀者可能仍是沒明白核函數究竟是個什麼東西?我再簡要歸納下,即如下三點:
若是數據中出現了離羣點outliers,那麼就可使用鬆弛變量來解決。
不許確的說,SVM它本質上便是一個分類方法,用 w^T+b 定義分類函數,因而求w、b,爲尋最大間隔,引出1/2||w||^2,繼而引入拉格朗日因子,化爲對拉格朗日乘子a的求解(求解過程當中會涉及到一系列最優化或凸二次規劃等問題),如此,求w.b與求a等價,而a的求解能夠用一種快速學習算法SMO,至於核函數,是爲處理非線性狀況,若直接映射到高維計算恐維度爆炸,故在低維計算,等效高維表現。
OK,理解到這第二層,已經能知足絕大部分人一窺SVM原理的好奇心,針對於面試來講已經足夠了。
SVM在不少諸如文本分類,圖像分類,生物序列分析和生物數據挖掘,手寫字符識別等領域有不少的應用,但或許你並沒強烈的意識到,SVM能夠成功應用的領域遠遠超出如今已經在開發應用了的領域。
是否存在一組參數使SVM訓練偏差爲0?
答:存在
訓練偏差爲0的SVM分類器必定存在嗎?
答:必定存在
加入鬆弛變量的SVM的訓練偏差能夠爲0嗎?
答:使用SMO算法訓練的線性分類器並不必定能獲得訓練偏差爲0的模型。這是由 於咱們的優化目標改變了,並再也不是使訓練偏差最小。
帶核的SVM爲何能分類非線性問題?
答:核函數的本質是兩個函數的內積,經過核函數將其隱射到高維空間,在高維空間非線性問題轉化爲線性問題, SVM獲得超平面是高維空間的線性分類平面。其分類結果也視爲低維空間的非線性分類結果, 於是帶核的SVM就能分類非線性問題。
如何選擇核函數?
線性和非線性是針對模型參數和輸入特徵來說的;好比輸入x,模型y=ax+ax^2 那麼就是非線性模型,若是輸入是x和X^2則模型是線性的。
線性分類器可解釋性好,計算複雜度較低,不足之處是模型的擬合效果相對弱些。
LR,貝葉斯分類,單層感知機、線性迴歸
非線性分類器效果擬合能力較強,不足之處是數據量不足容易過擬合、計算複雜度高、可解釋性很差。
決策樹、RF、GBDT、多層感知機
SVM兩種都有(看線性核仍是高斯核)
新聞分類 GitHub:點擊進入
做者:@mantchs