1. 程式人生 > >SVM-支援向量機演算法概述

SVM-支援向量機演算法概述

(一)SVM的背景簡介

支援向量機(Support Vector Machine)是Cortes和Vapnik於1995年首先提出的,它在解決小樣本、非線性及高維模式識別中表現出許多特有的優勢,並能夠推廣應用到函式擬合等其他機器學習問題中[10]。
支援向量機方法是建立在統計學習理論的VC 維理論和結構風險最小原理基礎上的,根據有限的樣本資訊在模型的複雜性(即對特定訓練樣本的學習精度,Accuracy)和學習能力(即無錯誤地識別任意樣本的能力)之間尋求最佳折衷,以期獲得最好的推廣能力[14](或稱泛化能力)。

以上是經常被有關SVM 的學術文獻引用的介紹,有點八股,我來逐一分解並解釋一下。

Vapnik是統計機器學習的大牛,這想必都不用說,他出版的《Statistical Learning Theory》是一本完整闡述統計機器學習思想的名著。在該書中詳細的論證了統計機器學習之所以區別於傳統機器學習的本質,就在於統計機器學習能夠精確的給出學習效果,能夠解答需要的樣本數等等一系列問題。與統計機器學習的精密思維相比,傳統的機器學習基本上屬於摸著石頭過河,用傳統的機器學習方法構造分類系統完全成了一種技巧,一個人做的結果可能很好,另一個人差不多的方法做出來卻很差,缺乏指導和原則。

所謂VC維是對函式類的一種度量,可以簡單的理解為問題的複雜程度,VC維越高,一個問題就越複雜。正是因為SVM關注的是VC維,後面我們可以看到,SVM解決問題的時候,和樣本的維數是無關的(甚至樣本是上萬維的都可以,這使得SVM很適合用來解決文字分類的問題,當然,有這樣的能力也因為引入了核函式)。

結構風險最小聽上去文縐縐,其實說的也無非是下面這回事。

機器學習本質上就是一種對問題真實模型的逼近(我們選擇一個我們認為比較好的近似模型,這個近似模型就叫做一個假設),但毫無疑問,真實模型一定是不知道的(如果知道了,我們幹嗎還要機器學習?直接用真實模型解決問題不就可以了?對吧,哈哈)既然真實模型不知道,那麼我們選擇的假設與問題真實解之間究竟有多大差距,我們就沒法得知。比如說我們認為宇宙誕生於150億年前的一場大爆炸,這個假設能夠描述很多我們觀察到的現象,但它與真實的宇宙模型之間還相差多少?誰也說不清,因為我們壓根就不知道真實的宇宙模型到底是什麼。

這個與問題真實解之間的誤差,就叫做風險(更嚴格的說,誤差的累積叫做風險)。我們選擇了一個假設之後(更直觀點說,我們得到了一個分類器以後),真實誤差無從得知,但我們可以用某些可以掌握的量來逼近它。最直觀的想法就是使用分類器在樣本資料上的分類的結果與真實結果(因為樣本是已經標註過的資料,是準確的資料)之間的差值來表示。這個差值叫做經驗風險Remp(w)。以前的機器學習方法都把經驗風險最小化作為努力的目標,但後來發現很多分類函式能夠在樣本集上輕易達到100%的正確率,在真實分類時卻一塌糊塗(即所謂的推廣能力差,或泛化能力差)。此時的情況便是選擇了一個足夠複雜的分類函式(它的VC維很高),能夠精確的記住每一個樣本,但對樣本之外的資料一律分類錯誤。回頭看看經驗風險最小化原則我們就會發現,此原則適用的大前提是經驗風險要確實能夠逼近真實風險才行(行話叫一致),但實際上能逼近麼?答案是不能,因為樣本數相對於現實世界要分類的文字數來說簡直九牛一毛,經驗風險最小化原則只在這佔很小比例的樣本上做到沒有誤差,當然不能保證在更大比例的真實文字上也沒有誤差。

統計學習因此而引入了泛化誤差界的概念,就是指真實風險應該由兩部分內容刻畫,一是經驗風險,代表了分類器在給定樣本上的誤差;二是置信風險,代表了我們在多大程度上可以信任分類器在未知文字上分類的結果。很顯然,第二部分是沒有辦法精確計算的,因此只能給出一個估計的區間,也使得整個誤差只能計算上界,而無法計算準確的值(所以叫做泛化誤差界,而不叫泛化誤差)。

