svm小結

SVM最基本的應用是分類。 求解最優的分類面,然後用於分類。

最優分類面的定義: 
對於SVM,存在一個分類面,兩個點集到此平面的最小距離最大,兩個點集中的邊緣點到此平面的距離最大。

從直觀上來看,下圖左邊的,肯定不是最優分類面;而右邊的能讓人感覺到其距離更大,使用的支撐點更多,至少使用了三個分類面,應該是最優分類面。


那麼,是不是一個最優分類面需要兩個或三個以上的點才能確定那?
這個要依據實際情況而定。

如下圖,左圖是由三個點,來確定的一個最優分類面,不同類別的兩個點確定一箇中心點,而同類的兩個點可以確定方向向量。這個最優分類面,需要三個點。
但對於右圖,直接獲取不同類別的兩個點的垂面,即是最優分類面。這個分類面,則需要兩個點。

以上,情況的分析,使得求解最優分類面的思路,模式比較複雜。
若採用窮舉法,至少需要以下過程。
先取不同類別的兩個點,求解中心連線的垂面。如以上右圖模式
然後判斷其他點到此垂面的距離,若有更小的距離(或負值,即分類錯誤),則選取以上左圖模式。

窮舉所有點。採用最直接的方式處理,則其運算複雜度爲 m*n*n, 若n > m.

這個還沒有用到高維映射哪,如果再加上高維映射的處理,算法恐怕就更復雜了。所以,窮舉法是不太現實的。

2. 從直觀到數學推論

由直觀到擬合:

直觀上,存在一個最優的超平面。
那麼,我們就假設這個最優面的公式是:

W * X + b = 0,

那麼對於所有的點集x,
都存在平行於最優超平面,的點集的邊界面
W * xi + b >= 1 或 W * xi + b <= -1, 這裏 yi可以歸一化爲1,-1

最大化這兩個平行超平面的距離。即
max  2 / ||w||

或者說是 最小化w,即 min ||w||

另外一個條件是 W * xi + b >= 1 或 W * xi + b <= -1。

這個有點超出平時用的計算方法了(如果沒學過最優化理論),因既有求極值,又有不等式存在。這個是典型的QP(quandratic programming)二次規劃問題。
高數裏面有有關求極值的理論,採用的是拉格朗日乘子法,但其條件是等式。

所以,需要將不等式,轉化爲等式的形式。 方法就引入變量。
給每個點配上一個係數α,若是邊界點,那麼α就爲大於0,否則就爲0.
則 αi * yi * (W * xi + b) = 0.

從另一方面來講,αi也可以看做是拉格朗日系數,採用拉格朗日乘子法,求極值。
由於αi也是未知的。所以,又需要求出αi。



即 min ( max L ), max L 是因爲後面的超平面公式經過減號後變成了 <= 形式,其求和的最大值爲0。

先對min求極值, 對w,和b進行微分。

推導出以下關係


(blog沒公式編輯器,想偷懶只要剪貼了)

終於推出簡單點的公式了。由min 到 max 也是一個對偶轉換的過程,又稱dual

求max極值,並且,只有一個等式約束條件,缺點就是未知變量也增加了。

接下來,就是用最優化的方法,求取極值了。

對未知變量,取一個初始值,然後用點集中的點,一個接一個的進行訓練。
直至未知變量收斂。

3. SMO 解法
SVM 從簡單邊界分類思路,到複雜的拉格朗日求解。

其實,對於二次規劃問題,有經典的最速下降法,牛頓法等最優化求解方法。而SMO是一個SVM的優化算法,避開了經典的二次規劃問題。

消除w,轉換爲 αi 的求解。這是一個更加有效的求解方法

利用KKT條件,再加上一堆的推論,終於有以下公式:


還是這麼多公式和術語,真是令我頭疼。只能先記着,後面慢慢消化。

原理理解:
 αi *  αj  * ... 其實仍然是一個多元規劃問題,所以,先多做幾個假設:
