整理SVM(support vector machine)的筆記是一個很是麻煩的事情,一方面這個東西原本就很差理解,要深刻學習須要花費大量的時間和精力,另外一方面我自己也是個初學者,整理起來不免思路混亂。因此我對SVM的整理會分爲四篇(暫定爲四篇)學習,不足之處,請多多指導。html
四篇分別爲:算法
在整理筆記的時候,參考了很多的資料,很多網絡寫的優秀論文,博客,回答等。因而我在學習了SVM以後,加入了本身的理解,結合網友的筆記整理了本身能理解的SVM,於此寫下本身的學習筆記。本着取之於網絡,還之於網絡的想法,最後將博客公開,最後申明一下,參考的博客,知乎等地址,我均會附於文章後面,不喜勿噴,謝謝。網絡
下面言歸正傳,開始學習SVM。機器學習
支持向量機,由於英文名爲 support vector machine,故通常簡稱爲SVM。他是一種經常使用的判別方法,在機器學習領域是一個有監督的學習模式,一般用來進行模型識別,分類,迴歸分析以及異常值檢測。ide
通俗的講:支持向量機是一種兩類分類模型,其基本模型定義爲特徵空間上的間隔最大的線性分類器,其學習策略(分割原則)即是間隔最大化,最終可轉換爲一個凸二次規劃問題的求解。函數
支持向量機是許多大佬在多年研究統計學習理論基礎上對線性分類器提出的另外一種設計最佳準則。其原理也從線性可分提及,而後擴展到線性不可分的狀況。甚至擴展到使用非線性函數中去。post
支持向量機的提出有很深的理論背景,這個咱們後面再學習,下面先說一下SVM的基本思想,SVM的主要思想能夠歸納爲兩點:性能
1 它是針對線性可分狀況進行分析,對於線性不可分狀況,經過使用非線性映射算法將低維輸入空間線性不可分的樣本轉化爲高維特徵空間使其可分,從而使得高維特徵空間採用線性算法對樣本的非線性特徵進行線性分析成爲可能。學習
2 它是基於結果風險最小化理論之上在特徵空間中構建最優超平面,使得學習器獲得全局最優化,而且在整個樣本空間的指望以某個機率知足必定上界。優化
支持向量機的線性分類:是給定一組訓練實例,每一個訓練實例被標記爲屬於兩個類別中的一個或另外一個,SVM訓練算法建立一個將新的實例分配給兩個類別之一的模型,使其成爲非機率二元線性分類器。SVM模型是將實例表示爲空間中的點,這樣映射就使得單獨類別的實例被儘量寬的明顯的間隔分開。而後,將新的實例映射到同一空間,並基於他們落在間隔的哪一側來預測所屬類別。
支持向量機的非線性分類:除了進行線性分類以外,SVM還可使用所謂的核技巧有效的進行非線性分類,將其輸入隱式映射到高維特徵空間中。當數據未被標記時,不能進行監督式學習,須要用非監督式學習,它會嘗試找出數據到簇的天然聚類,並將新數據映射到這些已造成的簇。將支持向量機改進的聚類算法被稱爲支持向量聚類,當數據未被標記或者僅一些數據被標記時,支持向量聚類常常在工業應用中用做分類步驟的預處理。
SVM(Support Vector Machines)——支持向量機是在全部知名的數據挖掘算法中最健壯,最準確的方法之一,它屬於二分類算法,能夠支持線性和非線性的分類。發展到今天,SVM已經能夠支持多分類了。
首先,咱們看一個例子:
好比上圖中,咱們用一條直線將兩類數據分開了,可是我畫了三條線,並且這三條都能分開,可是這三條線那條更好呢?用SVM的思想來講,就是什麼樣的決策邊界纔是最好的呢?更進一步,當數據特徵更加複雜,自己若是很難分,怎麼辦呢?那特徵複雜後,計算複雜度如何呢?那SVM能實際應用嗎?
讓咱們帶着這些問題來學習SVM,而理解SVM,咱們先得明白一個概念:線性分類器。
以前整理的Logistic迴歸博文地址:
咱們從最起源提及,雖說以前博文已經學習過Logistic 迴歸了,不懂的能夠去看看,有詳細的筆記。可是這裏我仍是簡單的再學習一邊別人理解的Logistic迴歸筆記,溫故而知新。
給定一些數據點,他們分別屬於兩個不一樣的類,如今要找到一個線性分類器把這些數據分紅兩類。若是用 x 表示數據點,用 y表示類別(y能夠取1或者-1,表明兩個不一樣的類),一個線性分類器的學習目標即是要在 n 維的數據空間中找到一個超平面(hyper plane),這個超平面的方程能夠表示爲(其中WT中的T表示轉置):
Logistic迴歸的目的是從特徵學習出一個 0/1 分類模型,而這個模型是將特徵的線性組合做爲自變量,因爲自變量的取值範圍是負無窮到正無窮。所以,使用Logistic函數(或者也稱爲Sigmoid函數)將自變量映射到(0, 1)上,映射後的值被認爲是屬於 y=1 的機率。
咱們假設函數以下:
其中 x 是 n 維特徵向量,函數 g 就是Logistic函數,咱們令 z = ΘTx ,則 g(z)爲:
其圖像爲:
能夠看到,將無窮映射到了(0, 1),而咱們假設的 hΘx 就是特徵屬於 y=1的機率:
從而,當咱們要判別一個新來的特徵屬於那個類的時候,只須要求出 hΘx 便可,若 hΘx 大於 0.5就是 y=1的類,反之屬於 y=0 的類。
此外,hΘx 只和 θTx有關, θTx >0 ,那麼 hΘx >0.5,而 g(z) 只是用來映射,真實的類別決定權仍是在於 θTx 。再者,當 θTx >> 0 時,hΘx = 1,反之 hΘx = 0。若是咱們只從 θTx 出發,但願模型達到的目標就是讓訓練數據中 y=1 的特徵 θTx >> 0,而 y=0 的特徵 θTx << 0。Logistic迴歸就是要學習獲得 θ,使得正例的特徵遠大於0,負例的特徵遠小於0,並且要在所有訓練實例上達到這個目標。
接下來,嘗試把 Logistic 迴歸作個變形。首先,將使用的結果標籤 y=0 和 y=1 替換爲 y = -1, y=1,而後將下面公式的 θ0 替換爲 b。
最後將後面的 一串替換爲 WTx,即下面一串被替換:
如此,則有了:
也就是說除了將 y由 y=0 變爲 y=-1外,線性分類函數跟 logistic迴歸的形式化g表示函數沒有區別,下面是Logistic迴歸的形式化表示函數:
對於邏輯迴歸咱們先說到這裏,下面看線性分類和邏輯迴歸的比較。
SVM和Logistic雖說都是尋找一個線性分類界限,但出發點不一樣。SVM是以訓練集兩個類的邊界(支持向量)來考慮劃分,而Logistic是從訓練集的全局來考慮劃分。這也就是爲何Logistic受噪聲和離羣點的影響比較大。當出現一個離羣點時,Logistic劃定的邊界頗有可能會改變。而SVM這邊劃分的邊界卻可能絲絕不動(由於離羣點並不影響我支持向量)。
什麼是線性可分呢?若是一個線性函數可以將樣本分開,稱這些數據樣本是線性可分的。那麼什麼是線性函數呢?在二維空間中就是一條直線,在三維空間中就是一個平面,依次類推,若是不考慮空位維度,這樣的線性函數就統稱爲超平面。咱們通常所說的線性可分支持向量機就對應着能將數據正確劃分而且間隔最大的直線。
定理1:線性二分類模型的目標就是找到一組合適的參數(w, b),使得:
即:線性二分類模型但願在特徵空間找到一個劃分超平面,將屬於不一樣標記的樣本分開。
咱們下面舉個簡單的例子。以下圖所示,如今有一個二維平面,平面上有兩種不一樣的數據,分別用圈和叉表示。因爲這些數據是線性可分的,因此能夠用一條直線將這兩類數據分開,這條直線就至關於一個超平面,超平面一邊的數據點所對應的 y 全是 -1 ,另外一邊所對應的 y 全是1。
上面的超平面能夠用分類函數 f(x) 表示,f(x)以下:
當 f(x)=0 的時候,x即是位於超平面上的點,而 f(x) > 0的點對應 y=1 的數據點,f(x) < 0 的點對應 y = -1的點,以下圖所示:
換言之,在進行分類的時候,遇到一個新的數據點 x,將 x 代入 f(x) 中,若是 f(x) 小於0,則將 x 的類別賦予 -1,稱 xi 爲負例;若是 f(x) 大於 0,則將 x 的類別賦予 1,稱xi爲正例。
因此接下來的問題是,如何肯定這個超平面呢?從直觀上而言,這個超平面應該是最適合分類兩類數據的直線。而斷定「最適合」的標準就是這條直線離直線兩邊的數據的間隔最大。因此,得尋找有着c最大間隔的超平面。這個問題,咱們先擱置一下,下面說一下線性可分支持向量機。
線性可分支持向量機(SVM)也是一種線性二分類模型,也須要找到知足 定理1 約束的劃分超平面,即(w, b),因爲能將樣本分開的超平面可能有不少,SVM進一步但願找到離個樣本都比較遠的劃分超平面。
當面對樣本的隨機擾動時,離每一個樣本都比較遠的劃分超平面對擾動的容忍能力比較強,即不容易由於樣本的隨機擾動使得樣本穿越到劃分超平面的另一側而產生分類錯誤。所以這樣的劃分超平面對樣本比較穩健,不容易過擬合。另外一方面,離各樣本都比較遠的劃分超平面不只能夠把正負樣本都分開,還能夠比較大的確信度將全部樣本分開,包括難分的樣本,即離劃分超平面近的樣本。
分類學習最基本的思想就是基於訓練集 D 在樣本空間中找到一個劃分超平面,將不一樣類別的樣本分開,可是能將訓練樣本分開的劃分超平面可能有不少,全部咱們應該去找位於兩類訓練樣本「正中間」的劃分超平面。由於該劃分超平面對訓練樣本局部擾動的「容忍」性最好,例如,因爲訓練集的侷限性或者噪聲的因素,訓練集外的樣本可能比正中間的訓練樣本更接近於兩個類的分割界,這將使得許多劃分超平面出現錯誤。而正中間的超平面影響最小,因此這個劃分超平面所產生的結果是魯棒的。
因此問題就變爲哪個分類超平面是最優的?而要算最優超平面,確定先算出間隔,只有間隔最大化,才能找出最優超平面,因此下面學習函數間隔。
間隔(margin):每一個訓練觀測點到超平面距離中的最小值。
上面也提到了,咱們的劃分超平面能夠用以下線性方程來描述:
其中W爲法向量,決定了超平面的方向,b爲位移量,決定了超平面與原點的距離。
假設超平面能將訓練樣本正確的分類,即對訓練樣本(xi, yi),知足如下公式:
該公式稱爲最大間隔假設,yi = +1 表示樣本爲正樣本,yi = -1 表示樣本爲負樣本,式子前面選擇 >= +1, <= -1只是爲了方便計算,原則上但是任意常數,但不管是多少,均可以經過對 w 的變換使其爲 +1 和 -1,實際上公式等價於:
在超平面 w*x+b=0 肯定的狀況下, | w*x+b | 可以表示點 x 到距離超平面的遠近,而經過觀察 w*x+b 的符號與類標記 y 的符號是否一致能夠判斷分類是否正確,因此,能夠用 (y * (w*x+b))的正負性來斷定或表示分類的正確性。於此,咱們便引出了函數間隔(functional margin)的概念。
通常的,當樣本點被分類正確時,定義函數間隔(用 γ hat 表示)爲:
而超平面(w, b)關於 訓練數據集T 中全部樣本點(xi , yi)的函數間隔最小值(其中, x是特徵, y是結果標籤,i表示第 i 個樣本),便爲超平面(w, b)關於訓練數據集T的函數間隔(即訓練觀測與超平面的間隔):
但這樣定義的函數間隔有問題,即若是成比例的改變 w 和 b (假設將他們改成 2w 和 2b),則函數間隔的值 f(x) 卻變成了原來的 2 倍(雖然此時超平面沒有改變),因此引出真正定義點到超平面的距離——幾何間距(geometrical margin)的概念。
假定對於一個點 x,令其垂直投影到超平面上的對應點爲 x0, w是垂直於超平面的一個向量,γ 爲樣本 x 到超平面的距離,以下圖所示:
根據平面幾何知識,有:
其中 ||w|| 爲 w 的二階範數(範數是一個相似於模的表示長度的概念),w / ||w|| 是單位向量(一個向量除以它的模稱之爲單位向量)。
又因爲 x0 是超平面的點,知足 f(x0) = 0,代入超平面的方差 wTx+b=0 ,可得 wTx0+b=0,即 wTx0 = -b。
隨即讓上式(平面幾何所得公式)的兩邊同時乘以 WT,而後根據 wTx0 = -b 和 wTw = ||w||2,便可算出 γ :
爲了獲得 γ 的絕對值,令 γ 乘上對應的類別 y,便可得出幾何間隔 (用 γ hat 表示)的定義:
從上述函數間隔和幾何間隔的定義能夠看出:幾何間隔就是函數間隔除以 ||w||,並且函數間隔 y * (w*x+b) = y * f(x) 實際上就是 | f(x) |,只是人爲定義的一個間隔度量,並且幾何間隔 | f(x) | / || w || 纔是直觀上的點到超平面的距離。
這裏補充一下點到超平面的距離的概念。設二維空間存在一個超平面實現二類可分以下圖所示:
圖中的斜線表示超平面 g(x) = w*x + b = 0,二維平面上一點 X 在超平面的距離投影爲 X',則兩者關係可表示爲 X = X' + λ w(w 表示超平面的梯度向量),將 X 代入到 g(x)得:
點到超平面的距離便是 X 與 X' 之間的距離:
該公司爲高等數學中點到平面的距離公式,只不過這裏點和平面表達式的係數都用向量表示了。而咱們上面倒是使用函數間隔和幾何間隔的角度引入距離的。因此注意區分。
咱們使用PPT的內容表達以下:
最大間隔超平面:間隔最大的超平面,即便得訓練觀測到分割超平面的間隔達到最大。
支持向量:樣本點中與分離超平面距離最近的樣本點的實例
最大間隔超平面的選取只與支持向量有關。
對一個數據點進行分類,當超平面離數據點的「間隔」越大,分類的確信度(confidence)也越大。因此,爲了使得分類的確信度儘可能高,須要讓所選擇的超平面可以最大化這個「間隔」值。這個間隔就是下面的Gap的一半。
經過由前面的分析可知:函數間隔不適合用來最大化間隔值,由於在超平面固定之後,能夠等比例地縮放 w 的長度和 b 的值,這樣可使得 f(x) = wTx + b 的值任意大,亦即函數間隔 γ hat 能夠在超平面保持不變的狀況下被取得任意大。但幾何間隔由於除上了 ||w||,使得在縮放 w 和 b 的時候幾何間隔 γ hat 的值是不會改變的,它只隨着超平面的變更而變更。所以,這是更加合適的一個間隔。換言之,這裏要找的最大間隔分類超平面中的「間隔」指的是幾何間隔。
因而最大間隔分類器(maximum margin classifier)的目標函數能夠定義爲: max γ hat
同時須要知足一些條件,根據間隔的定義,有(下面兩個式子是等價的):
其中,s.t 即subject to,它導出的是約束條件。
即咱們但願最大化超平面關於訓練集的間隔 γ ,約束條件表示的是超平面關於每一個訓練樣本點的間隔至少是 γ。
迴歸一下幾何間隔的定義:
可知:若是令函數間隔 γ hat 等於1(之因此令 γ hat =1,是爲了方便推導和優化,且這樣作對目標函數的優化沒有影響)則有 γ hat = 1 / || w || 且:
從而上述目標函數轉換成了(即線性可分支持向量機模型的最優化問題):
至關於在相應的約束條件下(約束條件爲上上式子),最大化這個 1 / ||w|| 值,而 1 / ||w|| 即是幾何間隔 γ hat 。
以下圖所示,中間的實線即是尋找到的最優超平面(optimal Hyper Plane),其到兩條虛線邊界的距離相等,這個距離即是幾何間隔 γ hat ,兩條虛線間隔邊界之間的距離等於 2*γ hat ,而虛線間隔邊界上的點則是支持向量。因爲這些支持向量恰好在虛線間隔邊界上,因此他們知足 y( wTx + b) = 1(還記得咱們把functional margin 定位1了嗎?上面咱們方便推導和優化的目的,咱們能夠令 γ hat = 1),而對於全部不是支持向量的點,則顯然有 y( wTx + b) > 1。
因此線性可分支持向量機模型的最優化問題:
這是一個凸二次規劃問題,若能求出(1)~(2)的解 w*, b*,那麼就能夠獲得最大間隔超平面 w*Tx + b = 0 t及分類決函數 f(x)
其實到目前爲止,對於只關心如何使用SVM的盆友便足夠了。能夠不用深究其更深的原理了。而須要深究的話,那就接着來。
支持向量機是一種二分類模型,他的目的是尋找一個超平面對樣本進行分割,分割的原則是間隔最大化,最終轉換爲一個凸二次規劃問題來求解,而由簡至繁的模型包括:
說這個的目的是什麼呢?就是咱們上面一堆例子,經過線性可分的例子說明了支持向量機,要深刻學習支持向量機,咱們第一步確定是從訓練樣本線性可分過渡到線性不可分。
那咱們接着從以前的目標函數說:
因爲求 1 / ||w|| 的最大值至關於求 1 /2 ||w||2 的最小值,因此上述目標函數等價於(w 由分母變爲分子,從而也由原來的 max 問題變爲 min 問題,很明顯,二者問題等價):
由於如今的目標函數是二次的,約束條件是線性的,因此它是一個凸二次規劃問題(這些咱們上面均提到了)。那麼這個問題如何求解呢?
能夠用線程的QP(Quadratic Programming)優化包進行求解。簡單來講:就是在必定的約束條件下,目標最優,損失最小。
此外,因爲這個問題的特殊結構,還能夠經過拉格朗日對偶性(Lagrange Duality)變換到對偶變量(dual variable)的優化問題,即經過求解與原問題等價的對偶問題(dual problem)獲得原始問題的最優解,這就是線性可分條件下支持向量機的對偶算法,這樣作的優勢在於:一者對偶問題每每更容易求解;兩者能夠天然的引入核函數,進而推廣到非線性分類問題。
這裏使用老師的PPT,整理一下咱們對SVM的理解。
那麼什麼是拉格朗日對偶性呢?簡單來講,經過對每個約束條件加上一個拉格朗日乘子(Lagrange multiplier)α,而後定義出拉格朗日函數(經過拉格朗日函數將約束條件融合到目標函數裏去,從而只用一個函數表達式便能清楚的表達出咱們的問題):
而後令:
而當全部約束條件都知足時,則最優值爲:
上式最優值即最初要最小化的量,因此在要求約束條件獲得知足的狀況下最小化 1 /2 ||w||2 ,實際上等價於直接最小化 Θ(w) (固然,這裏也有約束條件(即KKT條件的約束),就是 αi >= 0, i=1,....n),容易驗證,當某個約束條件不知足時,例如 yi * (w*xi + b) < 1,那麼顯然有 Θ(w) = ∞(只要令 αi = ∞ 便可)。
具體寫出來,目標函數變成了:
這裏用 P* 表示這個問題的最優解,且和最初的問題是等價的。若是直接求解,那麼一上來便得面對 w 和 b 這兩個參數,而 αi 又是不等式約束,這個求解過程很差作。不妨把最小和最大的位置交換一下,變成:
交換之後的新問題是原始問題的對偶問題,這個新問題的最優值用 d* 來表示。並且有 d* <= p*,在知足某些條件的狀況下,這兩者等價,這時候就能夠經過求解對偶問題來間接地求解原始問題。
換言之,之因此從 min max 的原始問題 p*,轉換爲 max min 的對偶問題 d*,一者是由於 d* 是 p* 的近似解,兩者轉換爲對偶問題後,更容易求解。
因此下面能夠先求 L 對w, b的極小,再求 L 對 α 的極大。
上面提到了 d* <= p* 在知足某些條件的狀況下,兩者等價,而要讓二者等價需知足 strong duality(強對偶),然後有學者在強對偶下提出了KKT條件,且KKT條件的成立要知足 constraint qualifications,而 constraint qualifications 之一就是 Slater條件。所謂的Slater條件,即指:凸優化問題,若是存在一個點 x,使得全部等式約束都成立,而且全部不等式約束都嚴格成立(即取嚴格不等號,而非等號),則知足Slater條件。對於此處,Slater條件成立,因此 d* <= p* 能夠取等號。
通常的,一個最優化數學模型可以表示成下列標準形式:
其中f(x)是須要最小化的函數,h(x)是等式約束,g(x)是不等式約束,p和q分別爲等式約束和不等式約束的數量。
同時,得明白如下兩點:
而KKT的條件就是指上面最優化數學模型的標準形式中的最小點 x* 必須知足下面的條件:
通過論證,咱們這裏的問題是知足KKT條件的(首先已經知足Slater條件,再者 f 和 gi 也都是可微的,即 L 對 w 和 b 均可導),所以如今咱們便轉換爲求解第二個問題。
也就是說原始問題經過知足KKT條件,已經轉換成了對偶問題。而求解這個對偶學習問題,分爲三個步驟:
根據拉格朗日的對偶性,原始問題的對偶問題是極大極小問題,因此咱們求解對偶問題的步驟以下:
(1)首先固定 α,要讓 L 關於 w 和 b 最小化,咱們分別對 w, b 求偏導數,即令 ∂L / ∂w 和 ∂L / ∂b 等於零:
將求偏導數的結果,代入下式:
獲得:
推導過程以下:
最後,獲得:
上面推導過程當中,「倒數第4步」 推導到 「倒數第3步」 使用了線性代數的轉置運算,因爲 ai 和 yi 都是實數,所以轉置後與自身同樣。「倒數第3步」 推導到「倒數第2步」 使用了(a + b + c + ...)(a + b + c + ...) = aa + ab + ac +ba +bb + bc + ... 的乘法法則。最後一步是上一步的順序調整。
從上面的最後一個式子,咱們能夠看出,此時的拉格朗日函數只包含一個變量,那就是 αi 便能求出 w 和 b,因而可知,上面提出來的核心問題:分類函數 f(x) = wTx + b 也能夠垂手可得的求出來。
(2)對 α 的極大,便是關於對偶問題的最優化問題。通過上面第一個步驟的求 w 和 b,獲得的拉格朗日函數式子已經沒有變量 w, b ,只有 α 。從上面的式子獲得:
這樣,求出了 αi ,根據上面對 w 求偏導的式子,咱們能夠求出 w。而後經過下面式子,能夠求出b,最終獲得分離超平面和分類決策函數:
(3)在求得 L(w, b, a) 關於 w 和 b 最小化,以及對 α 的極大值後,最後一步則能夠利用 SMO 算法求解對偶問題中的拉格朗日乘子 α。
咱們須要構造並求解對偶約束最優化問題
上述式子要解決的是在參數 {α1, α2, α3,.....αn} 上求最大值 W的問題,至於 x(i) 和 y(i) 都是已知數。要了解這個SMO算法如何推導,後面繼續學。
這裏繼續使用老師的PPT對SVM的推導作一個梳理,其實就是整理上面6.2 6.3 小節的內容。
爲了過渡到非線性分類狀況,咱們先看看上述推導過程當中獲得的一些有趣的形式。
首先就是關於咱們的 hyper plane,對於一個數據點 x 進行分類,其實是經過把 x 代入到 f(x) = wTx + b 算出結果真後根據其正負號來進行類別劃分的。而前面的推導,咱們得出:
所以分類函數爲:
這裏的形式的有趣之處在於,對於新點 x 的預測,只須要計算它與訓練數據點的內積便可( < ·, ·>表示向量內積),這一點直觀重要,是以後使用Kernel進行非線性推廣的基本前提。此外,所謂 Supporting Vector 也在這裏顯示出來——事實上,所謂非 Supporting Vector所對應的係數 α 都是等於零的,所以對於新點的內積計算實際上只須要針對少許的「支持向量」 而不是全部的訓練數據便可。
爲何非支持向量對應的 α 等於零呢?直觀上來看理解的話,就是這些「後方」的點——正如咱們以前分析過同樣,對超平面是沒有影響的,因爲分類徹底由超平面決定,因此這些無關的點並不會參與分類問題的計算,於是也就不會產生任何影響了。
首先,咱們看看經過Lagrange multiplier 獲得的目標函數:
注意到若是 xi 是支持向量的話,上式中紅顏色的部分是等於0 的(由於支持向量的 functional margin 等於1),而對非支持向量來講,functional margin 會大於 1,所以紅顏色部分是大於零的,而 αi 又是非負的,爲了知足最大化, αi 必須等於0。這也就是這些非 supporting vector 的侷限性。
至此,咱們便獲得了一個 maximum margin hyper plane classifier,這就是所謂的支持向量機(Support Vector Machine)。固然,,到目前爲止,咱們的SVM還比較弱,只能處理線性的狀況,不過,在獲得了對偶 dual 形式以後,經過 Kernel推廣到非線性的狀況就變成了一件很是容易的事情了(咱們以前說過:經過求解對偶問題獲得最優解,這就是線性可分條件下支持向量機的對偶算法,這樣作的優勢在於:一者對偶問題每每更容易求解;兩者能夠天然的引入核函數,進而推廣到非線性分類問題)。
線性不可分定義以下圖:
對於上圖的二分類數據點,普通線性分類器不行,最大間隔超平面和軟間隔超平面也無能爲力。面對這樣的線性不可分問題,一般的思路是找一個非線性分類邊界(好比組合分類器)來實現分類,而SVM則另闢蹊徑,將數據點從原始空間映射到特徵空間,而數據在特徵空間每每就能實現線性可分。
對於非線性問題,線性可分支持向量機並不能有效解決,要使用非線性模型才能很好的分類。
下面咱們考慮一維空間的二分類問題:
咱們將它進行一個二次變換,換到二維空間,這裏的變換爲 x -> x2。
從上面的例子,咱們知道變換的核心思想就是:將原始輸入空間的數據集映射到高維特徵空間中,從而使得數據集可分。
上圖中二維空間不可分,可是變換一下座標空間,也能實現線性可分。
二維空間的數據點不只能夠映射到二維空間,一樣也能夠映射到三維,如上所示,因此一樣能夠找到一個超平面可以實如今三維空間的線性可分。
首先將原始的輸入特徵經過函數 h(xi) 映射到高維空間,拉格朗日對偶有以下形式:
決策函數爲:
原始空間向特徵空間的映射須要藉助映射函數 Ψ(x)。例如對於數據點 xi,映射到特徵空間就變成了Ψ(xi)。而SVM的一大巧妙之處就是映射後的特徵空間數據點內積的計算等價於低維空間數據點在映射函數對應的核函數中計算。這大大下降了運算量,由於有的時候高維空間的計算很複雜,下圖是一個將 m 維度向量的映射到特徵空間的映射函數的例子:
映射後的維度大概是 m^2 / 2 維,則計算映射後的數據內積 Ψ(xi)T*Ψ(xj) 的時間複雜度爲 O(n^2)。而若是使用核函數,則計算複雜度會下降爲 O(n),例如:
其中 a,b爲 m維的向量,Ψ(a) 爲 a 通過上面的映射函數後的 m^2 / 2維向量,能夠看出核函數 K(a, b) = (aT*b + 1)2 計算的時間複雜度爲 O(n)。
核函數是指:設從輸入空間 Χ 到特徵空間 H的一個映射 h,對任意 x, z 屬於 X,函數 K(x, z) 知足 K(x, z) = (h(x), h(z)),則稱 K 爲核函數。
具體的核函數,咱們下一節完整介紹,這裏再也不贅述。
核技巧:在學習與預測中只定義核函數,而不顯示的定義映射函數 h。
一般,直接計算 K(x, z)比較容易,而經過 h(x) 和 h(z) 計算 K(x, z)並不容易。
而成爲核函數的充要條件:設 K 是對稱函數,則 K(x, z)爲核函數的充要條件是對輸入空間中任意xi,i=1,2,....m,Gram矩陣K = [K(xi, xj)] m * m 是半正定矩陣。
對偶問題的目標函數:
決策函數的形式:
對SVM從簡到難的介紹就到這裏,而後下一篇文章主要學習核函數的問題,下下一篇對使用Sklearn實現SVM進行了解,最後咱們證實一下SVM。這個系列就算結束。可能這一個多月的整理,我不是百分百理解它,可是我相信這是我理解它的開始。
軟間隔(soft-margin):有時候數據中有一些噪音點,若是咱們考慮他們,那麼咱們的分割超平面就不太好了。
在以前討論支持向量機的時候,咱們就假定,數據是線性可分的,即咱們能夠找到一個可行的超平面將數據徹底分開。後來爲了處理非線性數據,在下文使用 Kernel 方法對原來的線性 SVM 進行了推廣,使得非線性的狀況也能處理。雖然經過映射 Φ(•) 將原始數據映射到高維空間以後,可以線性分隔的機率大大增長,可是對於某些狀況仍是很難處理。
例如可能並非由於數據自己是非線性結構的,而只是由於數據有噪音。對於這種偏離正常位置很遠的數據點,咱們稱之爲 outlier,在咱們原來的SVM模型裏,outlier的存在有可能形成很大的影響,由於超平面自己就是隻有少數幾個 support vector 組成的,若是這些 support vector裏又存在 outliers 的話,其影響就很大了。例以下圖:
用黑圈圈起來的那個藍點是一個 outlier,它偏離了本身本來應該在的那個半空間,若是直接忽略掉它的話,原來的分割超平面仍是挺好的,可是因爲這個 outlier 的出現,致使分割超平面不得不被擠歪了,變成途中黑色虛線所示(這只是一個示意圖,並無嚴格計算精確座標),同時 margin 也相應變小了。固然,更嚴重的狀況是,若是這個 outlier 再往右上移動一些距離的話,咱們將沒法構造出能將數據分開的超平面來。
爲了處理這種狀況,SVM 容許數據點在必定程度上偏離一下超平面。例如上圖中,黑色實線所對應的距離,就是該 outlier 偏離的距離,若是把它移動回來,就恰好落在原來的超平面藍色間隔邊界上,而不會使得超平面發生變形了。
也就是說,在有鬆弛的狀況下 outline 點也屬於支持向量SV,同時,對於不一樣的支持向量,拉格朗日參數的值也不一樣,如此篇論文 《Large Scale Machine Learning》中的下圖所示:
對於遠離分類平面的點值爲0;對於邊緣上的點值在 [0, 1/L],其中,L爲訓練數據集個數,即數據集大小;對於 outline 數據和內部的數據值爲 1/L。
OK,繼續回到問題,咱們原來的約束條件爲:
如今考慮到 outlier 問題,約束條件變成了:
其中,ξi >= 0 稱爲鬆弛變量(slack variable),對應數據點 xi 容許偏離的 functional margin 的量。固然,若是咱們運行 ξi 任意大的話,那任意的超平面都是符合條件的了。因此,咱們在原來的目標函數後面加上一項,使得這些 ξi 的總和也要最小,即軟間隔支持向量機的學習問題以下(原始問題):
其中 C是懲罰係數,用於控制目標函數中兩項(「尋找 margin 最大的超平面」 和 「保證數據點誤差量最小」)之間的權重。注意,其中 ξ 是須要優化的變量(之一),而 C 是一個事先肯定好的常量,C值大時對誤分類的懲罰增長(C趨於很大時,意味着分類嚴格不能有錯誤),C值小時對誤分類的懲罰減少(C趨於很小時,意味着能夠有更大的錯誤容忍)。完整的寫出來是這個樣子:
因此上式包含兩層含義,使 ||w||2/2 儘可能小即間隔儘可能大,同時使誤分類點的個數儘可能小,C是調和二者的係數,有了上式,就能夠和線性可分支持向量機同樣考慮線性可分支持向量機同樣考慮線性支持向量機的學習過程,此時,線性不可分支持向量機的學習問題能夠變爲以前的凸二次規劃問題的求解。
用以前的方法將限制或約束條件加入到目標函數中,獲得新的拉格朗日函數,以下所示:
約束以下:
分析方法和前面同樣,轉換爲另外一個問題以後,解法相似,咱們先讓 L 針對 w, b 和 ξ 最小化:
將 w 帶回 L 並化簡,獲得和原來同樣的目標函數:
不過因爲咱們獲得 C - αi - ri = 0 而 又有 ri >= 0 (做爲 Lagrange multiplier 的條件),所以有 αi <= C,因此整個 dual 問題如今寫做:
把先後的結果對比一下:
能夠看到惟一的區別就是如今 dual varibale α 多了一個上限 C。而 Kernel 化的非線性形式也是同樣的,只要把 <xi, xj> 換成 k(xi, xj)便可。這樣一來,一個完整的能夠處理線性和非線性並能容忍噪音和 outliers 的支持向量機就介紹完畢了。
因此能夠作一個總結,不許確的說:SVM它本質上是一個分類方法,用 WT+b 定義分類函數,因而求 w,b爲尋最大間隔,引出 1 / 2 || w || ^2,繼而引入拉格朗日因子,化爲對拉格朗日乘子a 的求解(求解過程當中會設計一系列的最優化或凸二次規劃等問題),如此,求 w.b 與 求 a 等價,而 a 的求解能夠用一種快速學習算法 SMO,至於核函數,是爲了處理非線性問題,若直接映射到高維計算恐維度爆炸,故在低維計算,等效高維表現。
支持向量機(SVM)是一組用於分類,迴歸和異常值檢測的監督學習方法。
咱們能夠看到,上面線性可分支持向量機模型的最優化問題以下:
上面的基本型目標函數是二次的,約束條件是線性的,這是一個凸二次規劃問題。能夠直接用現成的優化計算包求解。但若利用「對偶問題」來求解,會更高效。
凸優化說的是這樣一回事情:
凸優化能夠想象成給我一個凸函數,咱們須要找最低點。
據瞭解。目標函數和約束條件都爲變量的線性函數,叫作——線性規劃問題。目標函數爲變量的二次函數和約束條件爲變量的線性函數,叫作二次規劃問題。
拉格朗日對偶性,即經過給每個約束條件加上一個拉格朗日乘子。而後定義出拉格朗日函數,經過拉格朗日函數將約束條件融合進目標函數中。目的是,只須要經過一個目標函數包含約束條件,即可以解釋清楚問題。
SVM 問題是一個不等式約束條件下的優化問題。絕大多數模式識別教程在討論這個問題時都會加上優化算法的簡介。
約束條件通常分爲等式約束和不等式約束,前者表示爲 g(x) = 0 ;後者表示爲 g(x) <= 0、
假設 x 屬於 Rd(就是這個向量一共有 d 個標量組成),則 g(x) = 0 則是由 d-1 維的超平面。那麼有約束優化問題就要求在這個 d-1 維的曲面或者超平面上找到能使得目標函數最小的點,這個 d-1 維的曲面就是「可行解區域」。
對於不等式約束條件, g(x) <= 0 ,則可行解區域 d-1 維曲面擴展成 d 維空間的一個子集。咱們能夠從 d=2 的二維空間進行比對理解。等式約束對應的可行解空間就是一條線;不等式約束對應的則是這條線以及線的某一側對應的區域,就像下面的這幅圖(圖中的模板函數等高線其實就是等值線,在同一條等值線上的點對應的目標函數值相等)。
儘管上面咱們已經想象出有約束優化問題的幾何意向。但是如何利用代數方法找到這個被約束了的最優解呢?這就須要用到拉格朗日乘子法。
首先定義原始目標函數 f(x),拉格朗日乘子法的基本思想是把約束條件轉換爲新的目標函數 L(x, λ) 的一部分,從而使有約束優化問題變成咱們習慣的無約束優化問題,那麼該如何去改造原來的目標函數 f(x),使得新的目標函數 L(x, λ) 的最優解剛好在可行解區域中呢?這就須要咱們去分析可行解區域的最優解的特色。
KKT條件是一個線性規劃問題能有最優解的充分和必要條件。
對於不等式約束條件 g(x) <= 0 的狀況,以下圖所示,最優解所在的位置 x* 有兩種可能,或者在邊界曲線 g(x)=0 上或者在可行解區域內部知足不等式 g(x) < 0 的地方。
第一種狀況:最優解在邊界上,就至關於約束條件就是 g(x) = 0.參考下圖,注意此時的目標函數 f(x) 的最優解是在可行解區域外面,因此函數 f(x) 在最優解 x* 附加的變化趨勢是「在可行解區域內側較大而在區域外側較小」,與之對應的是函數 g(x) 在可行解區域內小於 0 ,在區域外大於零,因此在最優解 x* 附加的變換趨勢是內部較小而外部較大。這意味着目標函數 f(x) 的梯度方向與約束條件函數 g(x) 的梯度方向相反。所以根據下式,能夠推斷出參數 λ > 0。
通常的,一個最優化數學模型能夠表示成以下形式:
h(x) 是等式約束,g(x)是不等式約束,p, q表示約束的數量。
而這個最優化數學模型的最優解 x* 需知足的條件(即KTT條件)爲:
參考文獻:
https://zhuanlan.zhihu.com/p/31652569
https://zhuanlan.zhihu.com/p/57648645
http://www.360doc.com/content/18/0727/00/7669533_773495537.shtml
https://blog.csdn.net/qq_35992440/article/details/80987664
https://zhuanlan.zhihu.com/p/24638007
https://blog.csdn.net/weixin_40170902/article/details/80113128