置信風險與兩個量有關,一是樣本數量,顯然給定的樣本數量越大,我們的學習結果越有可能正確,此時置信風險越小;二是分類函式的VC維,顯然VC維越大,推廣能力越差,置信風險會變大。

泛化誤差界的公式為:

R(w)≤Remp(w)+Ф(n/h)

公式中R(w)就是真實風險,Remp(w)就是經驗風險,Ф(n/h)就是置信風險。統計學習的目標從經驗風險最小化變為了尋求經驗風險與置信風險的和最小,即結構風險最小。

SVM正是這樣一種努力最小化結構風險的演算法。

SVM其他的特點就比較容易理解了。

小樣本,並不是說樣本的絕對數量少(實際上,對任何演算法來說,更多的樣本幾乎總是能帶來更好的效果),而是說與問題的複雜度比起來,SVM演算法要求的樣本數是相對比較少的。

非線性,是指SVM擅長應付樣本資料線性不可分的情況,主要通過鬆弛變數(也有人叫懲罰變數)和核函式技術來實現,這一部分是SVM的精髓,以後會詳細討論。多說一句,關於文字分類這個問題究竟是不是線性可分的,尚沒有定論,因此不能簡單的認為它是線性可分的而作簡化處理,在水落石出之前,只好先當它是線性不可分的(反正線性可分也不過是線性不可分的一種特例而已,我們向來不怕方法過於通用)。

高維模式識別是指樣本維數很高,例如文字的向量表示,如果沒有經過另一系列文章(《文字分類入門》)中提到過的降維處理,出現幾萬維的情況很正常,其他演算法基本就沒有能力應付了,SVM卻可以,主要是因為SVM 產生的分類器很簡潔,用到的樣本資訊很少(僅僅用到那些稱之為“支援向量”的樣本,此為後話),使得即使樣本維數很高,也不會給儲存和計算帶來大麻煩(相對照而言,kNN演算法在分類時就要用到所有樣本,樣本數巨大,每個樣本維數再一高,這日子就沒法過了……)。

下一節開始正式討論SVM。別嫌我說得太詳細哦。

SVM入門(二)線性分類器Part 1

線性分類器(一定意義上,也可以叫做感知機) 是最簡單也很有效的分類器形式.在一個線性分類器中,可以看到SVM形成的思路,並接觸很多SVM的核心概念.

用一個二維空間裡僅有兩類樣本的分類問題來舉個小例子。如圖所示

clip_image002

C1和C2是要區分的兩個類別,在二維平面中它們的樣本如上圖所示。中間的直線就是一個分類函式,它可以將兩類樣本完全分開。一般的,如果一個線性函式能夠將樣本完全正確的分開,就稱這些資料是線性可分的,否則稱為非線性可分的。

什麼叫線性函式呢?在一維空間裡就是一個點,在二維空間裡就是一條直線,三維空間裡就是一個平面,可以如此想象下去,如果不關注空間的維數,這種線性函式還有一個統一的名稱——超平面(Hyper Plane)!

實際上,一個線性函式是一個實值函式(即函式的值是連續的實數),而我們的分類問題(例如這裡的二元分類問題——回答一個樣本屬於還是不屬於一個類別的問題)需要離散的輸出值,例如用1表示某個樣本屬於類別C1,而用0表示不屬於(不屬於C1也就意味著屬於C2),這時候只需要簡單的在實值函式的基礎上附加一個閾值即可,通過分類函式執行時得到的值大於還是小於這個閾值來確定類別歸屬。 例如我們有一個線性函式

g(x)=wx+b

我們可以取閾值為0,這樣當有一個樣本xi需要判別的時候,我們就看g(xi)的值。若g(xi)>0,就判別為類別C1,若g(xi)<0,則判別為類別C2(等於的時候我們就拒絕判斷,呵呵)。此時也等價於給函式g(x)附加一個符號函式sgn(),即f(x)=sgn [g(x)]是我們真正的判別函式。

關於g(x)=wx+b這個表示式要注意三點:一,式中的x不是二維座標系中的橫軸,而是樣本的向量表示,例如一個樣本點的座標是(3,8),則xT=(3,8) ,而不是x=3(一般說向量都是說列向量,因此以行向量形式來表示時,就加上轉置)。二,這個形式並不侷限於二維的情況,在n維空間中仍然可以使用這個表示式,只是式中的w成為了n維向量(在二維的這個例子中,w是二維向量,為了表示起來方便簡潔,以下均不區別列向量和它的轉置,聰明的讀者一看便知);三,g(x)不是中間那條直線的表示式,中間那條直線的表示式是g(x)=0,即wx+b=0,我們也把這個函式叫做分類面。