1. 假設除 α1 之外,其他都是定值,那麼據ni=1αiyi=0,  α1可以直接定下來,就無法進行優化了。
2. 若有 α1,  α2是變量,其他是常量, α2可以由 α1來表示,代入到目標函數中,就形成了一個一元二次函數。這樣就能輕易地求極值了。其中,還是要考慮約束條件的:
αiα
i
0 <= ai <= C. 總之,求極值是方便可行多了。

採用此方法,選取不同的 αi,  αj求極值。 然後選取最大的。
SMO就是採用這種原理,只不過它不是依次或隨機選取 α,而是採用啓發式算法選取最優的兩個維度。
 John C. Platt 的那篇論文 Fast Training of Support Vector Machines Using Sequential Minimal Optimization,有原理,有僞代碼可以參考。

http://blog.pluskid.org/?page_id=683
介紹的也是比較深入淺出的。

3. SVM種類有哪些,適用場景及優缺點

SVM的空間複雜度:
SVM 是所佔內存,是樣本數據量的平方。
《A Tutorial on Support Vector Machines for Pattern Recognition》  1998KluwerAcademicPublishers,Boston,訓練計算複雜度在O(Nsv^3+LNsv^2+d*L*Nsv)和O(d*L^2)之間,其中Nsv是支持向量的個數,L是訓練集樣本的個數,d是每個樣本的維數(原始的維數,沒有經過向高維空間映射之前的維數).

總的來講,SVM的SMO算法根據不同的應用場景,其算法複雜度爲~N 到~N^2.2之間,而chunking scale的複雜度爲~N^1.2 到~N^3.4之間。一般SMO比chunking算法有一階的優勢。
線性SVM比非線性SVM的smo算法要慢一些。所以,據原著論文的測試,SMO算法,在線性svm上快1000倍,在非線性上快15倍。

對於SVM的SMO算法的內存需求時線性的,這使得其能適用比較大的訓練集。

所以,如果數據量很大,SVM的訓練時間就會比較長,如垃圾郵件的分類檢測,沒有使用SVM分類器,而是使用了簡單的naive bayes分類器,或者是使用邏輯迴歸模型分類。

---------------------
其他觀點:
SVM在小樣本訓練集上能夠得到比其它算法好很多的結果。支持向量機之所以成爲目前最常用,效果最好的分類器之一,在於其優秀的泛化能力,這是是因爲其本身的優化目標是結構化風險最小,而不是經驗風險最小,因此,通過margin的概念,得到對數據分佈的結構化描述,因此減低了對數據規模和數據分佈的要求。

SVM也並不是在任何場景都比其他算法好,對於每種應用,最好嘗試多種算法,然後評估結果。如SVM在郵件分類上,還不如邏輯迴歸、KNN、bayes的效果好。


SVM各個參數的含義?
sigma: rbf核函數的參數,用於生成高維的特徵,常用的有幾種核函數,如徑向核函數,線性核函數,這個也需要憑經驗來選擇。
C:懲罰因子。在最優化函數中,對離羣點的懲罰因子,也是對離羣點的重視程度體現。這個也是憑經驗和實驗來選擇。

SVM種類:
C-SVM: 分類型SVM,需要調優的參數有懲罰因子C,核函數參數。 C的取值 10^-4, 10^-3, 10^-2,... 到 1, 5... 依次變大
nu-SVM: 分類型SVM, 在一定程度上與C-SVM相同,將懲罰因子C換成了因子nu。其最優化的函數略有不同。nu的取值是0-1,一般取值從0.1到0.8. 0代表樣本落入間隔內的數目最小的情況,1代表樣本可以落入間隔可以很多的情況。
wiki上的原話:
The main motivation for the nu versions of SVM is that it has a has a more meaningful interpretation. This is because nu represents an upper bound on the fraction of training samples which are errors (badly predicted) and a lower bound on the fraction of samples which are support vectors. Some users feel nu is more intuitive to use than C or epsilon. 

C-SVR: 用於迴歸的svm模型
nu-SVR:同上


