歡迎轉載,轉載請註明出處:https://blog.csdn.net/qq_41709378/article/details/106582742
—————————————————————————————————————————————————————
講到硬間隔支持向量機不得不再提一下感知機模型,也可以看看之前寫的一篇博客(已捂臉) 感知機模型,主要是在原文的數學算法基礎上,實現編程。感知機模型的核心在於更新參數使得訓練集中沒有誤分類點,算法的具體步驟如下:
也就是說在支持向量機中首先需要給定一個初試值,然後對訓練數據集的每一個元素進行訓練,當出現誤分類點時,需要更新參數:{w←w+ηyixib←b+ηyi直到每個元素都訓練完畢,也就是說不會存在誤分類點。
那麼問題來了?
是不是對於不同的初始值w0,b0,最後訓練的結果是不是不一樣呢?答案是對,採用不同的初始值,解不同,也就是方程的表達形式不一樣。由於感知機模型是一種二類分類模型,也就是線性可分模型,與本文講的硬間隔支持向量機有幾分相識(所以拿來引用)。於是,引入了支持向量機(Support Vector Machines)來尋找最優的一個分離超平面。
之前在 [機器學習] - 支持向量機有介紹支持向量機的基本定義,這裏接着慢慢道來,在上圖之前我還想囉嗦一下支持向量機(SVM)。
【引用知乎 @靠靠靠譜大佬的理解】Support Vector Machine, 一個普通的SVM就是一條直線罷了,用來完美劃分linearly separable的兩類。但這又不是一條普通的直線,這是無數條可以分類的直線當中最完美的,因爲它恰好在兩個類的中間,距離兩個類的點都一樣遠。而所謂的Support vector就是這些離分界線最近的『點』。如果去掉這些點,直線多半是要改變位置的。可以說是這些vectors(主,點點)support(謂,定義)了machine(賓,分類器)…
所以謎底就在謎面上啊朋友們,只要找到了這些最靠近的點(Support vector)不就找到了SVM了嘛。
如果是高維的點,SVM的分界線就是平面或者超平面。其實沒有差,都是一刀切兩塊,我就統統叫直線了。
1 Concept (相關概念)
linearly separable (線性可分): 如上圖中的兩組數據,它們之間已經分的足夠開了,因此很容易就可以在圖中畫出一條直線將兩組數據點分開。在這種情況下,這組數據就被稱爲線性可分數據。也就是本文要講述的硬間隔支持向量機。
separating hyperplane(分隔超平面): 上述將數據集分隔開來的直線稱爲分隔超平面。
hyperplane(超平面): 在上面給出的例子中,由於數據點都在二維平面上,所以此時分隔超平面就只是一條直線。但是,如果所給的數據集是三維的,那麼 此時用來分隔數據的就是一個平面。顯而易見,更高緯度的情況可以依此類推。如果數據是 1024 維的,那麼就需要一個 1023 維的某某對象(不是你們的男 (女)票)來對數據進行分隔。這個 1023 維的某某對象到底應該叫什麼呢? N-1 維呢?該對象被稱爲超平面,也就是分類的決策邊界。分佈在超平面一側 的所有數據都屬於某個類別,而分佈在另一側的所有數據則屬於另一個類別。【這裏補充說下:如果一個N-1維的數據集需要分類,需要將數據的維度"拍"到N維進行分類,即用N-1維進行分類;這個“拍”的過程叫:核函數】
margin(間隔): 我們希望能通過上述的方式來構建分類器,即如果數據點離決策邊界越遠,那麼其最後的預測結果也就越可信。既然這樣,我們希望找到離分隔超平面最近的點,確保它們離分隔面的距離儘可能遠。這裏所說的點到分隔面的距離就是間隔。我們希望間隔儘可能地大,這是因爲如果我們犯錯或者在有限數據上訓練分類器的話,我們希望分類器儘可能健壯。
支持向量(support vector): 就是上面所說的離分隔超平面最近的那些點。【圖畫直線兩邊的一個蘋果🍎、一個香蕉🍌】。
分類器 : 分類器就是給定一個樣本的數據,判定這個樣本屬於哪個類別的算法。例如在股票漲跌預測中,我們認爲前一天的交易量和收盤價對於第二天的漲跌是有影響的,那麼分類器就是通過樣本的交易量和收盤價預測第二天的漲跌情況的算法。
特徵: 在分類問題中,輸入到分類器中的數據叫做特徵。以上面的股票漲跌預測問題爲例,特徵就是前一天的交易量和收盤價。
線性分類器 : 線性分類器是分類器中的一種,就是判定分類結果的根據是通過特徵的線性組合得到的,不能通過特徵的非線性運算結果作爲判定根據。還以上 面的股票漲跌預測問題爲例,判斷的依據只能是前一天的交易量和收盤價的線性組合,不能將交易量和收盤價進行開方,平方等運算。
2 函數間隔及幾何間隔
函數間隔: 一般來說,一個點距離分離超平面的遠近可以表示分類預測的確信程度。在超平面wx+b=0確定的情況下,|wx+ b|能夠相對地表示點x距離超平面的遠近。而wx+b的符號與類標記y的符號是否一致能夠表示分類是否正確。所以可用量y(wx+ b)來表示分類的正確性及確信度,這就是函數間隔( functional margin)。
於是定義超平面(w,b)關於 樣本點(xi,yi)的函數間隔爲:
γ^i=yi(w⋅xi+b)
最優超平面(w,b)是關於訓練數據集T的函數間隔爲超平面(w,b)關於T中所有樣本點(xi,yi)的函數間隔之最小值,即
γ^i=i=1,...,Nminγ^i
而函數間隔不能正常反應點到超平面的距離【函數間隔是數據 f(x)=yi(w⋅xi+b)的值,表示分類預測的正確性及確信度】,因爲當我們等比例擴大w和b的時候,函數間隔也會擴大相應的倍數。因此,我們引入幾何間隔。
幾何間隔:就是在函數間隔的基礎下,在分母上對w加上約束(這個約束有點像歸一化,實質上是除以w的第二範數),定義爲γ:
γi=yi(∥w∥w⋅xi+∥w∥b)
其實參考點到直線的距離,我們可以發現幾何間隔就是高維空間中點到超平面的距離,才能真正反映點到超平面的距離。
幾何間隔是在空間中的距離,就是下圖中的數據點到超平面的直線距離。
3 如何間隔最大化
如下圖,我們的分類超平面(分類線)爲WTX+b=0
X爲數據,W和b是訓練參數。它有兩條間隔線WTX+b=−1,WTX+b=1我們的目標是正確分類,就是要讓所有的點處於自己那一側,且不在間隔內出現, 即對所有點:
{wTxi+b≥+1,yi=+1wTxi+b≤−1,yi=−1...(1)
根據高中數學點到直線距離的知識,樣本空間中任意點到超平面的距離可寫爲:
γ=∥w∥∣wTx+b∣...(2)
我們接着可以看圖直觀理解下,是不是發現只有處於間隔線上的點對間隔線有影響,如下圖中的一個正點兩個負點。是的,這些點被稱爲支持向量,數據集中只有支持向量對超平面和間隔的選取有影響。而對於這些點來說∣∣WTX+b∣∣=1,所以我們的r可以簡化爲:
γ=∥w∥1...(3)
那麼我們現在的優化目標已經出來了,即在1的條件下,使3的γ值最大。
在優化條件1中,要使得函數間隔穩定地大於等於1(邏輯迴歸的函數間隔爲0),那麼我們爲什麼要讓函數間隔大於等於1,爲什麼不能2,不能3?
因爲其實“1”這個值的由來是:"1"是以支持向量爲標準,函數間隔兩邊同時除以γ^i,(前提線性可分的,所有一定存在一個超平面,也就意味着γ^i=0 )得到的。函數間隔p的取值並不影響最優化問題的解,事實上,假設將w和b按比例改變爲λw和λb,這時函數間隔成爲λγ^i。函數間隔的這一改變對上面最優化問題的不等式約束沒有影響,對目標函數的優化也沒有影響,也就是說,它產生一個等價的最優化問題。這樣,就可以取γ^=1。將γ^=1代入上面的最優化問題,注意到最大化∥w∥1和最小化21∥w∥2是等價的。目標函數的轉化方便了後面使用拉格朗日乘子法。
更深入瞭解這個概念可以看機器學習SVM中關於函數間隔爲什麼可以設置爲1?
4 學習算法-最大間隔法
在上文提到最大化∥w∥1和最小化21∥w∥2是等價的【視爲目標一】。那麼在SVM的目標(硬間隔)訓練中也要保證訓練集的正確分類,即約束條件【也可以視爲目標二】。
有兩個目標:第一個是使間隔最大化,第二個是使樣本正確分類,由此推出目標函數:
目標一:w,bmin21∥w∥2
目標二:yi(wTxi+b)≥1i=1....N
稍微解釋一下,w是超平面參數,目標一是從上文提到的最優目標,目標二要求的是正確分類的點都在支持向量的外側,爲了後面的推導方便。有了兩個目標,寫在一起,就變成了svm的終極目標:
w,bmin21∥w∥2
s.t.yi(wTxi+b)≥1i=1....N
於是,構造線性可分支持向量機學習算法的算法步驟如下:
到了這裏,已經介紹了定義的目標函數以及約束條件,想想怎麼能進行求解上述不等式約束的優化問題呢?得到想要的最優w,b?
第一時間想到用拉格朗日乘子法,如果在學習過程中接觸過這個方法,會有印象【ps:會發現它求解的是等式約束的優化問題】,也就是說對於含有等式約束的優化問題,拉格朗日乘子法,構造拉格朗日函數,令偏導爲0求解,最後求解最優值。鏈接可以看看:拉格朗日乘子法(自己總結一些要點)
那麼問題來了,對於不等式約束條件的優化問題如何進行求解,答案是:利用KKT條件求解。所以,對於含有不等式約束的優化問題,同樣要構造拉格朗日函數。
篇幅很多,這裏可以查看拉格朗日乘子法和KKT條件:講到了無約束優化的拉格朗日乘子法和KKT條件。加深一下理解。
5 學習的對偶算法
首先要明確,對偶問題的解不一定直接等於原問題的解(弱對偶),但是,對偶問題有兩點性質。
1.1 滿足某些條件時,對偶問題直接等於原問題的解(強對偶)
1.2 無論原始問題是否是凸的,對偶問題都是凸優化問題
顯然,在某些情況下,直接對對偶問題求解可以得到原問題的解,而且對偶問題是凸優化,易於求解。所以利用對偶來求解是很有用的。
首先構造拉格朗日函數,爲此,對每個不等式約束【目標二】引入拉格朗日乘子ai≥0,i=1..N,定義拉格朗日函數爲:
L(w,b,α)=21∥w∥2+i=1∑Nαi(1−yi(wTxi+b))
如何定義查看:拉格朗日乘子法和KKT條件
其中,α=(α1,α2,...αN)T爲拉格朗日乘子向量。
根據拉格朗日對偶性,在原始問題是極小極大問題時,原始問題的對偶問題是極大極小問題:
αmaxw,bminL(w,b,α)
所以,爲了得到對偶問題的解,需要先求L(w,b,α)對w,b的極小,再求對α的極大。
(1) 先求L(w,b,a)對w,b的極小 :w,bminL(w,b,α)
將上式w=i=1∑Nαiyixi帶回到拉格朗日函數L(w,b,α)=21∥w∥2+i=1∑Nαi(1−yi(wTxi+b))中得到,此時得到的是該函數的最小值(目標函數是凸函數)。
代入後,化簡過程如下:
L(w,b,α)=21∥w∥2−i=1∑Nαi(yi(wTxi+b)−1)
=21wTw−i=1∑NαiyiwTxi−i=1∑Nαiyib+i=1∑Nαi
=21wTi=1∑Nαiyixi−wTi=1∑Nαiyixi−i=1∑Nαiyib+i=1∑Nαi
=−21wTi=1∑Nαiyixi−i=1∑Nαiyib+i=1∑Nαi
=−21wTi=1∑Nαiyixi−bi=1∑Nαiyi+i=1∑Nαi
=−21(i=1∑Nαiyixi)Ti=1∑Nαiyixi−bi=1∑Nαiyi+i=1∑Nαi
=−21j=1∑Nαjyj(xj)Ti=1∑Nαiyixi−bi=1∑Nαiyi+i=1∑Nαi
=−21i=1∑Nj=1∑Nαiαjyiyjxi(xj)T−bi=1∑Nαiyi+i=1∑Nαi
最後得到
−21i=1∑Nj=1∑Nαiαjyiyjxi(xj)T−bi=1∑Nαiyi+i=1∑Nαi
由於最後一項是i=1∑Nαiyi=0,並且將向量內積xi(xj)T表示爲(xi⋅xj)
因此簡化爲
w,bminL(w,b,α)=−21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi
(2) 求w,bminL(w,b,α)對α的極大值,即是對偶問題
將式(7.21)的目標函數由求極大轉換成求極小,就得到下面與之等價的對偶最優化問題。
將原始的優化問題轉化成了對偶問題的優化問題。
根據定理C.3,KKT 條件成立,得到以下定理:設α∗=(α1∗,α2∗,...αN∗)T是對偶最優化問題 (7.22) ~ (7.24) 的解,則存在下標j,使得j>0,並可按下式可以求得原始最優化問題(7.13) ~ (7.14)的解w∗,b∗。
w∗=i=1∑Nαi∗yixi
b∗=yi−i=1∑Nαi∗yi(xi⋅xj)
綜上所述,對於給定的線性可分訓練數據集,可以首先求對偶問題(7.22)~(7.24)的解α∗ ;再利用式(7.25)和式(7.26)求得原始問題的解w∗,b∗;從而得到分離超平面及分類決策函數。這種算法稱爲線性可分支持向量機的對偶學習算法,是線性可分支持向量機學習的基本算法。
補充一下,通過對偶問題求解的α∗是一組向量,代表着數據集中每個點約束條件的拉格朗日乘子係數,只有支持向量的係數αi∗大於零,從而只有支持向量對求解w∗,b∗有影響,也就是說是支持向量影響了解w∗,b∗。
6 參考資料
1:http://bytesizebio.net/2014/02/05/support-vector-machines-explained-well/
2:https://zhuanlan.zhihu.com/p/76946313
3:https://www.cnblogs.com/liaohuiqiang/p/7818448.html
4:李航《統計學習方法》