實際上很容易看出來,中間那條分界線並不是唯一的,我們把它稍微旋轉一下,只要不把兩類資料分錯,仍然可以達到上面說的效果,稍微平移一下,也可以。此時就牽涉到一個問題,對同一個問題存在多個分類函式的時候,哪一個函式更好呢?顯然必須要先找一個指標來量化“好”的程度,通常使用的都是叫做“分類間隔”的指標。下一節我們就仔細說說分類間隔,也補一補相關的數學知識。

SVM入門(三)線性分類器Part 2

上回說到對於文字分類這樣的不適定問題(有一個以上解的問題稱為不適定問題),需要有一個指標來衡量解決方案(即我們通過訓練建立的分類模型)的好壞,而分類間隔是一個比較好的指標。

在進行文字分類的時候,我們可以讓計算機這樣來看待我們提供給它的訓練樣本,每一個樣本由一個向量(就是那些文字特徵所組成的向量)和一個標記(標示出這個樣本屬於哪個類別)組成。如下:

Di=(xi,yi)

xi就是文字向量(維數很高),yi就是分類標記。

在二元的線性分類中,這個表示分類的標記只有兩個值,1和-1(用來表示屬於還是不屬於這個類)。有了這種表示法,我們就可以定義一個樣本點到某個超平面的間隔:

δi=yi(wxi+b)

這個公式乍一看沒什麼神祕的,也說不出什麼道理,只是個定義而已,但我們做做變換,就能看出一些有意思的東西。

首先注意到如果某個樣本屬於該類別的話,那麼wxi+b>0(記得麼?這是因為我們所選的g(x)=wx+b就通過大於0還是小於0來判斷分類),而yi也大於0;若不屬於該類別的話,那麼wxi+b<0,而yi也小於0,這意味著yi(wxi+b)總是大於0的,而且它的值就等於|wxi+b|!(也就是|g(xi)|)

現在把w和b進行一下歸一化,即用w/||w||和b/||w||分別代替原來的w和b,那麼間隔就可以寫成

clip_image002[28]

這個公式是不是看上去有點眼熟?沒錯,這不就是解析幾何中點xi到直線g(x)=0的距離公式嘛!(推廣一下,是到超平面g(x)=0的距離, g(x)=0就是上節中提到的分類超平面)

小Tips:||w||是什麼符號?||w||叫做向量w的範數,範數是對向量長度的一種度量。我們常說的向量長度其實指的是它的2-範數,範數最一般的表示形式為p-範數,可以寫成如下表達式

向量w=(w1, w2, w3,…… wn)

它的p-範數為

clip_image004[10]

看看把p換成2的時候,不就是傳統的向量長度麼?當我們不指明p的時候,就像||w||這樣使用時,就意味著我們不關心p的值,用幾範數都可以;或者上文已經提到了p的值,為了敘述方便不再重複指明。

當用歸一化的w和b代替原值之後的間隔有一個專門的名稱,叫做幾何間隔,幾何間隔所表示的正是點到超平面的歐氏距離,我們下面就簡稱幾何間隔為“距離”。以上是單個點到某個超平面的距離(就是間隔,後面不再區別這兩個詞)定義,同樣可以定義一個點的集合(就是一組樣本)到某個超平面的距離為此集合中離超平面最近的點的距離。下面這張圖更加直觀的展示出了幾何間隔的現實含義:

image

H是分類面,而H1和H2是平行於H,且過離H最近的兩類樣本的直線,H1與H,H2與H之間的距離就是幾何間隔。

之所以如此關心幾何間隔這個東西,是因為幾何間隔與樣本的誤分次數間存在關係:

clip_image012

其中的δ是樣本集合到分類面的間隔,R=max ||xi|| i=1,...,n,即R是所有樣本中(xi是以向量表示的第i個樣本)向量長度最長的值(也就是說代表樣本的分佈有多麼廣)。先不必追究誤分次數的具體定義和推導過程,只要記得這個誤分次數一定程度上代表分類器的誤差。而從上式可以看出,誤分次數的上界由幾何間隔決定!(當然,是樣本已知的時候)

至此我們就明白為何要選擇幾何間隔來作為評價一個解優劣的指標了,原來幾何間隔越大的解,它的誤差上界越小。因此最大化幾何間隔成了我們訓練階段的目標,而且,與二把刀作者所寫的不同,最大化分類間隔並不是SVM的專利,而是早線上性分類時期就已有的思想。

