【机器学习】SVM学习(三):线性分类器的求解
【機(jī)器學(xué)習(xí)】SVM學(xué)習(xí)(三):線(xiàn)性分類(lèi)器的求解
2016-10-10 19:56?239人閱讀?評(píng)論(0)?收藏?舉報(bào) 本文章已收錄于:? ?機(jī)器學(xué)習(xí)知識(shí)庫(kù) ?分類(lèi): 機(jī)器學(xué)習(xí)(37)?目錄(?)[+]
轉(zhuǎn)載:http://blog.csdn.NET/qll125596718/article/details/6904289
1.問(wèn)題的描述
? ? ? ? ?上節(jié)說(shuō)到我們有了一個(gè)線(xiàn)性分類(lèi)函數(shù),也有了判斷解優(yōu)劣的標(biāo)準(zhǔn)——即有了優(yōu)化的目標(biāo),這個(gè)目標(biāo)就是最大化幾何間隔,但是看過(guò)一些關(guān)于SVM的論文的人一定記得什么優(yōu)化的目標(biāo)是要最小化||w||這樣的說(shuō)法,這是怎么回事呢?回頭再看看我們對(duì)間隔和幾何間隔的定義:
間隔:
δ=y(wx+b)=|g(x)| 幾何間隔:
可以看出δ=||w||δ幾何。注意到幾何間隔與||w||是成反比的,因此最大化幾何間隔與最小化||w||完全是一回事。而我們常用的方法并不是固定||w||的大小而尋求最大幾何間隔,而是固定間隔(例如固定為1),尋找最小的||w||。
? ? ? ? ?而凡是求一個(gè)函數(shù)的最小值(或最大值)的問(wèn)題都可以稱(chēng)為尋優(yōu)問(wèn)題(也叫作一個(gè)規(guī)劃問(wèn)題),又由于找最大值的問(wèn)題總可以通過(guò)加一個(gè)負(fù)號(hào)變?yōu)檎易钚≈档膯?wèn)題,因此我們下面討論的時(shí)候都針對(duì)找最小值的過(guò)程來(lái)進(jìn)行。一個(gè)尋優(yōu)問(wèn)題最重要的部分是目標(biāo)函數(shù),顧名思義,就是指尋優(yōu)的目標(biāo)。例如我們想尋找最小的||w||這件事,就可以用下面的式子表示:
? ? ? ? ?但實(shí)際上對(duì)于這個(gè)目標(biāo),我們常常使用另一個(gè)完全等價(jià)的目標(biāo)函數(shù)來(lái)代替,那就是:
.....(式0)
? ? ? ? ?不難看出當(dāng)||w||^2達(dá)到最小時(shí),||w||也達(dá)到最小,反之亦然(前提當(dāng)然是||w||描述的是向量的長(zhǎng)度,因而是非負(fù)的)。之所以采用這種形式,是因?yàn)楹竺娴那蠼膺^(guò)程會(huì)對(duì)目標(biāo)函數(shù)作一系列變換,而式(0)的形式會(huì)使變換后的形式更為簡(jiǎn)潔(正如聰明的讀者所料,添加的系數(shù)二分之一和平方,皆是為求導(dǎo)數(shù)所需)。
? ? ? ? ?接下來(lái)我們自然會(huì)問(wèn)的就是,這個(gè)式子是否就描述了我們的問(wèn)題呢?(回想一下,我們的問(wèn)題是有一堆點(diǎn),可以被分成兩類(lèi),我們要找出最好的分類(lèi)面)。
? ? ? ? ?如果直接來(lái)解這個(gè)求最小值問(wèn)題,很容易看出當(dāng)||w||=0的時(shí)候就得到了目標(biāo)函數(shù)的最小值。但是你也會(huì)發(fā)現(xiàn),無(wú)論你給什么樣的數(shù)據(jù),都是這個(gè)解!反映在圖中,就是H1與H2兩條直線(xiàn)間的距離無(wú)限大,這個(gè)時(shí)候,所有的樣本點(diǎn)(無(wú)論正樣本還是負(fù)樣本)都跑到了H1和H2中間,而我們?cè)镜囊鈭D是,H1右側(cè)的被分為正類(lèi),H2 左側(cè)的被分為負(fù)類(lèi),位于兩類(lèi)中間的樣本則拒絕分類(lèi)(拒絕分類(lèi)的另一種理解是分給哪一類(lèi)都有道理,因而分給哪一類(lèi)也都沒(méi)有道理)。這下可好,所有樣本點(diǎn)都進(jìn)入了無(wú)法分類(lèi)的灰色地帶。
? ? ? ???造成這種結(jié)果的原因是在描述問(wèn)題的時(shí)候只考慮了目標(biāo),而沒(méi)有加入約束條件,約束條件就是在求解過(guò)程中必須滿(mǎn)足的條件,體現(xiàn)在我們的問(wèn)題中就是樣本點(diǎn)必須在H1或H2的某一側(cè)(或者至少在H1和H2上),而不能跑到兩者中間。我們前文提到過(guò)把間隔固定為1,這是指把所有樣本點(diǎn)中間隔最小的那一點(diǎn)的間隔定為1(這也是集合的間隔的定義,有點(diǎn)繞嘴),也就意味著集合中的其他點(diǎn)間隔都不會(huì)小于1,按照間隔的定義,滿(mǎn)足這些條件就相當(dāng)于讓下面的式子總是成立:
yi[(w·xi)+b]≥1 (i=1,2,…,l) (l是總的樣本數(shù)) ? ? ? ? ?但我們常常習(xí)慣讓式子的值和0比較,因而經(jīng)常用變換過(guò)的形式:
yi[(w·xi)+b]-1≥0 (i=1,2,…,l) (l是總的樣本數(shù)) ? ? ? ? ?因此我們的兩類(lèi)分類(lèi)問(wèn)題也被我們轉(zhuǎn)化成了它的數(shù)學(xué)形式,一個(gè)帶約束的最小值的問(wèn)題:
? ? ? ? ?
? ? ? ? ???從最一般的定義上說(shuō),一個(gè)求最小值的問(wèn)題就是一個(gè)優(yōu)化問(wèn)題(也叫尋優(yōu)問(wèn)題,更文縐縐的叫法是規(guī)劃——Programming),它同樣由兩部分組成,目標(biāo)函數(shù)和約束條件,可以用下面的式子表示:
(式1)
? ? ? ? ??約束條件用函數(shù)c來(lái)表示,就是constrain的意思啦。你可以看出一共有p+q個(gè)約束條件,其中p個(gè)是不等式約束,q個(gè)等式約束。
? ? ? ?關(guān)于這個(gè)式子可以這樣來(lái)理解:式中的x是自變量,但不限定它的維數(shù)必須為1(視乎你解決的問(wèn)題空間維數(shù),對(duì)我們的文本分類(lèi)來(lái)說(shuō),那可是成千上萬(wàn)啊)。要求f(x)在哪一點(diǎn)上取得最小值(反倒不太關(guān)心這個(gè)最小值到底是多少,關(guān)鍵是哪一點(diǎn)),但不是在整個(gè)空間里找,而是在約束條件所劃定的一個(gè)有限的空間里找,這個(gè)有限的空間就是優(yōu)化理論里所說(shuō)的可行域。注意可行域中的每一個(gè)點(diǎn)都要求滿(mǎn)足所有p+q個(gè)條件,而不是滿(mǎn)足其中一條或幾條就可以(切記,要滿(mǎn)足每個(gè)約束),同時(shí)可行域邊界上的點(diǎn)有一個(gè)額外好的特性,它們可以使不等式約束取得等號(hào)!而邊界內(nèi)的點(diǎn)不行。
? ? ? 關(guān)于可行域還有個(gè)概念不得不提,那就是凸集,凸集是指有這么一個(gè)點(diǎn)的集合,其中任取兩個(gè)點(diǎn)連一條直線(xiàn),這條線(xiàn)上的點(diǎn)仍然在這個(gè)集合內(nèi)部,因此說(shuō)“凸”是很形象的(一個(gè)反例是,二維平面上,一個(gè)月牙形的區(qū)域就不是凸集,你隨便就可以找到兩個(gè)點(diǎn)違反了剛才的規(guī)定)。
? ? ? 回頭再來(lái)看我們線(xiàn)性分類(lèi)器問(wèn)題的描述,可以看出更多的東西。
(式2)
? ? ? 在這個(gè)問(wèn)題中,自變量就是w,而目標(biāo)函數(shù)是w的二次函數(shù),所有的約束條件都是w的線(xiàn)性函數(shù)(哎,千萬(wàn)不要把xi當(dāng)成變量,它代表樣本,是已知的),這種規(guī)劃問(wèn)題有個(gè)很有名氣的稱(chēng)呼——二次規(guī)劃(Quadratic Programming,QP),而且可以更進(jìn)一步的說(shuō),由于它的可行域是一個(gè)凸集,因此它是一個(gè)凸二次規(guī)劃。
? ? ? 一下子提了這么多術(shù)語(yǔ),實(shí)在不是為了讓大家以后能向別人炫耀學(xué)識(shí)的淵博,這其實(shí)是我們繼續(xù)下去的一個(gè)重要前提,因?yàn)樵趧?dòng)手求一個(gè)問(wèn)題的解之前(好吧,我承認(rèn),是動(dòng)計(jì)算機(jī)求……),我們必須先問(wèn)自己:這個(gè)問(wèn)題是不是有解?如果有解,是否能找到?
? ? ? 對(duì)于一般意義上的規(guī)劃問(wèn)題,兩個(gè)問(wèn)題的答案都是不一定,但凸二次規(guī)劃讓人喜歡的地方就在于,它有解(教科書(shū)里面為了嚴(yán)謹(jǐn),常常加限定成分,說(shuō)它有全局最優(yōu)解,由于我們想找的本來(lái)就是全局最優(yōu)的解,所以不加也罷),而且可以找到!(當(dāng)然,依據(jù)你使用的算法不同,找到這個(gè)解的速度,行話(huà)叫收斂速度,會(huì)有所不同)。
? ? ? ? 對(duì)比(式2)和(式1)還可以發(fā)現(xiàn),我們的線(xiàn)性分類(lèi)器問(wèn)題只有不等式約束,因此形式上看似乎比一般意義上的規(guī)劃問(wèn)題要簡(jiǎn)單,但解起來(lái)卻并非如此。
? ? ? ? 因?yàn)槲覀儗?shí)際上并不知道該怎么解一個(gè)帶約束的優(yōu)化問(wèn)題。如果你仔細(xì)回憶一下高等數(shù)學(xué)的知識(shí),會(huì)記得我們可以輕松的解一個(gè)不帶任何約束的優(yōu)化問(wèn)題(實(shí)際上就是當(dāng)年背得爛熟的函數(shù)求極值嘛,求導(dǎo)再找0點(diǎn)唄,誰(shuí)不會(huì)啊?笑),我們甚至還會(huì)解一個(gè)只帶等式約束的優(yōu)化問(wèn)題,也是背得爛熟的,求條件極值,記得么,通過(guò)添加拉格朗日乘子,構(gòu)造拉格朗日函數(shù),來(lái)把這個(gè)問(wèn)題轉(zhuǎn)化為無(wú)約束的優(yōu)化問(wèn)題云云(如果你一時(shí)沒(méi)想通,我提醒一下,構(gòu)造出的拉格朗日函數(shù)就是轉(zhuǎn)化之后的問(wèn)題形式,它顯然沒(méi)有帶任何條件)。
? ? ? ? 讀者問(wèn):如果只帶等式約束的問(wèn)題可以轉(zhuǎn)化為無(wú)約束的問(wèn)題而得以求解,那么可不可以把帶不等式約束的問(wèn)題向只帶等式約束的問(wèn)題轉(zhuǎn)化一下而得以求解呢?
? ? ? ? 聰明,可以,實(shí)際上我們也正是這么做的。下一節(jié)就來(lái)說(shuō)說(shuō)如何做這個(gè)轉(zhuǎn)化,一旦轉(zhuǎn)化完成,求解對(duì)任何學(xué)過(guò)高等數(shù)學(xué)的人來(lái)說(shuō),都是小菜一碟啦。
2.問(wèn)題的轉(zhuǎn)化
? ? ? ? ??讓我再一次比較完整的重復(fù)一下我們要解決的問(wèn)題:我們有屬于兩個(gè)類(lèi)別的樣本點(diǎn)(并不限定這些點(diǎn)在二維空間中)若干,如圖:
? ? ? ? 圓形的樣本點(diǎn)定為正樣本(連帶著,我們可以把正樣本所屬的類(lèi)叫做正類(lèi)),方形的點(diǎn)定為負(fù)例。我們想求得這樣一個(gè)線(xiàn)性函數(shù)(在n維空間中的線(xiàn)性函數(shù)):
g(x)=wx+b
? ? ? ? 使得所有屬于正類(lèi)的點(diǎn)x+代入以后有g(shù)(x+)≥1,而所有屬于負(fù)類(lèi)的點(diǎn)x-代入后有g(shù)(x-)≤-1(之所以總跟1比較,無(wú)論正一還是負(fù)一,都是因?yàn)槲覀児潭碎g隔為1,注意間隔和幾何間隔的區(qū)別)。代入g(x)后的值如果在1和-1之間,我們就拒絕判斷。
? ? ? ? 求這樣的g(x)的過(guò)程就是求w(一個(gè)n維向量)和b(一個(gè)實(shí)數(shù))兩個(gè)參數(shù)的過(guò)程(但實(shí)際上只需要求w,求得以后找某些樣本點(diǎn)代入就可以求得b)。因此在求g(x)的時(shí)候,w才是變量。
? ? ? ? 你肯定能看出來(lái),一旦求出了w(也就求出了b),那么中間的直線(xiàn)H就知道了(因?yàn)樗褪莣x+b=0嘛,哈哈),那么H1和H2也就知道了(因?yàn)槿呤瞧叫械?#xff0c;而且相隔的距離還是||w||決定的)。那么w是誰(shuí)決定的?顯然是你給的樣本決定的,一旦你在空間中給出了那些個(gè)樣本點(diǎn),三條直線(xiàn)的位置實(shí)際上就唯一確定了(因?yàn)槲覀兦蟮氖亲顑?yōu)的那三條,當(dāng)然是唯一的),我們解優(yōu)化問(wèn)題的過(guò)程也只不過(guò)是把這個(gè)確定了的東西算出來(lái)而已。
? ? ? ?樣本確定了w,用數(shù)學(xué)的語(yǔ)言描述,就是w可以表示為樣本的某種組合:
w=α1x1+α2x2+…+αnxn
? ? ? ?式子中的αi是一個(gè)一個(gè)的數(shù)(在嚴(yán)格的證明過(guò)程中,這些α被稱(chēng)為拉格朗日乘子),而xi是樣本點(diǎn),因而是向量,n就是總樣本點(diǎn)的個(gè)數(shù)。為了方便描述,以下開(kāi)始嚴(yán)格區(qū)別數(shù)字與向量的乘積和向量間的乘積,我會(huì)用α1x1表示數(shù)字和向量的乘積,而用<x1,x2>表示向量x1,x2的內(nèi)積(也叫點(diǎn)積,注意與向量叉積的區(qū)別)。因此g(x)的表達(dá)式嚴(yán)格的形式應(yīng)該是:
g(x)=<w,x>+b
? ? ? ? 但是上面的式子還不夠好,你回頭看看圖中正樣本和負(fù)樣本的位置,想像一下,我不動(dòng)所有點(diǎn)的位置,而只是把其中一個(gè)正樣本點(diǎn)定為負(fù)樣本點(diǎn)(也就是把一個(gè)點(diǎn)的形狀從圓形變?yōu)榉叫?#xff09;,結(jié)果怎么樣?三條直線(xiàn)都必須移動(dòng)(因?yàn)閷?duì)這三條直線(xiàn)的要求是必須把方形和圓形的點(diǎn)正確分開(kāi))!這說(shuō)明w不僅跟樣本點(diǎn)的位置有關(guān),還跟樣本的類(lèi)別有關(guān)(也就是和樣本的“標(biāo)簽”有關(guān))。因此用下面這個(gè)式子表示才算完整:
w=α1y1x1+α2y2x2+…+αnynxn (式3)
? ? ? (式3)其中的yi就是第i個(gè)樣本的標(biāo)簽,它等于1或者-1。其實(shí)以上式子的那一堆拉格朗日乘子中,只有很少的一部分不等于0(不等于0才對(duì)w起決定作用),這部分不等于0的拉格朗日乘子后面所乘的樣本點(diǎn),其實(shí)都落在H1和H2上,也正是這部分樣本(而不需要全部樣本)唯一的確定了分類(lèi)函數(shù),當(dāng)然,更嚴(yán)格的說(shuō),這些樣本的一部分就可以確定,因?yàn)槔绱_定一條直線(xiàn),只需要兩個(gè)點(diǎn)就可以,即便有三五個(gè)都落在上面,我們也不是全都需要。這部分我們真正需要的樣本點(diǎn),就叫做支持(撐)向量!(名字還挺形象吧,他們“撐”起了分界線(xiàn))。
? ? ? ? 式子也可以用求和符號(hào)簡(jiǎn)寫(xiě)一下:
? ? ? ? 因此原來(lái)的g(x)表達(dá)式可以寫(xiě)為:
? ? ? ? 注意式子中x才是變量,也就是你要分類(lèi)哪篇文檔,就把該文檔的向量表示代入到 x的位置,而所有的xi統(tǒng)統(tǒng)都是已知的樣本。還注意到式子中只有xi和x是向量,因此一部分可以從內(nèi)積符號(hào)中拿出來(lái),得到g(x)的式子為:
? ? ? ? 發(fā)現(xiàn)了什么?w不見(jiàn)啦!從求w變成了求α。
? ? ? ? 但肯定有人會(huì)說(shuō),這并沒(méi)有把原問(wèn)題簡(jiǎn)化呀。嘿嘿,其實(shí)簡(jiǎn)化了,只不過(guò)在你看不見(jiàn)的地方,以這樣的形式描述問(wèn)題以后,我們的優(yōu)化問(wèn)題少了很大一部分不等式約束(記得這是我們解不了極值問(wèn)題的萬(wàn)惡之源)。但是接下來(lái)先跳過(guò)線(xiàn)性分類(lèi)器求解的部分,來(lái)看看 SVM在線(xiàn)性分類(lèi)器上所做的重大改進(jìn)——核函數(shù)。
轉(zhuǎn)載自:
1.http://www.blogjava.net/zhenandaci/archive/2009/02/13/254578.html
2.http://www.blogjava.net/zhenandaci/archive/2009/02/14/254630.html
3.http://www.blogjava.net/zhenandaci/archive/2009/03/01/257237.html
http://blog.csdn.net/smf0504/article/details/52781141
總結(jié)
以上是生活随笔為你收集整理的【机器学习】SVM学习(三):线性分类器的求解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SVM分类器原理详解
- 下一篇: MATLAB概率密度函数估计