一、什么是支持向量機(jī)
????????支持向量機(jī)(support?vector?machine),故一般簡稱SVM,通俗來講,它是一種二分類模型,其基本模型定義為特征空間上的間隔最大的線性分類器,這族分類器的特點(diǎn)是他們能夠同時(shí)最小化經(jīng)驗(yàn)誤差與最大化幾何邊緣區(qū),因此支持向量機(jī)也被稱為最大邊緣區(qū)分類器。其學(xué)習(xí)策略便是間隔最大化,最終可轉(zhuǎn)化為一個(gè)凸二次規(guī)劃問題的求解。SVM在很多諸如文本分類,圖像分類,生物序列分析和生物數(shù)據(jù)挖掘,手寫字符識別等領(lǐng)域有很多的應(yīng)用。
????????支持向量機(jī)將向量映射到一個(gè)更高維的空間里,在這個(gè)空間里建立有一個(gè)最大間隔超平面。在分開數(shù)據(jù)的超平面的兩邊建有兩個(gè)互相平行的超平面,分隔超平面使兩個(gè)平行超平面的距離最大化。假定平行超平面間的距離或差距越大,分類器的總誤差越小。
????????假設(shè)給定一些分屬于兩類的2維點(diǎn),這些點(diǎn)可以通過直線分割, 我們要找到一條最優(yōu)的分割線,如何來界定一個(gè)超平面是不是最優(yōu)的呢?
????????如圖:
????????在上面的圖中,a和b都可以作為分類超平面,但最優(yōu)超平面只有一個(gè),最優(yōu)分類平面使間隔最大化。 那是不是某條直線比其他的更加合適呢? 我們可以憑直覺來定義一條評價(jià)直線好壞的標(biāo)準(zhǔn):
????????距離樣本太近的直線不是最優(yōu)的,因?yàn)檫@樣的直線對噪聲敏感度高,泛化性較差。 因此我們的目標(biāo)是找到一條直線(圖中的最優(yōu)超平面),離所有點(diǎn)的距離最遠(yuǎn)。 由此, SVM算法的實(shí)質(zhì)是找出一個(gè)能夠?qū)⒛硞€(gè)值最大化的超平面,這個(gè)值就是超平面離所有訓(xùn)練樣本的最小距離。這個(gè)最小距離用SVM術(shù)語來說叫做間隔(margin) 。
二、什么是線性分類
? ? ? ? 描述:給定一些數(shù)據(jù)點(diǎn),它們分別屬于兩個(gè)不同的類,現(xiàn)在要找到一個(gè)線性分類器把這些數(shù)據(jù)分成兩類。如果用x表示數(shù)據(jù)點(diǎn),用y表示類別(y可以取1或者-1,分別代表兩個(gè)不同的類),一個(gè)線性分類器的學(xué)習(xí)目標(biāo)便是要在n維的數(shù)據(jù)空間中找到一個(gè)超平面(hyper?plane),這個(gè)超平面的方程可以表示為(?wT中的T代表轉(zhuǎn)置):
? ? ? ? 例如:現(xiàn)在有一個(gè)二維平面,平面上有兩種不同的數(shù)據(jù),分別用圈和叉表示。由于這些數(shù)據(jù)是線性可分的,所以可以用一條直線將這兩類數(shù)據(jù)分開,這條直線就相當(dāng)于一個(gè)超平面,超平面一邊的數(shù)據(jù)點(diǎn)所對應(yīng)的y全是-1?,另一邊所對應(yīng)的y全是1。
三、函數(shù)間隔和幾何間隔
? ? ? ? 我們令分類函數(shù)為:
????????當(dāng)f(x)?等于0的時(shí)候,x便是位于超平面上的點(diǎn),而f(x)大于0的點(diǎn)對應(yīng)?y=1?的數(shù)據(jù)點(diǎn),f(x)小于0的點(diǎn)對應(yīng)y=-1的點(diǎn),如下圖所示:
? ??????一個(gè)點(diǎn)距離超平面的遠(yuǎn)近可以表示分類預(yù)測的確信或準(zhǔn)確程度,如何確定這個(gè)超平面呢?從直觀上而言,這個(gè)超平面應(yīng)該是最適合分開兩類數(shù)據(jù)的直線。而判定“最適合”的標(biāo)準(zhǔn)就是這條直線離直線兩邊的數(shù)據(jù)的間隔最大。所以,得尋找有著最大間隔的超平面。
補(bǔ)充知識點(diǎn):點(diǎn)到平面的距離
四、間隔最大化
????????支持向量機(jī)學(xué)習(xí)的基本想法是求解能夠正確劃分訓(xùn)練數(shù)據(jù)集并且?guī)缀伍g隔最大的分離超平面.。對線性可分的訓(xùn)練數(shù)據(jù)集而言,線性可分分離超平面有無窮多個(gè)(等價(jià)于感知機(jī)),但是幾何間隔最大的分離超平面是唯一的。這里的間隔最大化又稱為硬間隔最大化。
? ? ? ? 間隔最大化的直觀解釋是:對訓(xùn)練數(shù)據(jù)集找到幾何間隔最大的超平面意味著以充分大的確信度對訓(xùn)練數(shù)據(jù)進(jìn)行分類。也就是說,不僅將正負(fù)實(shí)例點(diǎn)分開,而且對最難分的實(shí)例點(diǎn)(離超平面最近的點(diǎn))也有足夠大的確信度將它們分開。這樣的超平面應(yīng)該對未知的新實(shí)例有很好的分類預(yù)測能力。
? ????按照我們前面的分析,對一個(gè)數(shù)據(jù)點(diǎn)進(jìn)行分類, 當(dāng)它的margin越大的時(shí)候,分類的confidence越大。 對于一個(gè)包含n個(gè)點(diǎn)的數(shù)據(jù)集,我們可以很自然地定義它的margin為所有這n個(gè)點(diǎn)的margin值中最小的那個(gè)。于是,為了使得分類的confidence高,我們希望所選擇的超平面hyper plane能夠最大化這個(gè)margin值。讓所選擇的超平面能夠最大化這個(gè)“間隔”值,這個(gè)間隔就是下圖中的Gap的一半:
為什么用幾何間隔求最大的分離超平面而不用函數(shù)間隔?
得出下面的線性可分支持向量機(jī)的學(xué)習(xí)算法————最大間隔法。
例題:
五、支持向量和間隔邊界
六、用對偶算法求最優(yōu)化解
我們構(gòu)造了約束最優(yōu)化問題,就是下面這個(gè):
????????此外,由于這個(gè)問題的特殊結(jié)構(gòu),還可以通過拉格朗日對偶性(Lagrange Duality)變換到對偶變量?(dual?variable)?的優(yōu)化問題,即通過求解與原問題等價(jià)的對偶問題(dual?problem)得到原始問題的最優(yōu)解,這就是線性可分條件下支持向量機(jī)的對偶算法,這樣做的優(yōu)點(diǎn)在于:一者對偶問題往往更容易求解;二者可以自然的引入核函數(shù),進(jìn)而推廣到非線性分類問題。
補(bǔ)充知識點(diǎn):拉格朗日乘子法學(xué)習(xí)
????????????????????拉格朗日KKT條件
? ??????????????????KKT條件介紹
? ??????????????????拉格朗日對偶
? ? ? ? ?通過給每一個(gè)約束條件加上一個(gè)拉格朗日乘子(Lagrange?multiplier)α,定義拉格朗日函數(shù)(通過拉格朗日函數(shù)將約束條件融合到目標(biāo)函數(shù)里去,從而只用一個(gè)函數(shù)表達(dá)式便能清楚的表達(dá)出我們的問題):
?求解這個(gè)式子的過程需要拉格朗日對偶性的相關(guān)知識。
線性可分支持向量機(jī)學(xué)習(xí)算法:
例題:
七、線性不可分的情況(軟間隔)
?????????接下來談?wù)劸€性不可分的情況,因?yàn)?b>線性可分這種假設(shè)實(shí)在是太有局限性了。下圖就是一個(gè)典型的線性不可分的分類圖,我們沒有辦法用一條直線去將其分成兩個(gè)區(qū)域,每個(gè)區(qū)域只包含一種顏色的點(diǎn)。
?????????要想在這種情況下的分類器,有兩種方式,一種是用曲線去將其完全分開,曲線就是一種非線性的情況,跟之后將談到的核函數(shù)有一定的關(guān)系:
? ??????另外一種還是用直線,不過不用去保證可分性,就是包容那些分錯(cuò)的情況,不過我們得加入懲罰函數(shù),使得點(diǎn)分錯(cuò)的情況越合理越好。其實(shí)在很多時(shí)候,不是在訓(xùn)練的時(shí)候分類函數(shù)越完美越好,因?yàn)橛?xùn)練函數(shù)中有些數(shù)據(jù)本來就是噪聲,可能就是在人工加上分類標(biāo)簽的時(shí)候加錯(cuò)了,如果我們在訓(xùn)練(學(xué)習(xí))的時(shí)候把這些錯(cuò)誤的點(diǎn)學(xué)習(xí)到了,那么模型在下次碰到這些錯(cuò)誤情況的時(shí)候就難免出錯(cuò)了。這種學(xué)習(xí)的時(shí)候?qū)W到了“噪聲”的過程就是一個(gè)過擬合(over-fitting),這在機(jī)器學(xué)習(xí)中是一個(gè)大忌。
我們可以為分錯(cuò)的點(diǎn)加上一點(diǎn)懲罰,對一個(gè)分錯(cuò)的點(diǎn)的懲罰函數(shù)就是這個(gè)點(diǎn)到其正確位置的距離:
對偶問題的推導(dǎo):
如何求w*和b*
線性支持向量機(jī)學(xué)習(xí)算法:
支持向量:
八、核函數(shù)(Kernels)
? ? ? ? 對于線性不可分的情況,我們可以用核函數(shù)讓空間從原本的線性空間變成一個(gè)更高維的空間,在這個(gè)高維的線性空間下,再用一個(gè)超平面進(jìn)行劃分。這兒舉個(gè)例子,來理解一下如何利用空間的維度變得更高來幫助我們分類的:
????????上圖是一個(gè)線性不可分的圖,當(dāng)我們把這兩個(gè)類似于橢圓形的點(diǎn)映射到一個(gè)高維空間后,映射函數(shù)為:
????????用這個(gè)函數(shù)可以將上圖的平面中的點(diǎn)映射到一個(gè)三維空間(z1,z2,z3),并且對映射后的坐標(biāo)加以旋轉(zhuǎn)之后就可以得到一個(gè)線性可分的點(diǎn)集了。
????????形象說明:例如世界上本來沒有兩個(gè)完全一樣的物體,對于所有的兩個(gè)物體,我們可以通過增加維度來讓他們最終有所區(qū)別,比如說兩本書,從(顏色,內(nèi)容)兩個(gè)維度來說,可能是一樣的,我們可以加上作者這個(gè)維度,是在不行我們還可以加入頁碼,可以加入擁有者,可以加入購買地點(diǎn),可以加入筆記內(nèi)容等等。當(dāng)維度增加到無限維的時(shí)候,一定可以讓任意的兩個(gè)物體可分了。
核函數(shù)定義:
核技巧在支持向量機(jī)中的應(yīng)用:
常用核函數(shù):
非線性支持向量機(jī)學(xué)習(xí)算法:
九、SMO算法
????????支持向量機(jī)的學(xué)習(xí)問題可以形式化為求解凸二次規(guī)劃問題。這樣的凸二次規(guī)劃問題具有全局最優(yōu)解,并且有許多最優(yōu)化算法可以用于這一一問題的求解。但是當(dāng)訓(xùn)練樣本容量很大時(shí),這些算法往往變得非常低效,以致無法使用。所以,如何高效地實(shí)現(xiàn)支持向量機(jī)學(xué)習(xí)就成為一一個(gè)重要的問題。目前人們已提出許多快速實(shí)現(xiàn)算法.本節(jié)講述其中的序列最小最優(yōu)化(sequential minimal optimization, SMO)算法。
????????上述問題是要求解N個(gè)參數(shù)(α1,α2,α3,...,αN),其他參數(shù)均為已知,序列最小最優(yōu)化算法(SMO)可以高效的求解上述SVM問題,它把原始求解N個(gè)參數(shù)二次規(guī)劃問題分解成很多個(gè)子二次規(guī)劃問題分別求解,每個(gè)子問題只需要求解2個(gè)參數(shù),方法類似于坐標(biāo)上升,節(jié)省時(shí)間成本和降低了內(nèi)存需求。每次啟發(fā)式選擇兩個(gè)變量進(jìn)行優(yōu)化,不斷循環(huán),直到達(dá)到函數(shù)最優(yōu)值。
? ??????整個(gè)SMO算法包括兩部分,求解兩個(gè)變量的二次規(guī)劃問題和選擇這兩個(gè)變量的啟發(fā)式方法。
1、兩個(gè)變量二次規(guī)劃的求解方法:
可行域考慮了,接下來考慮二次項(xiàng)系數(shù):
?上面求得的(α1)new和(α2)new是在η>0的情況下求得的:
????????當(dāng)時(shí)為了推導(dǎo)公式我們直接默認(rèn)它是大于0了,現(xiàn)在我們需要重新審視這一項(xiàng)(η)。這一項(xiàng)是原來關(guān)于的二次項(xiàng)的系數(shù)。我們可以分下面三種情況討論:
(1)當(dāng)η>0時(shí):這個(gè)二次函數(shù)開口向上,所以要求這個(gè)二次函數(shù)的最小值,如果說極值點(diǎn)不在計(jì)算出的可行域的范圍內(nèi),就要根據(jù)這個(gè)極值點(diǎn)和可行域邊界值的關(guān)系來得到取最小值的地方:
①如果這個(gè)極值點(diǎn)在可行域左邊,那么我們可以得到這個(gè)可行域內(nèi)二次函數(shù)一定在單增,所以此時(shí)L應(yīng)該是那個(gè)取最小值的地方。就如大括號的第三種情況。
②如果這個(gè)極值點(diǎn)在可行域右邊,那么此時(shí)可行域內(nèi)一定單減,所以此時(shí)H就是那個(gè)取最小值的地方,就是大括號里的第一種情況。
(2)當(dāng)η=0時(shí):這個(gè)二次函數(shù)就變成了一個(gè)一次函數(shù),那么不管這個(gè)一次函數(shù)的單調(diào)性怎樣,最小值一定是在邊界處取到。所以到時(shí)候計(jì)算可行域的兩個(gè)邊界的值,看哪個(gè)小就用哪個(gè)。
(3)當(dāng)η<0時(shí):這個(gè)二次函數(shù)開口向下,那么此時(shí)怎么得到取最小值的點(diǎn)呢?很容易就能想到:最小值也是在可行域的邊界處取到。很容易理解,此時(shí)開口向下,當(dāng)極值點(diǎn)在區(qū)間內(nèi)時(shí),最小值只能在端點(diǎn)處取,因?yàn)闃O值點(diǎn)處是最大的。而當(dāng)極值點(diǎn)在區(qū)間外時(shí),區(qū)間內(nèi)一定是單調(diào)的,此時(shí)最小值也只能在端點(diǎn)處取。通過計(jì)算比較邊界處的目標(biāo)函數(shù)值,哪個(gè)小取哪個(gè)。
通過以上判斷求出(α2)new以后,再根據(jù)公式求出(α1)new,然后帶入目標(biāo)函數(shù)(1)中。即如下過程:
2、選擇這兩個(gè)變量的啟發(fā)式方法
????????上述分析是在從N個(gè)變量中已經(jīng)選出兩個(gè)變量進(jìn)行優(yōu)化的方法,下面分析如何高效地選擇兩個(gè)變量進(jìn)行優(yōu)化,使得目標(biāo)函數(shù)下降的最快。
3、閾值b的計(jì)算
4、差值Ei的計(jì)算
十、總結(jié)
參考文章:SMO算法剖析
? ????????????????SVM算法流程圖
? ? ? ? ? ? ? ? ? ?李航《統(tǒng)計(jì)學(xué)習(xí)方法》
? ??????????????對libsvm算法注釋
? ??????????????支持向量機(jī)通俗導(dǎo)論(理解SVM的三層境界)