SVM-支援向量機(二)

上節說到我們有了一個線性分類函式,也有了判斷解優劣的標準——即有了優化的目標,這個目標就是最大化幾何間隔,但是看過一些關於SVM的論文的人一定記得什麼優化的目標是要最小化||w||這樣的說法,這是怎麼回事呢?回頭再看看我們對間隔和幾何間隔的定義:

間隔:δ=y(wx+b)=|g(x)|

幾何間隔:clip_image002

可以看出δ=||w||δ幾何。注意到幾何間隔與||w||是成反比的,因此最大化幾何間隔與最小化||w||完全是一回事。而我們常用的方法並不是固定||w||的大小而尋求最大幾何間隔,而是固定間隔(例如固定為1),尋找最小的||w||。

而凡是求一個函式的最小值(或最大值)的問題都可以稱為尋優問題(也叫作一個規劃問題),又由於找最大值的問題總可以通過加一個負號變為找最小值的問題,因此我們下面討論的時候都針對找最小值的過程來進行。一個尋優問題最重要的部分是目標函式,顧名思義,就是指尋優的目標。例如我們想尋找最小的||w||這件事,就可以用下面的式子表示:

clip_image002[4]

但實際上對於這個目標,我們常常使用另一個完全等價的目標函式來代替,那就是:

clip_image002[6](式1)

不難看出當||w||2達到最小時,||w||也達到最小,反之亦然(前提當然是||w||描述的是向量的長度,因而是非負的)。之所以採用這種形式,是因為後面的求解過程會對目標函式作一系列變換,而式(1)的形式會使變換後的形式更為簡潔(正如聰明的讀者所料,新增的係數二分之一和平方,皆是為求導數所需)。

接下來我們自然會問的就是,這個式子是否就描述了我們的問題呢?(回想一下,我們的問題是有一堆點,可以被分成兩類,我們要找出最好的分類面)

如果直接來解這個求最小值問題,很容易看出當||w||=0的時候就得到了目標函式的最小值。但是你也會發現,無論你給什麼樣的資料,都是這個解!反映在圖中,就是H1與H2兩條直線間的距離無限大,這個時候,所有的樣本點(無論正樣本還是負樣本)都跑到了H1和H2中間,而我們原本的意圖是,H1右側的被分為正類,H2 左側的被分為負類,位於兩類中間的樣本則拒絕分類(拒絕分類的另一種理解是分給哪一類都有道理,因而分給哪一類也都沒有道理)。這下可好,所有樣本點都進入了無法分類的灰色地帶。

clip_image002[8]

造成這種結果的原因是在描述問題的時候只考慮了目標,而沒有加入約束條件,約束條件就是在求解過程中必須滿足的條件,體現在我們的問題中就是樣本點必須在H1或H2的某一側(或者至少在H1和H2上),而不能跑到兩者中間。我們前文提到過把間隔固定為1,這是指把所有樣本點中間隔最小的那一點的間隔定為1(這也是集合的間隔的定義,有點繞嘴),也就意味著集合中的其他點間隔都不會小於1,按照間隔的定義,滿足這些條件就相當於讓下面的式子總是成立:

yi[(w·xi)+b]≥1 (i=1,2,…,l) (l是總的樣本數)

但我們常常習慣讓式子的值和0比較,因而經常用變換過的形式:

yi[(w·xi)+b]-1≥0 (i=1,2,…,l) (l是總的樣本數)

因此我們的兩類分類問題也被我們轉化成了它的數學形式,一個帶約束的最小值的問題:

clip_image002[10]

從最一般的定義上說,一個求最小值的問題就是一個優化問題(也叫尋優問題,更文縐縐的叫法是規劃——Programming),它同樣由兩部分組成,目標函式和約束條件,可以用下面的式子表示:

clip_image002(式1)

約束條件用函式c來表示,就是constrain的意思啦。你可以看出一共有p+q個約束條件,其中p個是不等式約束,q個等式約束

關於這個式子可以這樣來理解:式中的x是自變數,但不限定它的維數必須為1(視乎你解決的問題空間維數,對我們的文字分類來說,那可是成千上萬啊)。要求f(x)在哪一點上取得最小值(反倒不太關心這個最小值到底是多少,關鍵是哪一點),但不是在整個空間裡找,而是在約束條件所劃定的一個有限的空間裡找,這個有限的空間就是優化理論裡所說的可行域。注意可行域中的每一個點都要求滿足所有p+q個條件,而不是滿足其中一條或幾條就可以(切記,要滿足每個約束),同時可行域邊界上的點有一個額外好的特性,它們可以使不等式約束取得等號!而邊界內的點不行。

