原博客:https://daya-jin.github.io/2018/10/17/SupportVectorMachine/
模型概述
首先回顧一下Logistic Regression枪眉,對(duì)于一組數(shù)據(jù)與標(biāo)簽
号阿,Logistic Regression的任務(wù)是要找到一組參數(shù)使得
,對(duì)于
的樣本判定為負(fù)樣本,而對(duì)于
的樣本判定為正樣本炮叶,其是一個(gè)線性分類器丈秩。問(wèn)題在于如迟,如果有一個(gè)理想數(shù)據(jù)集線性可分蓖柔,那么模型會(huì)因?yàn)閰?shù)的不同而具有不同的決策邊界,那么在這些決策邊界中如何判定孰優(yōu)孰劣闸昨?
(不支持矢量圖蚯斯,請(qǐng)移步原博客查看)
對(duì)于Logistic Regression這種概率模型而言,在給定一個(gè)確定的threshold之后饵较,就可以畫(huà)出其決策邊界拍嵌,空間中的樣本點(diǎn)離決策邊界越遠(yuǎn),說(shuō)明模型對(duì)該樣本的判定可信度越高循诉。那么横辆,在若干決策邊界中,只需要找到一個(gè)決策邊界茄猫,使得模型對(duì)兩個(gè)類別的判定可信度均最高即可獲得一個(gè)最優(yōu)分類器狈蚤。由此引出支持向量機(jī)(Support Vector Machine):
數(shù)據(jù)集困肩,標(biāo)簽
,為了實(shí)現(xiàn)分類的目的脆侮,需要找到一組參數(shù)滿足
锌畸,同時(shí)還需要滿足
中的各樣本點(diǎn)離決策邊界
的距離最遠(yuǎn)。
SVM模型對(duì)未知樣本的預(yù)測(cè)計(jì)算如下:
換句話說(shuō)靖避,SVM模型的決策邊界實(shí)際上是由兩條直線決定的:
在訓(xùn)練數(shù)據(jù)集中潭枣,滿足以上直線方程的樣本點(diǎn)就被稱為支持向量(support vector)。根據(jù)平行直線距離公式
得這兩條直線之間的距離為:
[圖片上傳失敗...(image-4d76c8-1558875604764)]
對(duì)分類任務(wù)而言幻捏,還需要滿足分類的準(zhǔn)確性盆犁,假設(shè)數(shù)據(jù)是線性可分的,則有:
所以SVM可以用如下表達(dá)式來(lái)描述:
上式等價(jià)于:
容易看出SVM自帶參數(shù)正則化篡九。
接下來(lái)看一下SVM的損失函數(shù)谐岁,SVM只關(guān)心那些被誤分的點(diǎn),而對(duì)于正確分類的點(diǎn)是不計(jì)入loss的瓮下,由幾何知識(shí)易得翰铡,模型對(duì)被正確分類的點(diǎn)的輸出總是滿足:钝域,所以SVM的損失函數(shù)可以寫(xiě)成:
以上是數(shù)據(jù)可分的情況讽坏,那么如果數(shù)據(jù)不可分呢?那么允許某些預(yù)測(cè)樣本不一定要嚴(yán)格在直線外側(cè)例证,允許某些樣本處于直線的內(nèi)側(cè)路呜,那么這些被“容忍”的樣本就不滿足了,為了量化這些被“容忍”的樣本偏離正軌的程度织咧,為每一個(gè)樣本引入一個(gè)松弛變量(slack variables)
胀葱,這些樣本需要滿足的條件就變?yōu)橄率剑?/p>
很顯然,并且該變量體現(xiàn)了模型允許樣本越界的程度笙蒙。那么自然而然地會(huì)想到這個(gè)越界程度不能是無(wú)限制的抵屿,所以還要對(duì)該變量進(jìn)行限制,因此SVM問(wèn)題就變成:
其中為樣本越界的代價(jià)系數(shù)捅位,其值越大轧葛,對(duì)越界的懲罰就越大。
最優(yōu)解
如果我們有如下優(yōu)化問(wèn)題:
那么可以使用拉格朗日數(shù)乘法來(lái)得到一個(gè)拉格朗日函數(shù):
其中⊥Р螅現(xiàn)考慮針對(duì)參數(shù)
最大化該函數(shù):
注意到尿扯,
,所以在滿足原問(wèn)題約束條件的情況下焰雕,有:
所以原優(yōu)化問(wèn)題可以寫(xiě)成:
在解優(yōu)化問(wèn)題時(shí)衷笋,如果目標(biāo)函數(shù)是凸函數(shù),那么就可以很容易得到一個(gè)全局最優(yōu)解矩屁。拉格朗日問(wèn)題還有一個(gè)對(duì)偶問(wèn)題:
原問(wèn)題與對(duì)偶問(wèn)題同解的充要條件為KKT條件:
SVM問(wèn)題是一個(gè)帶線性不等式約束的最優(yōu)化問(wèn)題辟宗,可以使用拉格朗日數(shù)乘法的對(duì)偶問(wèn)題來(lái)解:
令得:
將拉格朗日函數(shù)展開(kāi)并代入最優(yōu):
最大化上式即可求出最優(yōu)化參數(shù):
最優(yōu)的SVM模型輸出為:
其中表示待預(yù)測(cè)的樣本爵赵,
表示模型對(duì)該樣本的預(yù)測(cè)值÷眩回顧一下拉格朗日函數(shù):
注意到亚再,如果某樣本不是支持向量,那么有
晨抡,為了最大化拉格朗日函數(shù)氛悬,必定有
,即非支持向量對(duì)應(yīng)的
均為0耘柱,從理論上說(shuō)明了SVM的決策邊界只跟支持向量有關(guān)如捅。
核函數(shù)
以上討論都是基于數(shù)據(jù)集線性可分的假設(shè)下,如果數(shù)據(jù)集在原始維度下線性不可分怎么辦调煎?最簡(jiǎn)單的辦法就是為數(shù)據(jù)集增加高維度特征镜遣。假設(shè)現(xiàn)在有一個(gè)二維數(shù)據(jù)集:
此數(shù)據(jù)集二維平面上線性不可分,但是在經(jīng)一個(gè)變換函數(shù)作用下生成的新數(shù)據(jù)集是線性可分的:
對(duì)于升維后的新數(shù)據(jù)集士袄,SVM所做的計(jì)算變成了:
通過(guò)上面的變換悲关,不難看出,在將數(shù)據(jù)集升維之后娄柳,SVM訓(xùn)練寓辱、預(yù)測(cè)時(shí)的計(jì)算其實(shí)就可以轉(zhuǎn)化為原始特征的計(jì)算,那么何必要對(duì)數(shù)據(jù)集進(jìn)行升維操作呢赤拒?
以上述數(shù)據(jù)集為例秫筏,選取一個(gè)函數(shù),用它來(lái)代替SVM的內(nèi)積計(jì)算:
這樣一來(lái)挎挖,這個(gè)SVM模型的訓(xùn)練这敬、預(yù)測(cè)過(guò)程就等同于在高維空間進(jìn)行,即達(dá)到了線性劃分?jǐn)?shù)據(jù)集的目的蕉朵,也沒(méi)有增加復(fù)雜的運(yùn)算崔涂,其中被稱為核函數(shù)(kernel function),這種方法被稱為核技巧(kernel trick)始衅。
現(xiàn)實(shí)任務(wù)中冷蚂,一般是不知道要對(duì)數(shù)據(jù)應(yīng)用怎樣的升維函數(shù)才能使得數(shù)據(jù)集線性可分,那么自然就難以求得計(jì)算高維空間的核函數(shù)
觅闽,甚至不知道某函數(shù)是否能被用作核函數(shù)帝雇。
簡(jiǎn)單來(lái)說(shuō),一個(gè)函數(shù)要能被當(dāng)做核函數(shù)蛉拙,需要滿足Mercer's condition尸闸,即對(duì)稱函數(shù)的核矩陣必須滿足恒為半正定矩陣。
常用的核函數(shù)有如下幾種:
核函數(shù) | 表達(dá)式 | 說(shuō)明 |
---|---|---|
linear | 計(jì)算原始空間的內(nèi)積 | |
polynomial | 計(jì)算d維空間的內(nèi)積 | |
Radial Basis Function | - | |
sigmoid | - |
軟間隔SVM
注意:軟間隔相當(dāng)于SVM的正則化
到目前為止,以上討論都是假設(shè)SVM在原始空間或者高維空間將數(shù)據(jù)集完全線性分割開(kāi)來(lái)吮廉,但是將數(shù)據(jù)完美的線性分開(kāi)是否會(huì)產(chǎn)生或擬合苞尝?由此引出軟間隔SVM。先前討論的SVM約束條件為:
這表示的是所有樣本都在該類對(duì)應(yīng)的支持向量的外側(cè)宦芦,那么宙址,現(xiàn)在允許一定數(shù)量的樣本不在外側(cè),而在內(nèi)側(cè)调卑,需要滿足的條件變?yōu)椋?/p>
其中為松弛變量抡砂。顯然,這個(gè)變量不能過(guò)大恬涧,否則約束就無(wú)意義了注益,需要對(duì)它進(jìn)行限制,將其加入到最小化目標(biāo)函數(shù)中溯捆,原SVM的優(yōu)化問(wèn)題就變成了:
其中為權(quán)衡系數(shù)丑搔,其值越大對(duì)松弛變量的約束越大。此時(shí)的拉格朗日函數(shù)變?yōu)椋?/p>
令得:
將最優(yōu)帶入得:
可以看到需要最大化的目標(biāo)函數(shù)是一樣的提揍,只不過(guò)多了一個(gè)約束項(xiàng)啤月,完整寫(xiě)出來(lái)如下所示:
SVM的具體優(yōu)化算法請(qǐng)參閱SMO一章,實(shí)現(xiàn)指導(dǎo)也在那一章劳跃。這里只放出完整代碼:完整代碼
SVR
(待補(bǔ)充)
SVM V.S. LR
SVM與LR是經(jīng)常被用來(lái)比較的一對(duì)模型谎仲。
首先,從數(shù)學(xué)形式上來(lái)作對(duì)比售碳,然后再去探究背后的根源强重。對(duì)于機(jī)器學(xué)習(xí)模型而言绞呈,最核心的部分就是其損失函數(shù)或目標(biāo)函數(shù)贸人,該函數(shù)決定了算法的目的與優(yōu)化方法俺祠。
LR的損失函數(shù)為:
SVM的損失函數(shù)為:
不難發(fā)現(xiàn)走触,SVM中的項(xiàng),在
時(shí)為0褐筛,即SVM實(shí)際上對(duì)正確分類的樣本是不計(jì)入loss的圾亏。而反觀LR十拣,不難發(fā)現(xiàn)LR在數(shù)學(xué)形式上的loss是無(wú)法取得
值的,這是因?yàn)閟igmoid函數(shù)的性質(zhì)就不允許模型精確地輸出
值志鹃,理論上只有在無(wú)窮遠(yuǎn)處才能取得夭问。可以假設(shè)一個(gè)存在離群點(diǎn)的場(chǎng)景曹铃,若SVM對(duì)該離群點(diǎn)已能正確分類缰趋,那么在訓(xùn)練時(shí)就不會(huì)再將該點(diǎn)考慮進(jìn)去,而LR則會(huì)收該離群點(diǎn)的影響。所以可以看出秘血,SVM對(duì)離群點(diǎn)的抗性要高于LR味抖。而且,LR的決策邊界會(huì)受兩個(gè)類別樣本分布的影響灰粮,而SVM則不會(huì)仔涩,其決策邊界只受支持向量的影響。
同時(shí)還在損失函數(shù)中發(fā)現(xiàn)粘舟,SVM自帶L2正則項(xiàng)熔脂,LR則不帶。
然后柑肴,兩者的出發(fā)點(diǎn)就不同锤悄。LR是從概率的思想出發(fā),使用一個(gè)線性回歸去擬合正反事件的對(duì)數(shù)機(jī)率嘉抒;而SVM的思想是啟發(fā)性的零聚,直接學(xué)習(xí)一個(gè)最大間隔超平面去將兩個(gè)類別分開(kāi)。
然后再看兩者的輸出函數(shù)些侍,LR的預(yù)測(cè)函數(shù):
SVM的預(yù)測(cè)函數(shù):
由于SMV的預(yù)測(cè)函數(shù)中存在兩訓(xùn)練樣本的內(nèi)積項(xiàng)隶症,所以核技巧能很自然而然的與SVM相結(jié)合;除了這個(gè)原因之外岗宣,SVM中的拉格朗日參數(shù)蚂会,非支持向量的該參數(shù)值是為
的,所以在計(jì)算決策邊界時(shí)的計(jì)算量并不高耗式,這也是核技巧常用于SVM的原因之一胁住。
最后,兩者的優(yōu)化復(fù)雜度不一樣刊咳,LR由于模型本身簡(jiǎn)單彪见,可以使用迭代的梯度下降法進(jìn)行優(yōu)化;而SVM目前成熟的優(yōu)化方法就是SMO算法娱挨。另外余指,由于SVM使用了“距離”的概念,所以對(duì)數(shù)據(jù)做歸一化處理是有好處的跷坝,還由于維度詛咒的原因酵镜,在高維空間下距離的概念會(huì)變得十分抽象,所以在高維情況下柴钻,會(huì)更傾向于實(shí)用LR淮韭。