---------------------------

4. 其他相關概念:

VC維:將N個點進行分類,如分成兩類,那麼可以有2^N種分法,即可以理解成有2^N個學習問題。若存在一個假設H,能準確無誤地將2^N種問題進行分類。那麼這些點的數量N,就是H的VC維。 這個定義真生硬,只能先記住。一個實例就平面上3個點的線性劃分的VC維是3. 而平面上 VC維不是4,是因爲不存在4個樣本點,能被劃分成2^4 = 16種劃分法,因爲對角的兩對點不能被線性劃分爲兩類。更一般地,在r 維空間中,線性決策面的VC維爲r+1。

置信風險: 分類器對 未知樣本進行分類,得到的誤差。也叫期望風險。
經驗風險: 訓練好的分類器,對訓練樣本重新分類得到的誤差。即樣本誤差
結構風險:[置信風險, 經驗風險], 如(置信風險 + 經驗風險) / 2

置信風險的影響因素有: 訓練樣本數目和分類函數的VC維。訓練樣本數目,即樣本越多,置信風險就可以比較小;VC維越大,問題的解的種類就越多,推廣能力就越差,置信風險也就越大。因此,提高樣本數,降低VC維,才能降低置信風險。

而一般的分類函數,需要提高VC維,即樣本的特徵數據量,來降低經驗風險,如多項式分類函數。如此就會導致置信風險變高,結構風險也相應變高。過學習overfit,就是置信風險變高的緣故。

結構風險最小化SRM(structured risk minimize)就是同時考慮經驗風險與結構風險。在小樣本情況下,取得比較好的分類效果。保證分類精度(經驗風險)的同時,降低學習機器的 VC 維,可以使學習機器在整個樣本集上的期望風險得到控制,這應該就是SRM的原則。

當訓練樣本給定時,分類間隔越大,則對應的分類超平面集合的 VC 維就越小。(分類間隔的要求,對VC維的影響)

根據結構風險最小化原則,前者是保證經驗風險(經驗風險和期望風險依賴於學習機器函數族的選擇)最小,而後者使分類間隔最大,導致 VC 維最小,實際上就是使推廣性的界中的置信範圍最小,從而達到使真實風險最小。


訓練樣本在線性可分的情況下,全部樣本能被正確地分類(咦這個不就是傳說中的yi*(w*xi+b))>=1的條件嗎),即經驗風險Remp 爲 0 的前提下,通過對分類間隔最大化(咦,這個就是Φ(w)=(1/2)*w*w嘛),使分類器獲得最好的推廣性能。

對於線性不可分的狀況,可以允許錯分。即對於離羣點降低分類間隔。將距離原來的分類面越遠,離羣就越嚴重,這個距離,可以用一個值--鬆弛變量來表示,只有離羣點纔有鬆弛變量。當然,要對這個值加以限制,即在最小化函數裏,加入一個懲罰項,裏面還有一個可以人爲設定的懲罰項C。當C無限的大,那麼就退化爲硬間隔問題,不允許有離羣點,問題可能無解。若C=0,無視離羣點。有時C值需要多次嘗試,獲取一個較好的值。 這個裏面可分析還很多,後面再學習。

核函數作用:將完全不可分問題,轉換爲可分或達到近似可分的狀態。
鬆弛變量:解決近似可分的問題。

一、線性分類器:

首先給出一個非常非常簡單的分類問題(線性可分),我們要用一條直線,將下圖中黑色的點和白色的點分開,很顯然,圖上的這條直線就是我們要求的直線之一(可以有無數條這樣的直線)

image假如說,我們令黑色的點 = -1, 白色的點 = +1,直線f(x) = w.x + b,這兒的x、w是向量,其實寫成這種形式也是等價的f(x) = w1x1 + w2x2 … + wnxn + b, 當向量x的維度=2的時候,f(x) 表示二維空間中的一條直線, 當x的維度=3的時候,f(x) 表示3維空間中的一個平面,當x的維度=n > 3的時候,表示n維空間中的n-1維超平面。這些都是比較基礎的內容,如果不太清楚,可能需要複習一下微積分、線性代數的內容。