關於可行域還有個概念不得不提,那就是凸集,凸集是指有這麼一個點的集合,其中任取兩個點連一條直線,這條線上的點仍然在這個集合內部,因此說“凸”是很形象的(一個反例是,二維平面上,一個月牙形的區域就不是凸集,你隨便就可以找到兩個點違反了剛才的規定)。

回頭再來看我們線性分類器問題的描述,可以看出更多的東西。

clip_image002[5](式2)

在這個問題中,自變數就是w,而目標函式是w的二次函式,所有的約束條件都是w的線性函式(哎,千萬不要把xi當成變數,它代表樣本,是已知的),這種規劃問題有個很有名氣的稱呼——二次規劃(Quadratic Programming,QP),而且可以更進一步的說,由於它的可行域是一個凸集,因此它是一個凸二次規劃

一下子提了這麼多術語,實在不是為了讓大家以後能向別人炫耀學識的淵博,這其實是我們繼續下去的一個重要前提,因為在動手求一個問題的解之前(好吧,我承認,是動計算機求……),我們必須先問自己:這個問題是不是有解?如果有解,是否能找到?

對於一般意義上的規劃問題,兩個問題的答案都是不一定,但凸二次規劃讓人喜歡的地方就在於,它有解(教科書裡面為了嚴謹,常常加限定成分,說它有全域性最優解,由於我們想找的本來就是全域性最優的解,所以不加也罷),而且可以找到!(當然,依據你使用的演算法不同,找到這個解的速度,行話叫收斂速度,會有所不同)

對比(式2)和(式1)還可以發現,我們的線性分類器問題只有不等式約束,因此形式上看似乎比一般意義上的規劃問題要簡單,但解起來卻並非如此。

因為我們實際上並不知道該怎麼解一個帶約束的優化問題。如果你仔細回憶一下高等數學的知識,會記得我們可以輕鬆的解一個不帶任何約束的優化問題(實際上就是當年背得爛熟的函式求極值嘛,求導再找0點唄,誰不會啊?笑),我們甚至還會解一個只帶等式約束的優化問題,也是背得爛熟的,求條件極值,記得麼,通過新增拉格朗日乘子,構造拉格朗日函式,來把這個問題轉化為無約束的優化問題云云(如果你一時沒想通,我提醒一下,構造出的拉格朗日函式就是轉化之後的問題形式,它顯然沒有帶任何條件)。

讓我再一次比較完整的重複一下我們要解決的問題:我們有屬於兩個類別的樣本點(並不限定這些點在二維空間中)若干,如圖,

image

圓形的樣本點定為正樣本(連帶著,我們可以把正樣本所屬的類叫做正類),方形的點定為負例。我們想求得這樣一個線性函式(在n維空間中的線性函式):

g(x)=wx+b

使得所有屬於正類的點x+代入以後有g(x+)≥1,而所有屬於負類的點x-代入後有g(x-)≤-1(之所以總跟1比較,無論正一還是負一,都是因為我們固定了間隔為1,注意間隔和幾何間隔的區別)。代入g(x)後的值如果在1和-1之間,我們就拒絕判斷。

求這樣的g(x)的過程就是求w(一個n維向量)和b(一個實數)兩個引數的過程(但實際上只需要求w,求得以後找某些樣本點代入就可以求得b)。因此在求g(x)的時候,w才是變數。

你肯定能看出來,一旦求出了w(也就求出了b),那麼中間的直線H就知道了(因為它就是wx+b=0嘛,哈哈),那麼H1和H2也就知道了(因為三者是平行的,而且相隔的距離還是||w||決定的)。那麼w是誰決定的?顯然是你給的樣本決定的,一旦你在空間中給出了那些個樣本點,三條直線的位置實際上就唯一確定了(因為我們求的是最優的那三條,當然是唯一的),我們解優化問題的過程也只不過是把這個確定了的東西算出來而已。

樣本確定了w,用數學的語言描述,就是w可以表示為樣本的某種組合:

w=α1x12x2+…+αnxn

式子中的αi是一個一個的數(在嚴格的證明過程中,這些α被稱為拉格朗日乘子),而xi是樣本點,因而是向量,n就是總樣本點的個數。為了方便描述,以下開始嚴格區別數字與向量的乘積和向量間的乘積,我會用α1x1表示數字和向量的乘積,而用<x1,x2>表示向量x1,x2的內積(也叫點積,注意與向量叉積的區別)。因此g(x)的表示式嚴格的形式應該是:

