机器学习中的数学基础(4.1):支持向量机Support Vector Machine(SVM)
SVM可以說是一個很經典的二分類問題,屬于有監督學習算法的一種。看過那么多的博客知乎解釋SVM我一定要自己總結一篇,加深一下自己的理解。
帶著問題去讀文章會發現,柳暗花明又一村,瞬間李敏浩出現在眼前的感覺
(1)分界線(決策面)------線性分類
(2)支持向量-------如何找?
(3)分類間隔-------為什么需要最大化間隔,以及如何最大化分類間隔(軟間隔、硬間隔等)
(4)拉格朗日乘子法和KKT條件----什么是拉格朗日乘子法和KKT條件,用處是干嘛?(PS:解決凸問題,凸優化的)
(5)對偶問題的求解
(6)序列最小最優化(sequential minimal optimization)SMO算法
SMO(Sequential Minimal Optimization)是針對求解SVM問題的Lagrange對偶問題,一個二次規劃式,開發的高效算法。傳統的二次規劃算法的計算開銷正比于訓練集的規模,而SMO基于問題本身的特性(KKT條件約束)對這個特殊的二次規劃問題的求解過程進行優化。對偶問題中我們最后求解的變量只有Lagrange乘子向量,這個算法的基本思想就是每次都只選取一對,固定向量其他維度的元素的值,然后進行優化,直至收斂。
(7)核函數------什么是核函數,為什么要用到核函數?
(8)SVM與LR(Logistic Regression)的區別
--------------機器學習中提到的向量沒做特殊說明都是指列向量----------
SVM要解決的問題可以用一個經典的二分類問題加以描述,如下圖所示紅色和藍色的二維數據點顯然是可以被一條直線分開的,在模式識別領域稱為線性可分問題。然而將兩類數據點分開的直線顯然不止一條。圖1(b)和(c)分別給出了A、B兩種不同的分類方案,其中黑色實線為分界線,術語稱為“決策面”。(---解答了(1)問題---)每個決策面對應了一個線性分類器。雖然在目前的數據上看,這兩個分類器的分類結果是一樣的,但如果考慮潛在的其他數據,則兩者的分類性能是有差別的。
SVM算法認為圖1中的分類器A在性能上優于分類器B,其依據是A的分類間隔比B要大。這里涉及到第一個SVM獨有的概念“分類間隔”。在保證決策面方向不變且不會出現錯分樣本的情況下移動決策面,會在原來的決策面兩側找到兩個極限位置(越過該位置就會產生錯分現象),如虛線所示。虛線的位置由決策面的方向和距離原決策面最近的幾個樣本的位置決定。而這兩條平行虛線正中間的分界線就是在保持當前決策面方向不變的前提下的最優決策面。兩條虛線之間的垂直距離就是這個最優決策面對應的分類間隔。顯然每一個可能把數據集正確分開的方向都有一個最優決策面(有些方向無論如何移動決策面的位置也不可能將兩類樣本完全分開),而不同方向的最優決策面的分類間隔通常是不同的,那個具有“最大間隔”的決策面就是SVM要尋找的最優解。而這個真正的最優解對應的兩側虛線所穿過的樣本點,就是SVM中的支持樣本點,稱為“支持向量”。對于圖1中的數據,A決策面就是SVM尋找的最優解,而相應的三個位于虛線上的樣本點在坐標系中對應的向量就叫做支持向量(---解答了(2)問題)。
從表面上看,我們優化的對象似乎是這個決策面的方向和位置。但實際上最優決策面的方向和位置完全取決于選擇哪些樣本作為支持向量。而在經過漫長的公式推導后,你最終會發現,其實與線性決策面的方向和位置直接相關的參數都會被約減掉,最終結果只取決于樣本點的選擇結果。
到這里,我們明確了SVM算法要解決的是一個最優分類器的設計問題。既然叫作最優分類器,其本質必然是個最優化問題。所以,接下來我們要討論的就是如何把SVM變成用數學語言描述的最優化問題模型,這就是我們在第二部分要講的“線性SVM算法的數學建模”。
*關于“決策面”,為什么叫決策面,而不是決策線?好吧,在圖1里,樣本是二維空間中的點,也就是數據的維度是2,因此1維的直線可以分開它們。但是在更加一般的情況下,樣本點的維度是n,則將它們分開的決策面的維度就是n-1維的超平面(可以想象一下3維空間中的點集被平面分開),所以叫“決策面”更加具有普適性,或者你可以認為直線是決策面的一個特例。
---------------------線性SVM的算法建模---------------------
一個最優化問題通常有兩個最基本的因素:1)目標函數,也就是你希望什么東西的什么指標達到最好;2)優化對象,你期望通過改變哪些因素來使你的目標函數達到最優。在線性SVM算法中,目標函數顯然就是那個“分類間隔”,而優化對象則是決策面。所以要對SVM問題進行數學建模,首先要對上述兩個對象(“分類間隔”和“決策面”)進行數學描述。按照一般的思維習慣,我們先描述決策面。
------決策面方程
? ? ? ? ??請你暫時不要糾結于n維空間中的n-1維超平面這種超出正常人想象力的情景。我們就老老實實地看看二維空間中的一根直線,我們從初中就開始學習的直線方程形式很簡單。
-------分類“間隔”的計算模型
? ? ? ? ?間隔的大小實際上就是支持向量對應的樣本點到決策面的距離的二倍,如上圖所示:
所以分類間隔計算似乎相當簡單,無非就是點到直線的距離公式(點到線的距離公式推導如左下圖)
?? -----------> ? ? ??
故根據上述推導公式可以得出上圖右邊的距離公式6。
這里是向量的模,表示在空間中向量的長度,就是支持向量樣本點的坐標。就是決策面方程的參數。而追求W的最大化也就是尋找d的最大化。看起來我們已經找到了目標函數的數學形式。
優化的數據集是線性可分的前提下得到的最大化d,稱為硬間隔(hard margin)最大化。(即d表示硬間隔)
如果數據集 X線性不可分,不存在滿足約束條件的樣本,會導致優化問題沒有可行解;為使SVM適用于線性不可分的數據集,需要對目標函數和約束條件進行修改,最終得到的優化問題,稱為軟間隔(soft margin)最大化。
參照博客:https://zhuanlan.zhihu.com/p/60743894
--------------------以上至此我們只是明白了如何求解分界線的一個過程,下邊才是添加約束條件優化的過程
1)并不是所有的方向都存在能夠實現100%正確分類的決策面,我們如何判斷一條直線是否能夠將所有的樣本點都正確分類?
2)即便找到了正確的決策面方向,還要注意決策面的位置應該在間隔區域的中軸線上,所以用來確定決策面位置的截距也不能自由的優化,而是受到決策面方向和樣本點分布的約束。
3)即便取到了合適的方向和截距,公式(6)里面的x不是隨隨便便的一個樣本點,而是支持向量對應的樣本點。對于一個給定的決策面,我們該如何找到對應的支持向量?
以上三條的本質是“約束條件”,也就是說我們要優化的變量的取值范圍受到了限制和約束。事實上約束條件一直是最優化問題里最讓人頭疼的東西。但既然我們已經論證了這些約束條件確實存在,就不得不用數學語言對他們進行描述。盡管上面看起來是3條約束,但SVM算法通過一些巧妙的小技巧,將這三條約束條件融合在了一個不等式里面。
那么這兩個不等式再分別乘以他們的標簽會怎么樣?是不是可以統一為了(這也是為什么SVM在使用之前為什么要把兩類標簽設置為+1,-1,而不是0,1等等之類的了)
這里m是樣本點的總個數,公式(2.14)描述的是一個典型的不等式約束條件下的二次型函數優化問題,同時也是支持向量機的基本數學模型。
在求取有約束條件的優化問題時,拉格朗日乘子法(Lagrange Multiplier)和KKT條件是非常重要的兩個求取方法,對于等式約束的優化問題,可以應用拉格朗日乘子法去求取最優解;如果含有不等式約束可以應用KKT條件去求取。當然這兩個方法求的的結果只是必要條件,只有當是凸函數的情況下,才能保證是充分必要條件。KKT條件是拉格朗日乘子法的泛化,
-----------------------------接下來是如何利用最優化技術求解公式(2.14)描述的問題--------------
-----------拉格朗日乘子法
? ? ? ? ??首先來了解拉格朗日乘子法,為什么需要拉格朗日乘子法呢?記住,有需要拉格朗日乘子法的地方,必然是一個組合優化問題。拉格朗日乘子法,是尋找多元函數在一組約束(可以是等式約束也可以是不等式約束)下的極值的方法。通過引入拉格朗日乘子,將d個變量與k的約束條件的有約束優化問題轉化為d+k個變量的無約束優化問題。那么帶約束的優化問題很好說,就比如說下面這個:
在無約束優化問題中,如果一個函數是凸函數,那么總能通過求偏導等于0的方法求得函數的全局極小值點。如果不是凸函數,可能會陷入局部極小值點
約束條件分為等式約束和不等式約束。
構造拉格朗日函數其實就是:目標函數+λ倍的約束條件,然后對變量及λ求偏導,這樣就能求出極值。(這只是一種構造方式,這種方式本身是沒有意義的,但它可以使求條件極值的步驟變得相對簡單方便一些,所以大家傾向于使用構造拉格朗日函數這種方式來求條件極值);拉格朗日函數用來求解等式約束的最優化問題;廣義拉格朗日函數用來求解不等式約束的最優化問題。拉格朗日對偶:將最小化問題怎么變成了最大化問題。
拉格朗日乘子法:就是將約束條件整合到目標函數里面去。KKT(Karush–Kuhn–Tucker conditions)條件:如果約束條件是不等式的話,需要用到KKT去解決。
首先定義原始目標函數,拉格朗日乘子法的基本思想是把約束條件轉化為新的目標函數的一部分,從而使有約束優化問題變成我們習慣的無約束優化問題。那么該如何去改造原來的目標函數使得新的目標函數的最優解恰好就在可行解區域中呢?這需要我們去分析可行解區域中最優解的特點。
我們觀察上圖中的紅色虛線(可行解空間)和藍色虛線(目標函數的等值線),發現這個被約束的最優解恰好在二者相切的位置。此處先引入一個梯度(梯度可以直觀的認為是函數的變化量,可以描述為包含變化方向和變化幅度的一個向量)。
(1)在相遇點處即在等式約束條件下的優化問題的最優解即上圖中的A點,原始目標函數的梯度向量必然與約束條件的切線方向垂直。
(2)函數的梯度方向也必然與函數自身等值線切線方向垂直。
與推論1 的論證基本相同,如果的梯度方向不垂直于該點等值線的切線方向,就會在等值線上有變化,這條線也就不能稱之為等值線了。
根據(1)和(2),函數的梯度方向在點同時垂直于約束條件和自身的等值線的切線方向,也就是說函數的等值線與約束條件曲線在點具有相同(或相反)的法方向,所以他們在該點也必然相切。
到此我們可以將目標函數和約束條件視為兩個具有平等地位的函數,可以得到如下推論:
---構造拉格朗日函數
我們按照本節初提到的思想,構造一個拉格朗日函數,將有約束優化問題轉為無約束優化問題。拉格朗日函數具體形式如下:
? ? ? ? ? ? ? ? ? ?
新的拉格朗日目標函數有兩個自變量下,根據我們熟悉的求解無約束優化問題的思路,將公式(3.3)分別對求導,令結果等于零,就可以建立兩個方程。同學們可以自己試一下,很容易就能發現這兩個由導數等于0構造出來的方程正好就是公式(3.1)和(3.2)。說明新構造的拉格朗日目標函數的優化問題完全等價于原來的等式約束條件下的優化問題。如下是構造過程:
這就是為什么構造拉格朗日目標函數可以實現等式約束條件下目標優化問題的求解。
-----那么問題來了?哈哈;如果約束條件是不等式怎么辦?這個時候就要用到神秘的KKT條件了......(KKT條件是一個線性規劃問題能有最優解的充分和必要條件。)
-------------------------------KKT條件--------------(約束條件為不等式,應用KKT條件去求取最優解)
對于不等式約束條件的情況,如下圖所示,最優解所在的位置有兩種可能,或者在邊界曲線上或者在可行解區域內部滿足不等式的地方。
第一種情況:最優解在邊界上,就相當于約束條件就是。參考圖4,注意此時目標函數的最優解在可行解區域外面,所以函數在最優解附近的變化趨勢是“在可行解區域內側較大而在區域外側較小”,與之對應的是函數在可行解區域內小于0,在區域外大于零,所以在最優解附近的變化趨勢是內部較小而外部較大。這意味著目標函數的梯度方向與約束條件函數的梯度方向相反。因此根據公式(3.1),可以推斷出參數。
? ? ? ? ? ? ? ? ? ? ? ? ?? 不等式約束條件下最優解位置分布的兩種情況
第二種情況:如果在區域內,則相當于約束條件沒有起作用,因此公式(3.3)的拉格朗日函數中的參數。整合這兩種情況,可以寫出一個約束條件的統一表達,如公式(3.4)所示。
下面對上式解釋:
KKT條件的第一式:原來的約束條件
KKT條件的第二式:lambda>=0就是上面說的兩個力方向相反,即梯度的方向相反
KKT條件的第三式:若最優點在約束平面內部,則lambda=0,約束條件無用
若最優點在約束平面的邊界,g(x)=0
其中第一個式子是約束條件本身。第二個式子是對拉格朗日乘子的描述。第三個式子是第一種情況和第二種情況的整合:在第一種情況里,;在第二種情況下,。所以無論哪一種情況都有。公式(3.4)就稱為Karush-Kuhn-Tucker條件,簡稱KKT條件。
推導除了KKT條件,感覺有點奇怪。因為本來問題的約束條件就是一個,怎么這個KKT條件又多弄出來兩條,這不是讓問題變得更復雜了嗎?這里我們要適當的解釋一下:
1)KKT條件是對最優解的約束,而原始問題中的約束條件是對可行解的約束。
2)KKT條件的推導對于后面馬上要介紹的拉格朗日對偶問題的推導很重要。
---可以將KKT條件推廣到多約束條件下(同時含有等式約束和不等式約束):
h(x) 是等式約束。g(x)是不等式約束。m,n表示約束的數量。
-----------------拉格朗日對偶--------------
按照前面等式約束條件下的優化問題的求解思路,構造拉格朗日方程的目的是將約束條件放到目標函數中,從而將有約束優化問題轉換為無約束優化問題。我們仍然秉承這一思路去解決不等式約束條件下的優化問題,那么如何針對不等式約束條件下的優化問題構建拉格朗日函數呢?
因為我們要求解的是最小化問題,所以一個直觀的想法是如果我能夠構造一個函數,使得該函數在可行解區域內與原目標函數完全一致,而在可行解區域外的數值非常大,甚至是無窮大,那么這個沒有約束條件的新目標函數的優化問題就與原來有約束條件的原始目標函數的優化是等價的問題。
拉格朗日對偶問題其實就是沿著這一思路往下走的過程中,為了方便求解而使用的一種技巧。于是在這里出現了三個問題:1)有約束的原始目標函數優化問題;2)新構造的拉格朗日目標函數優化問題;3)拉格朗日對偶函數的優化問題。我們希望的是這三個問題具有完全相同的最優解,而在數學技巧上通常第三個問題——拉格朗日對偶優化問題——最好解決。所以拉格朗日對偶不是必須的,只是一條捷徑。
1)原始目標函數(有約束條件)
為了接下來的討論,更具有一般性,我們把等式約束條件也放進來,進而有約束的原始目標函數優化問題重新給出統一的描述:
公式(3.5)表示m個等式約束條件和n個不等式約束條件下的目標函數的最小化問題。
新構造的目標函數(沒有約束條件)
此時我們回想最初構造新目標函數的初衷,就是為了建立一個在可行解區域內與原目標函數相同,在可行解區域外函數值趨近于無窮大的新函數。看看公式(3.11)We did it。
現在約束條件已經沒了,接下來我們就可以求解公式(3.12)的問題
這個問題的解就等價于有約束條件下的原始目標函數最小化問題(公式3.5)的解。
-----對偶問題--
啥是對偶?
對于原問題(1)我們通常用拉格朗日對偶的方式來求解。啥是對偶?對偶說白了就是實質相同但從不同角度提出不同提法的一對問題。有時候原問題 (Primal Problem) 不太好解,但是對偶問題 (Dual Problem) 卻很好解,我們就可以通過求解對偶問題來迂回地解答原問題。
在這里我們用的是拉格朗日對偶的方法來解決,既然我們說用對偶的方法的原因在于原問題不好解,那么這里也是如此嗎?
當然了。
首先我們來看看原問題有什么難的地方:
約束條件太多
很顯然約束越多,問題就越難解決,原問題中總共有 k+1個約束,相當麻煩
原問題凹凸性不明確
之前我們說過,“不假定原函數 f的凹凸性”,這就意味著我們無法將凸優化的方法應用在原問題中
那么它的拉格朗日對偶問題有什么優點呢?(其實就是一個思想將復雜問題反向簡單化計算)
只有一個約束
拉格朗日對偶問題一定是凹的
這里先做一個感性的認識,細節方面接下來慢慢說。
對比公式(3.13)和(3.14),發現兩者之間存在一種對稱的美感。所以我們就把(3.14)稱作是(3.13)的對偶問題。現在我們可以解釋一下中的P是原始問題Primary的縮寫,中的D是對偶問題Dual的縮寫。如果我們能夠想辦法證明(3.14)和(3.13)存在相同的解,那我們就可以在對偶問題中選擇比較簡單的一個來求解。
4)對偶問題同解的證明 ?? 見:https://zhuanlan.zhihu.com/p/24638007
----------SVM與LR的比較-------------
LR的詳細介紹:https://blog.csdn.net/b285795298/article/details/88683987
相同點:
- LR和SVM都是分類算法
- LR和SVM都是監督學習算法。
- LR和SVM都是判別模型。
- 如果不考慮核函數,LR和SVM都是線性分類算法,也就是說他們的分類決策面都是線性的。
說明:LR也是可以用核函數的.但LR通常不采用核函數的方法.(計算量太大)
不同點:
1、LR采用log損失,SVM采用合頁(hinge)損失。
邏輯回歸的損失函數: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?支持向量機的目標函數:
? ? ? ? ?
邏輯回歸方法基于概率理論,假設樣本為1的概率可以用sigmoid函數來表示,然后通過極大似然估計的方法估計出參數的值(基于統計的,其損失函數是人為設定的凸函數) 。支持向量機?基于幾何間隔最大化原理,認為存在最大幾何間隔的分類面為最優分類面。
2、LR對異常值敏感,SVM對異常值不敏感(抗燥能力,SVM要強)
支持向量機只考慮局部的邊界線附近的點,而邏輯回歸考慮全局(遠離的點對邊界線的確定也起作用,雖然作用會相對小一些)。LR模型找到的那個超平面,是盡量讓所有點都遠離他,而SVM尋找的那個超平面,是只讓最靠近中間分割線的那些點盡量遠離,即只用到那些支持向量的樣本。
(1)支持向量機改變非支持向量樣本并不會引起決策面的變化: ?? (2)邏輯回歸中改變任何樣本都會引起決策面的變化:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
LR則受所有數據點的影響,如果數據不同類別strongly unbalance,一般需要先對數據做balancing。?(引自http://www.zhihu.com/question/26768865/answer/34078149)
3、計算復雜度不同。對于海量數據,SVM的效率較低,LR效率比較高。 對于兩者在feature和樣本數量不同的情況下的效率問題,可以參考:https://blog.csdn.net/a244659184/article/details/81122521。該文章說明了:
當樣本較少,特征維數較低時,SVM和LR的運行時間均比較短,SVM較短一些。準確率的話,LR明顯比SVM要高。當樣本稍微增加些時,SVM運行時間開始增長,但是準確率趕超了LR。SVM時間雖長,但在接收范圍內。當數據量增長到20000時,特征維數增長到200時,SVM的運行時間劇烈增加,遠遠超過了LR的運行時間。但是準確率卻和LR相差無幾。(這其中主要原因是大量非支持向量參與計算,造成SVM的二次規劃問題)
4、對非線性問題的處理方式不同,LR主要靠特征構造,必須組合交叉特征,特征離散化。SVM也可以這樣,還可以通過kernel(因為只有支持向量參與核計算,計算復雜度不高)。(由于可以利用核函數,。SVM則可以通過對偶求解高效處理。LR則在特征空間維度很高時,表現較差。)
5、SVM的損失函數就自帶正則!!!(損失函數中的1/2||w||^2項),這就是為什么SVM是結構風險最小化算法的原因!!!而LR必須另外在損失函數上添加正則項!!!
關于正則化:
給定一個數據集,一旦完成Linear SVM的求解,所有數據點可以被歸成兩類
1)一類是落在對應分界平面外并被正確分類的點,比如落在正分界左側的正樣本或落在負分界右側的負樣本
2)第二類是落在gap里或被錯誤分類的點。
假設一個數據集已經被Linear SVM求解,那么往這個數據集里面增加或者刪除更多的一類點并不會改變重新求解的Linear SVM平面。這就是它區分與LR的特點,下面我們在看看LR。
值得一提的是求解LR模型過程中,每一個數據點對分類平面都是有影響的,它的影響力遠離它到分類平面的距離指數遞減。換句話說,LR的解是受數據本身分布影響的。在實際應用中,如果數據維度很高,LR模型都會配合參數的L1 regularization。
要說有什么本質區別,那就是兩個模型對數據和參數的敏感程度不同,Linear SVM比較依賴penalty的系數和數據表達空間的測度,而(帶正則項的)LR比較依賴對參數做L1 regularization的系數。但是由于他們或多或少都是線性分類器,所以實際上對低維度數據overfitting的能力都比較有限,相比之下對高維度數據,LR的表現會更加穩定,為什么呢?
因為Linear SVM在計算margin有多“寬”的時候是依賴數據表達上的距離測度(可以理解為度量標準,即在什么樣的標準上計算gap的大小)的,換句話說如果這個測度不好(badly scaled,這種情況在高維數據尤為顯著),所求得的所謂Large margin就沒有意義了,這個問題即使換用kernel trick(比如用Gaussian kernel)也無法完全避免。所以使用Linear SVM之前一般都需要先對數據做normalization,(這里的normalization是對數據的歸一化,注意區分之前的LR在類別不平衡的時候做的balancing)而求解LR(without regularization)時則不需要或者結果不敏感。
同時會有:feature scaling會使得gradient descent的收斂更好。
如果不歸一化,各維特征的跨度差距很大,目標函數就會是“扁”的:
? ? ? ? ? ? ? ? ? ? ? ? ?
(圖中橢圓表示目標函數的等高線,兩個坐標軸代表兩個特征)
這樣feature scaling之后,在進行梯度下降的時候,梯度的方向就會偏離最小值的方向,走很多彎路。
如果歸一化了,那么目標函數就“圓”了:如上圖。每一步梯度的方向都基本指向最小值,可以大踏步地前進。(引自https://www.zhihu.com/question/37129350
-------核函數--------
另搞一篇吧,覺得這個再也到不了頭了
?
?
總結
以上是生活随笔為你收集整理的机器学习中的数学基础(4.1):支持向量机Support Vector Machine(SVM)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习中的数学基础:(2)矩阵的奇异值
- 下一篇: PCL:点云数据基于法线的边界提取(从最