剛剛說了,我們令黑色白色兩類的點分別爲+1, -1,所以當有一個新的點x需要預測屬於哪個分類的時候,我們用sgn(f(x)),就可以預測了,sgn表示符號函數,當f(x) > 0的時候,sgn(f(x)) = +1, 當f(x) < 0的時候sgn(f(x)) = –1。

但是,我們怎樣才能取得一個最優的劃分直線f(x)呢?下圖的直線表示幾條可能的f(x)

image

一個很直觀的感受是,讓這條直線到給定樣本中最近的點最遠,這句話讀起來比較拗口,下面給出幾個圖,來說明一下:

第一種分法:

image

第二種分法:

image

這兩種分法哪種更好呢?從直觀上來說,就是分割的間隙越大越好,把兩個類別的點分得越開越好。就像我們平時判斷一個人是男還是女,就是很難出現分錯的情況,這就是男、女兩個類別之間的間隙非常的大導致的,讓我們可以更準確的進行分類。在SVM中,稱爲Maximum Marginal,是SVM的一個理論基礎之一。選擇使得間隙最大的函數作爲分割平面是由很多道理的,比如說從概率的角度上來說,就是使得置信度最小的點置信度最大(聽起來很拗口),從實踐的角度來說,這樣的效果非常好,等等。這裏就不展開講,作爲一個結論就ok了,:)

上圖被紅色和藍色的線圈出來的點就是所謂的支持向量(support vector)。

image上圖就是一個對之前說的類別中的間隙的一個描述。Classifier Boundary就是f(x),紅色和藍色的線(plus plane與minus plane)就是support vector所在的面,紅色、藍色線之間的間隙就是我們要最大化的分類間的間隙。image

這裏直接給出M的式子:(從高中的解析幾何就可以很容易的得到了,也可以參考後面Moore的ppt)

image

另外支持向量位於wx + b = 1與wx + b = -1的直線上,我們在前面乘上一個該點所屬的類別y(還記得嗎?y不是+1就是-1),就可以得到支持向量的表達式爲:y(wx + b) = 1,這樣就可以更簡單的將支持向量表示出來了。

當支持向量確定下來的時候,分割函數就確定下來了,兩個問題是等價的。得到支持向量,還有一個作用是,讓支持向量後方那些點就不用參與計算了。這點在後面將會更詳細的講講。

在這個小節的最後,給出我們要優化求解的表達式:

image

||w||的意思是w的二範數,跟上面的M表達式的分母是一個意思,之前得到,M = 2 / ||w||,最大化這個式子等價於最小化||w||, 另外由於||w||是一個單調函數,我們可以對其加入平方,和前面的係數,熟悉的同學應該很容易就看出來了,這個式子是爲了方便求導。

這個式子有還有一些限制條件,完整的寫下來,應該是這樣的:(原問題

image

s.t的意思是subject to,也就是在後面這個限制條件下的意思,這個詞在svm的論文裏面非常容易見到。這個其實是一個帶約束的二次規劃(quadratic programming, QP)問題,是一個凸問題,凸問題就是指的不會有局部最優解,可以想象一個漏斗,不管我們開始的時候將一個小球放在漏斗的什麼位置,這個小球最終一定可以掉出漏斗,也就是得到全局最優解。s.t.後面的限制條件可以看做是一個凸多面體,我們要做的就是在這個凸多面體中找到最優解。這些問題這裏不展開,因爲展開的話,一本書也寫不完。如果有疑問請看看wikipedia。

二、轉化爲對偶問題,並優化求解:

這個優化問題可以用拉格朗日乘子法去解,使用了KKT條件的理論,這裏直接作出這個式子的拉格朗日目標函數:

image

求解這個式子的過程需要拉格朗日對偶性的相關知識(另外pluskid也有一篇文章專門講這個問題),並且有一定的公式推導,如果不感興趣,可以直接跳到後面藍色公式表示的結論,該部分推導主要參考自plukids的文章

首先讓L關於w,b最小化,分別令L關於w,b的偏導數爲0,得到關於原問題的一個表達式

image

將兩式帶回L(w,b,a)得到對偶問題的表達式

image

新問題加上其限制條件是(對偶問題):

image

這個就是我們需要最終優化的式子。至此,得到了線性可分問題的優化式子

求解這個式子,有很多的方法,比如SMO等等,個人認爲,求解這樣的一個帶約束的凸優化問題與得到這個凸優化問題是比較獨立的兩件事情,所以在這篇文章中準備完全不涉及如何求解這個話題,如果之後有時間可以補上一篇文章來談談:)。