g(x)=<w,x>+b

但是上面的式子還不夠好,你回頭看看圖中正樣本和負樣本的位置,想像一下,我不動所有點的位置,而只是把其中一個正樣本點定為負樣本點(也就是把一個點的形狀從圓形變為方形),結果怎麼樣?三條直線都必須移動(因為對這三條直線的要求是必須把方形和圓形的點正確分開)!這說明w不僅跟樣本點的位置有關,還跟樣本的類別有關(也就是和樣本的“標籤”有關)。因此用下面這個式子表示才算完整:

w=α1y1x12y2x2+…+αnynxn(式1)

其中的yi就是第i個樣本的標籤,它等於1或者-1。其實以上式子的那一堆拉格朗日乘子中,只有很少的一部分不等於0(不等於0才對w起決定作用),這部分不等於0的拉格朗日乘子後面所乘的樣本點,其實都落在H1和H2上,也正是這部分樣本(而不需要全部樣本)唯一的確定了分類函式,當然,更嚴格的說,這些樣本的一部分就可以確定,因為例如確定一條直線,只需要兩個點就可以,即便有三五個都落在上面,我們也不是全都需要。這部分我們真正需要的樣本點,就叫做支援(撐)向量!(名字還挺形象吧,他們“撐”起了分界線)

式子也可以用求和符號簡寫一下:

clip_image002

因此原來的g(x)表示式可以寫為:

clip_image002[4]

注意式子中x才是變數,也就是你要分類哪篇文件,就把該文件的向量表示代入到 x的位置,而所有的xi統統都是已知的樣本。還注意到式子中只有xi和x是向量,因此一部分可以從內積符號中拿出來,得到g(x)的式子為:

clip_image002[6]

發現了什麼?w不見啦!從求w變成了求α。

但肯定有人會說,這並沒有把原問題簡化呀。嘿嘿,其實簡化了,只不過在你看不見的地方,以這樣的形式描述問題以後,我們的優化問題少了很大一部分不等式約束(記得這是我們解不了極值問題的萬惡之源)。但是接下來先跳過線性分類器求解的部分,來看看 SVM線上性分類器上所做的重大改進——核函式

SVM-支援向量機詳解(三)

之前一直在討論的線性分類器,器如其名,只能對線性可分的樣本做處理。如果提供的樣本線性不可分,結果很簡單,線性分類器的求解程式會無限迴圈,永遠也解不出來。這必然使得它的適用範圍大大縮小,而它的很多優點我們實在不原意放棄,怎麼辦呢?是否有某種方法,讓線性不可分的資料變得線性可分呢?

有!其思想說來也簡單,來用一個二維平面中的分類問題作例子,你一看就會明白。事先宣告,下面這個例子是網路早就有的,我一時找不到原作者的正確資訊,在此借用,並加進了我自己的解說而已。

例子是下面這張圖:

clip_image001

我們把橫軸上端點a和b之間紅色部分裡的所有點定為正類,兩邊的黑色部分裡的點定為負類。試問能找到一個線性函式把兩類正確分開麼?不能,因為二維空間裡的線性函式就是指直線,顯然找不到符合條件的直線。

但我們可以找到一條曲線,例如下面這一條:

clip_image002

顯然通過點在這條曲線的上方還是下方就可以判斷點所屬的類別(你在橫軸上隨便找一點,算算這一點的函式值,會發現負類的點函式值一定比0大,而正類的一定比0小)。這條曲線就是我們熟知的二次曲線,它的函式表示式可以寫為:

clip_image002[5]

問題只是它不是一個線性函式,但是,下面要注意看了,新建一個向量y和a:

clip_image002[7]

這樣g(x)就可以轉化為f(y)=<a,y>,你可以把y和a分別迴帶一下,看看等不等於原來的g(x)。用內積的形式寫你可能看不太清楚,實際上f(y)的形式就是:

g(x)=f(y)=ay

在任意維度的空間中,這種形式的函式都是一個線性函式(只不過其中的a和y都是多維向量罷了),因為自變數y的次數不大於1。

看出妙在哪了麼?原來在二維空間中一個線性不可分的問題,對映到四維空間後,變成了線性可分的!因此這也形成了我們最初想解決線性不可分問題的基本思路——向高維空間轉化,使其變得線性可分。

