支持向量機(Support Vector Machine)是Cortes和Vapnik於1995年首先提出的,它在解決小樣本、非線性及高維模式識別中表現出許多特有的優點,並可以推廣應用到函數擬合等其餘機器學習問題中[10]。
支持向量機方法是創建在統計學習理論的VC 維理論和結構風險最小原理基礎上的,根據有限的樣本信息在模型的複雜性(即對特定訓練樣本的學習精度,Accuracy)和學習能力(即無錯誤地識別任意樣本的能力)之間尋求最佳折衷,以期得到最好的推廣能力[14](或稱泛化能力)。
html
以上是常常被有關SVM 的學術文獻引用的介紹,有點八股,我來逐一分解並解釋一下。算法
Vapnik是統計機器學習的大牛,這想必都不用說,他出版的《Statistical Learning Theory》是一本完整闡述統計機器學習思想的名著。在該書中詳細的論證了統計機器學習之因此區別於傳統機器學習的本質,就在於統計機器學習可以精確的給出學習效果,可以解答須要的樣本數等等一系列問題。與統計機器學習的精密思惟相比,傳統的機器學習基本上屬於摸着石頭過河,用傳統的機器學習方法構造分類系統徹底成了一種技巧,一我的作的結果可能很好,另外一我的差很少的方法作出來卻不好,缺少指導和原則。
所謂VC維是對函數類的一種度量,能夠簡單的理解爲問題的複雜程度,VC維越高,一個問題就越複雜。正是由於SVM關注的是VC維,後面咱們能夠看到,SVM解決問題的時候,和樣本的維數是無關的(甚至樣本是上萬維的均可以,這使得SVM很適合用來解決文本分類的問題,固然,有這樣的能力也由於引入了核函數)。機器學習
結構風險最小聽上去文縐縐,其實說的也無非是下面這回事:
機器學習本質上就是一種對問題真實模型的逼近(咱們選擇一個咱們認爲比較好的近似模型,這個近似模型就叫作一個假設),但毫無疑問,真實模型必定是不知道的(若是知道了,咱們幹嘛還要機器學習?直接用真實模型解決問題不就能夠了?對吧,哈哈)既然真實模型不知道,那麼咱們選擇的假設與問題真實解之間究竟有多大差距,咱們就無法得知。好比說咱們認爲宇宙誕生於150億年前的一場大爆炸,這個假設可以描述不少咱們觀察到的現象,但它與真實的宇宙模型之間還相差多少?誰也說不清,由於咱們壓根就不知道真實的宇宙模型究竟是什麼。
這個與問題真實解之間的偏差,就叫作風險(更嚴格的說,偏差的累積叫作風險)。咱們選擇了一個假設以後(更直觀點說,咱們獲得了一個分類器之後), 真實偏差無從得知,但咱們能夠用某些能夠掌握的量來逼近它。最直觀的想法就是使用分類器在樣本數據上的分類的結果與真實結果(由於樣本是已經標註過的數據,是準確的數據)之間的差值來表示。這個差值叫作經驗風險Remp(w)。之前的機器學習方法都把經驗風險最小化做爲努力的目標,但後來發現不少分類函數可以在樣本集上輕易達到100%的正確率,在真實分類時卻一塌糊塗(即所謂的推廣能力差,或泛化能力差)。此時的狀況即是選擇了一個足夠複雜的分類函數(它的VC維很高),可以精確的記住每個樣本,但對樣本以外的數據一概分類錯誤。回頭看看經驗風險最小化原則咱們就會發現,此原則適用的大前提是經驗風險要確實可以逼近真實風險才行(行話叫一致),但實際上能逼近麼?答案是不能,由於樣本數相對於現實世界要分類的文本數來講簡直九牛一毛,經驗風險最小化原則只在這佔很小比例的樣本上作到沒有偏差,固然不能保證在更大比例的真實文本上也沒有偏差。ide
統計學習所以而引入了泛化偏差界的概念,就是指真實風險應該由兩部份內容刻畫,一是經驗風險,表明了分類器在給定樣本上的偏差;二是置信風險,表明了咱們在多大程度上能夠信任分類器在未知文本上分類的結果。很顯然,第二部分是沒有辦法精確計算的,所以只能給出一個估計的區間,也使得整個偏差只能計算上界,而沒法計算準確的值(因此叫作泛化偏差界,而不叫泛化偏差)。
置信風險與兩個量有關,一是樣本數量,顯然給定的樣本數量越大,咱們的學習結果越有可能正確,此時置信風險越小;二是分類函數的VC維,顯然VC維越大,推廣能力越差,置信風險會變大。
泛化偏差界的公式爲:R(w)≤Remp(w)+Ф(n/h)
公式中R(w)就是真實風險,Remp(w)就是經驗風險,Ф(n/h)就是置信風險。統計學習的目標從經驗風險最小化變爲了尋求經驗風險與置信風險的和最小,即結構風險最小。
SVM正是這樣一種努力最小化結構風險的算法。
函數
SVM其餘的特色就比較容易理解了。
小樣本,並非說樣本的絕對數量少(實際上,對任何算法來講,更多的樣本幾乎老是能帶來更好的效果),而是說與問題的複雜度比起來,SVM算法要求的樣本數是相對比較少的。
非線性,是指SVM擅長應付樣本數據線性不可分的狀況,主要經過鬆弛變量(也有人叫懲罰變量)和核函數技術來實現,這一部分是SVM的精髓,之後會詳細討論。多說一句,關於文本分類這個問題到底是不是線性可分的,尚沒有定論,所以不能簡單的認爲它是線性可分的而做簡化處理,在水落石出以前,只好先當它是線性不可分的(反正線性可分也不過是線性不可分的一種特例而已,咱們向來不怕方法過於通用)。
高維模式識別是指樣本維數很高,例如文本的向量表示,若是沒有通過另外一系列文章(《文本分類入門》)中提到過的降維處理,出現幾萬維的狀況很正常, 其餘算法基本就沒有能力應付了,SVM卻能夠,主要是由於SVM 產生的分類器很簡潔,用到的樣本信息不多(僅僅用到那些稱之爲「支持向量」的樣本,此爲後話),使得即便樣本維數很高,也不會給存儲和計算帶來***煩(相對照而言,kNN算法在分類時就要用到全部樣本,樣本數巨大,每一個樣本維數再一高,這日子就無法過了……)。
學習
下一節開始正式討論SVM。別嫌我說得太詳細哦。spa
轉自:http://blog.sina.com.cn/s/blog_5f853eb10100qbb9.htmlorm