三、線性不可分的情況(軟間隔):

接下來談談線性不可分的情況,因爲線性可分這種假設實在是太有侷限性了:

下圖就是一個典型的線性不可分的分類圖,我們沒有辦法用一條直線去將其分成兩個區域,每個區域只包含一種顏色的點。

image要想在這種情況下的分類器,有兩種方式,一種是用曲線去將其完全分開,曲線就是一種非線性的情況,跟之後將談到的核函數有一定的關係:

image另外一種還是用直線,不過不用去保證可分性,就是包容那些分錯的情況,不過我們得加入懲罰函數,使得點分錯的情況越合理越好。其實在很多時候,不是在訓練的時候分類函數越完美越好,因爲訓練函數中有些數據本來就是噪聲,可能就是在人工加上分類標籤的時候加錯了,如果我們在訓練(學習)的時候把這些錯誤的點學習到了,那麼模型在下次碰到這些錯誤情況的時候就難免出錯了(假如老師給你講課的時候,某個知識點講錯了,你還信以爲真了,那麼在考試的時候就難免出錯)。這種學習的時候學到了“噪聲”的過程就是一個過擬合(over-fitting),這在機器學習中是一個大忌,我們寧願少學一些內容,也堅決杜絕多學一些錯誤的知識。還是回到主題,用直線怎麼去分割線性不可分的點:

我們可以爲分錯的點加上一點懲罰,對一個分錯的點的懲罰函數就是這個點到其正確位置的距離:

image

在上圖中,藍色紅色的直線分別爲支持向量所在的邊界,綠色的線爲決策函數,那些紫色的線表示分錯的點到其相應的決策面的距離,這樣我們可以在原函數上面加上一個懲罰函數,並且帶上其限制條件爲:

image

公式中藍色的部分爲在線性可分問題的基礎上加上的懲罰函數部分,當xi在正確一邊的時候,ε=0,R爲全部的點的數目,C是一個由用戶去指定的係數,表示對分錯的點加入多少的懲罰,當C很大的時候,分錯的點就會更少,但是過擬合的情況可能會比較嚴重,當C很小的時候,分錯的點可能會很多,不過可能由此得到的模型也會不太正確,所以如何選擇C是有很多學問的,不過在大部分情況下就是通過經驗嘗試得到的。

接下來就是同樣的,求解一個拉格朗日對偶問題,得到一個原問題的對偶問題的表達式:

image

藍色的部分是與線性可分的對偶問題表達式的不同之處。在線性不可分情況下得到的對偶問題,不同的地方就是α的範圍從[0, +∞),變爲了[0, C],增加的懲罰ε沒有爲對偶問題增加什麼複雜度。

四、核函數:

剛剛在談不可分的情況下,提了一句,如果使用某些非線性的方法,可以得到將兩個分類完美劃分的曲線,比如接下來將要說的核函數。

我們可以讓空間從原本的線性空間變成一個更高維的空間在這個高維的線性空間下,再用一個超平面進行劃分。這兒舉個例子,來理解一下如何利用空間的維度變得更高來幫助我們分類的(例子以及圖片來自pluskid的kernel函數部分):

下圖是一個典型的線性不可分的情況

image

但是當我們把這兩個類似於橢圓形的點映射到一個高維空間後,映射函數爲:

image用這個函數可以將上圖的平面中的點映射到一個三維空間(z1,z2,z3),並且對映射後的座標加以旋轉之後就可以得到一個線性可分的點集了。

rotate

用另外一個哲學例子來說:世界上本來沒有兩個完全一樣的物體,對於所有的兩個物體,我們可以通過增加維度來讓他們最終有所區別,比如說兩本書,從(顏色,內容)兩個維度來說,可能是一樣的,我們可以加上 作者 這個維度,是在不行我們還可以加入 頁碼,可以加入 擁有者,可以加入 購買地點,可以加入 筆記內容等等。當維度增加到無限維的時候,一定可以讓任意的兩個物體可分了

回憶剛剛得到的對偶問題表達式:

image

我們可以將紅色這個部分進行改造,令:

image這個式子所做的事情就是將線性的空間映射到高維的空間,k(x, xj)有很多種,下面是比較典型的兩種:

image上面這個核稱爲多項式核,下面這個核稱爲高斯核,高斯核甚至是將原始空間映射爲無窮維空間,另外核函數有一些比較好的性質,比如說不會比線性條件下增加多少額外的計算量,等等,這裏也不再深入。一般對於一個問題,不同的核函數可能會帶來不同的結果,一般是需要嘗試來得到的。

五、一些其他的問題:

1)如何進行多分類問題:

上面所談到的分類都是2分類的情況,當N分類的情況下,主要有兩種方式,一種是1 vs (N – 1)一種是1 vs 1,前一種方法我們需要訓練N個分類器,第i個分類器是看看是屬於分類i還是屬於分類i的補集(出去i的N-1個分類)。

後一種方式我們需要訓練N * (N – 1) / 2個分類器,分類器(i,j)能夠判斷某個點是屬於i還是屬於j。

這種處理方式不僅在SVM中會用到,在很多其他的分類中也是被廣泛用到,從林教授(libsvm的作者)的結論來看,1 vs 1的方式要優於1 vs (N – 1)。

2)SVM會overfitting嗎?

SVM避免overfitting,一種是調整之前說的懲罰函數中的C,另一種其實從式子上來看,min ||w||^2這個看起來是不是很眼熟?在最小二乘法迴歸的時候,我們看到過這個式子,這個式子可以讓函數更平滑,所以SVM是一種不太容易over-fitting的方法。

最後簡單地介紹一下用於優化 dual 問題的 Sequential Minimal Optimization (SMO) 方法。先回憶一下dual 問題:

maxαs.t.,i=1nαi12i,j=1nαiαjyiyjκ(xi,xj)0αiC,i=1,,ni=1nαiyi=0

對於變量 α 來說,這是一個 quadratic 函數。通常對於優化問題,我們沒有辦法的時候就會想到最笨的辦法——Gradient Descent ,也就是梯度下降。注意我們這裏的問題是要求最大值,只要在前面加上一個負號就可以轉化爲求最小值,所以 Gradient Descent 和 Gradient Ascend 並沒有什麼本質的區別,其基本思想直觀上來說就是:梯度是函數值增幅最大的方向,因此只要沿着梯度的反方向走,就能使得函數值減小得越大,從而期望迅速達到最小值。當然普通的 Gradient Descent 並不能保證達到最小值,因爲很有可能陷入一個局部極小值。不過對於 quadratic 問題,極值只有一個,所以是沒有局部極值的問題。

另外還有一種叫做 Coordinate Descend 的變種,它每次只選擇一個維度,例如 α=(α1,,αn) ,它每次選取 αi 爲變量,而將 α1,,αi1,αi+1,,αn 都看成是常量,從而原始的問題在這一步變成一個一元函數,然後針對這個一元函數求最小值,如此反覆輪換不同的維度進行迭代。Coordinate Descend 的主要用處在於那些原本很複雜,但是如果只限制在一維的情況下則變得很簡單甚至可以直接求極值的情況,例如我們這裏的問題,暫且不管約束條件,如果只看目標函數的話,當 α 只有一個分量是變量的時候,這就是一個普通的一元二次函數的極值問題,初中生也會做,帶入公式即可。