而轉化最關鍵的部分就在於找到x到y的對映方法。遺憾的是,如何找到這個對映,沒有系統性的方法(也就是說,純靠猜和湊)。具體到我們的文字分類問題,文字被表示為上千維的向量,即使維數已經如此之高,也常常是線性不可分的,還要向更高的空間轉化。其中的難度可想而知。

小Tips
大家可能一時沒看明白。回想一下我們二維空間裡的函式定義
g(x)=ax+b
變數x是一維的,為什麼說它是二維空間裡的函式呢?因為還有一個變數我們沒寫出來,它的完整形式其實是
y=g(x)=ax+b

y=ax+b

看看,有幾個變數?兩個。那是幾維空間的函式?(作者五歲的弟弟答:五維的。作者:……)
再看看
f(y)=ay
裡面的y是三維的變數,那f(y)是幾維空間裡的函式?(作者五歲的弟弟答:還是五維的。作者:……)

用一個具體文字分類的例子來看看這種向高維空間對映從而分類的方法如何運作,想象一下,我們文字分類問題的原始空間是1000維的(即每個要被分類的文件被表示為一個1000維的向量),在這個維度上問題是線性不可分的。現在我們有一個2000維空間裡的線性函式

f(x)=<w,x>+b

注意向量的右上角有個 ’哦。它能夠將原問題變得可分。式中的 w和x都是2000維的向量,只不過w是定值,而x是變數(好吧,嚴格說來這個函式是2001維的,哈哈),現在我們的輸入呢,是一個1000維的向量x,分類的過程是先把x變換為2000維的向量x,然後求這個變換後的向量x與向量w的內積,再把這個內積的值和b相加,就得到了結果,看結果大於閾值還是小於閾值就得到了分類結果。

你發現了什麼?我們其實只關心那個高維空間裡內積的值,那個值算出來了,分類結果就算出來了。而從理論上說, x是經由x變換來的,因此廣義上可以把它叫做x的函式(有一個x,就確定了一個x,對吧,確定不出第二個),而w是常量,它是一個低維空間裡的常量w經過變換得到的,所以給了一個w 和x的值,就有一個確定的f(x)值與其對應。這讓我們幻想,是否能有這樣一種函式K(w,x),他接受低維空間的輸入值,卻能算出高維空間的內積值<w,x>?

如果有這樣的函式,那麼當給了一個低維空間的輸入x以後,

g(x)=K(w,x)+b

f(x)=<w,x

相關推薦

SVM-支援向量演算法概述

(一)SVM的背景簡介 支援向量機(Support Vector Machine)是Cortes和Vapnik於1995年首先提出的,它在解決小樣本、非線性及高維模式識別中表現出許多特有的優勢,並能夠推廣應用到函式擬合等其他機器學習問題中[10]。 支援向量機方法是建立在

SVM-支援向量演算法概述 ---一篇非常深入淺出介紹SVM的文章

(一)SVM的背景簡介 支援向量機(Support Vector Machine)是Cortes和Vapnik於1995年首先提出的,它在解決小樣本、非線性及高維模式識別中表現出許多特有的優勢,並能夠推廣應用到函式擬合等其他機器學習問題中[10]。 支援向量機方法是建立在

SVM 支援向量演算法-原理篇

> **公號:碼農充電站pro** > **主頁:** 本篇來介紹**SVM 演算法**,它的英文全稱是 *Support Vector Machine*,中文翻譯為**支援向量機**。 之所以叫作支援向量機,是因為該演算法最終訓練出來的模型,由一些**支援向量**決定。所謂的支援向量,也就是能夠決定最終

SVM 支援向量演算法-實戰篇

> **公號:碼農充電站pro** > **主頁:** [上一篇](https://www.cnblogs.com/codeshell/p/14301569.html)介紹了 SVM 的原理和一些基本概念,本篇來介紹如何用 SVM 處理實際問題。 ### 1,SVM 的實現 **SVM 演算法**即可以

機器學習演算法——SVM(支援向量)

文章目錄 1. SVM簡介 2. SVM的一些概念 2.1 函式間隔與幾何間隔 2.2 支援向量 3. SVM模型目標函式與優化 3.1 SVM模型目標函式的推導(線性可分)

斯坦福CS229機器學習筆記-Lecture8- SVM支援向量 之核方法 + 軟間隔 + SMO 演算法

作者:teeyohuang 本文系原創,供交流學習使用,轉載請註明出處,謝謝 宣告:此係列博文根據斯坦福CS229課程,吳恩達主講 所寫,為本人自學筆記,寫成部落格分享出來           博文中部分圖片和公式都來源於CS229官方notes。      

【機器學習演算法-python實現】svm支援向量(3)—核函式

1.背景知識 前面我們提到的資料集都是線性可分的,這樣我們可以用SMO等方法找到支援向量的集合。然而當我們遇到線性不可分的資料集時候,是不是svm就不起作用了呢?這裡用到了一種方法叫做核函式,它將低

SVM支援向量-拉格朗日,對偶演算法的初解

許多地方得SVM講得都很晦澀,不容易理解,最近看到一篇不錯的博文寫得很好,同時加上自己的理解,重新梳理一下知識要點 http://blog.csdn.net/zouxy09/article/details/17291543 一、引入 SVM是個分類器。我們知道,分類的目的

『資料探勘十大演算法 』筆記二:SVM-支援向量

資料探勘Top 10演算法 C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART 支援向量機 支援向量機,英文為Support Ve

SVM支援向量-《機器學習實戰》SMO演算法Python實現(5)

經過前幾篇文章的學習,SVM的優化目標,SMO演算法的基本實現步驟,模型對應引數的選擇,我們已經都有了一定的理解,結合《機器學習實戰》,動手實踐一個基本的SVM支援向量機,來完成一個簡單的二分類任務。建立模型之前,首先看一下我們的資料,然後再用支援向量機實現分類:     

[機器學習]svm支援向量介紹

1 什麼是支援向量機 支援向量機是一種分類器,之所以稱為 機 是因為它會產生一個二值決策結果,即它是一個決策機。 ​​​Support Vector Machine, 一個普通的SVM就是一條直線罷了,用來完美劃分linearly separable的兩類。但這又不是一條

SVM-tutorial】SVM-支援向量綜述

原文地址:https://www.svm-tutorial.com/ (這篇文章是翻譯 Alexandre KOWALCZYK 的SVM tutorial ,這篇tutorial 寫的很詳細,沒有很好的數學背景的同學也可以看的懂,作者細心的從最基礎的知識講起,帶領我們一步步的認識這個複雜

機器學習實戰——SVM支援向量 實現記錄

問題:TypeError: data type not understood alphas = mat(zeros(m,1)) 原因是zeros(())格式不對,更改後: alphas = mat(zeros((m,1))) 問題:關於IDLE中換行,回車前面出現很多空格的情況

SVM(支援向量)

Basically, the support vector machine is a binary learning machine with some highly elegant properties. Given a training sample, the support vector machi

機器學習 (十一) SVM-支援向量

春夜喜雨 好雨知時節,當春乃發生。 隨風潛入夜,潤物細無聲。 野徑雲俱黑,江船火獨明。 曉看紅溼處,花重錦官城。 前言         週末很多城市下開了雨,下雨中也不乏忙忙碌碌的人們,有的天不亮已經忙碌匆

SVM支援向量系列理論(九) 核嶺迴歸

1. 嶺迴歸問題 嶺迴歸就是使用了L2正則化的線性迴歸模型。當碰到資料有多重共線性時(自變良量存在高相關性),我們就會用到嶺迴歸。 嶺迴歸模型的優化策略為: minw    1N∑i(yi−w⋅zi)2+λNwTw&nbs

SVM支援向量系列理論(八) 核邏輯迴歸

kernel 邏輯迴歸(KRL)就是使用Representer Theory在L2正則的邏輯迴歸模型中應用核技巧。 1. Representer Theoem Representer Theoem是說,對於任何一個L2正則化的線性模型,其最優的權重向量 w∗

SVM支援向量系列理論(七) 線性支援向量與L2正則化 Platt模型

7.1 軟間隔SVM等價於最小化L2正則的合頁損失 上一篇 說到, ξi ξ i \xi_i 表示偏離邊界的度量,若樣本點

SVM支援向量系列理論(四) 軟間隔支援向量

4.1 軟間隔SVM的經典問題 4.2 軟間隔SVM的對偶問題 4.2.1 軟間隔SVM的對偶問題學習演算法 4.3 軟間

SVM支援向量系列理論(六) SVM過擬合的原因和SVM模型選擇

6.1 SVM 過擬合的原因 實際我們應用的SVM模型都是核函式+軟間隔的支援向量機,那麼,有以下原因導致SVM過擬合: 選擇的核函式過於powerful,比如多項式核中的Q設定的次數過高 要求的間隔過大,即在軟間隔支援向量機中C的引數過大時,表示比較重視間隔,堅持要資