然而這裏還有一個問題就是約束條件的存在,其實如果沒有約束條件的話,本身就是一個多元的 quadratic 問題,也是很好求解的。但是有了約束條件,結果讓 Coordinate Descend 變得很尷尬了:比如我們假設 α1 是變量,而 α2,,αn 是固定值的話,那麼其實沒有什麼好優化的了,直接根據第二個約束條件 ni=1αiyi=0 ,α1 的值立即就可以定下來——事實上,迭代每個座標維度,最後發現優化根本進行不下去,因爲迭代了一輪之後會發現根本沒有任何進展,一切都停留在初始值。

所以 Sequential Minimal Optimization (SMO) 一次選取了兩個座標維度來進行優化。例如(不失一般性),我們假設現在選取 α1 和 α2 爲變量,其餘爲常量,則根據約束條件我們有:

i=1nαiyi=0α2=1y2(i=3nαiyiα1y1)y2(Kα1y1)

其中那個從 3 到 n 的作和由於都是常量,我們統一記作 K ,然後由於 y{1,+1} ,所以 y2 和 1/y2 是完全一樣的,所以可以拿到分子上來。將這個式子帶入原來的目標函數中,可以消去 α2 ,從而變成一個一元二次函數,具體展開的形式我就不寫了,總之現在變成了一個非常簡單的問題:帶區間約束的一元二次函數極值問題——這個也是初中就學過求解方法的。唯一需要注意一點的就是這裏的約束條件,一個就是 α1 本身需要滿足 0α1C ,然後由於 α2也要滿足同樣的約束,即:

0y2(Kα1y1)C

也可以得到 α1 的一個可行區間,同 [0,C] 交集即可得到最終的可行區間。這個問題可以從圖中得到一個直觀的感覺。原本關於 α1 和 α2 的區間限制構成途中綠色的的方塊,而另一個約束條件 y1α1+y2α2=K 實際上表示一條直線,兩個集合的交集即是途中紅顏色的線段,投影到 α1 軸上所對應的區間即是 α1 的取值範圍,在這個區間內求二次函數的最大值即可完成 SMO 的一步迭代。

同 Coordinate Descent 一樣,SMO 也會選取不同的兩個 coordinate 維度進行優化,可以看出由於每一個迭代步驟實際上是一個可以直接求解的一元二次函數極值問題,所以求解非常高效。此外,SMO 也並不是依次或者隨機地選取兩個座標維度,而是有一些啓發式的策略來選取最優的兩個座標維度,具體的選取方法(和其他的一些細節),可以參見 John C. Platt 的那篇論文 Fast Training of Support Vector Machines Using Sequential Minimal Optimization 。關於 SMO ,我就不再多說了。如果你對研究實際的代碼比較感興趣,可以去看 LibSVM 的實現,當然,它那個也許已經不是原來版本的 SMO 了,因爲本來 SVM 的優化就是一個有許多研究工作的領域,在那些主要的優化方法之上,也有各種改進的辦法或者全新的算法提出來。

除了 LibSVM 之外,另外一個流行的實現 SVMlight 似乎是用了另一種優化方法,具體可以參考一下它相關的論文 Making large-Scale SVM Learning Practical 。

此外,雖然我們從 dual 問題的推導中得出了許多 SVM 的優良性質,但是 SVM 的數值優化(即使是非線性的版本)其實並不一定需要轉化爲 dual 問題來完成的,具體做法我並不清楚,不過這方面的文章也不少,比如 2007 年 Neural Computation 的一篇 Training a support vector machine in the primal 。如果感興趣可以參考一下。 :)

轉載地址:http://blog.csdn.net/viewcode/article/details/12840405
http://blog.csdn.net/sunanger_wang/article/details/7887218
http://blog.pluskid.org/?p=696




發佈了6 篇原創文章 · 獲贊 27 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章