對SVM的我的理解---淺顯易懂

原文:http://blog.csdn.net/arthur503/article/details/19966891算法

以前覺得SVM很強大很神祕,本身瞭解了以後發現原理並不難,不過,「大師的功力在於將idea使用數學定義它,使用物理描述它」,這一點在看SVM的數學部分的時候已經深入的體會到了,最小二乘法、梯度降低法、拉格朗日乘子、對偶問題等等被搞的焦頭爛額。在培樂園聽了講課以後纔算比較清晰的瞭解了整個數學推導的前因後果。編輯器

1. 爲何必定要研究線性分類?

首先說一下爲何對數據集必定要說線性可分或線性不可分,難道不能夠非線性分開嗎?想要非線性分開固然能夠,實際上SVM只是把原來線性不可分的數據點映射到一個新的空間,轉換爲在新空間中線性可分數據來進行分類的。若是返回到原來數據的空間中,其實仍是非線性分開的。可是,那爲何不直接在原數據空間中進行非線性分開,而是非要轉到新的空間進行線性分開呢?首先,非線性分開比線性分開要複雜不少。線性分開只要一條直線或一個平面之類的就能夠了,能夠說是曲線中最簡單的表現形式。而非線性分開的狀況就多了去了。僅就二維空間而言,曲線、折線、雙曲線、圓錐曲線、波浪線,以及毫無規律的各類其餘曲線太多,沒有辦法進行統一的處理。即使可以針對某一個具體問題處理獲得了非線性分類結果,也沒法很好的推廣到其餘情形,這樣,每針對一個具體問題就要數學家專門來建個曲線模型,太麻煩並且也沒有那麼多時間精力。所以,採用線性分類一是由於它簡單,性質很容易研究透徹;二是由於它推廣能力強,研究透了以後,其餘全部問題都迎刃而解,無需創建其餘模型。因此,雖然SVM多了將原始數據映射到新空間這一步驟,看起來增長了工做量,並且如何去尋找新的映射空間看着也不是很容易,可是,整體來講,研究透了以後就會比其餘方法省不少力氣。ide

2. SVM的思想是什麼?

2.1 硬間隔支持向量機

SVM中最關鍵的思想之一就是引入和定義了「間隔」這個概念。這個概念自己很簡單,以二維空間爲例,就是點到分類直線之間的距離。假設直線爲y=wx+b,那麼只要使全部正分類點到該直線的距離與全部負分類點到該直線的距離的總和達到最大,這條直線就是最優分類直線。這樣,原問題就轉化爲一個約束優化問題,能夠直接求解。這叫作硬間隔最大化,獲得的SVM模型稱做硬間隔支持向量機函數

 

2.2 軟間隔支持向量機

 

可是新問題出現了,在實際應用中,咱們獲得的數據並不老是完美的線性可分的,其中可能會有個別噪聲點,他們錯誤的被分類到了其餘類中。若是將這些特異的噪點去除後,能夠很容易的線性可分。可是,咱們對於數據集中哪些是噪聲點倒是不知道的,若是以以前的方法進行求解,會沒法進行線性分開。是否是就沒辦法了呢?假設在y=x+1直線上下分爲兩類,若兩類中各有對方的幾個噪點,在人的眼中,仍然是能夠將兩類分開的。這是由於在人腦中是能夠容忍必定的偏差的,仍然使用y=x+1直線分類,能夠在最小偏差的狀況下進行最優的分類。一樣的道理,咱們在SVM中引入偏差的概念,將其稱做「鬆弛變量」。經過加入鬆弛變量,在原距離函數中須要加入新的鬆弛變量帶來的偏差,這樣,最終的優化目標函數變成了兩個部分組成:距離函數和鬆弛變量偏差。這兩個部分的重要程度並非相等的,而是須要依據具體問題而定的,所以,咱們加入權重參數C,將其與目標函數中的鬆弛變量偏差相乘,這樣,就能夠經過調整C來對兩者的係數進行調和。若是咱們可以容忍噪聲,那就把C調小,讓他的權重降下來,從而變得不重要;反之,咱們須要很嚴格的噪聲小的模型,則將C調大一點,權重提高上去,變得更加劇要。經過對參數C的調整,能夠對模型進行控制。這叫作軟間隔最大化,獲得的SVM稱做軟間隔支持向量機性能

 

2.3 非線性支持向量機

 

以前的硬間隔支持向量機和軟間隔支持向量機都是解決線性可分數據集或近似線性可分數據集的問題的。可是若是噪點不少,甚至會形成數據變成了線性不可分的,那該怎麼辦?最多見的例子是在二維平面笛卡爾座標系下,以原點(0,0)爲圓心,以1爲半徑畫圓,則圓內的點和圓外的點在二維空間中是確定沒法線性分開的。可是,學過初中幾何就知道,對於圓圈內(含圓圈)的點:x^2+y^2≤1,圓圈外的則x^2+y^2>1。咱們假設第三個維度:z=x^2+y^2,那麼在第三維空間中,能夠經過z是否大於1來判斷該點是否在圓內仍是圓外。這樣,在二維空間中線性不可分的數據在第三維空間很容易的線性可分了。這就是非線性支持向量機學習

這是SVM很是重要的思想。對於在N維空間中線性不可分的數據,在N+1維以上的空間會有更大到可能變成線性可分的(但並非必定會在N+1維上線性可分。維度越高,線性可分的可能性越大,但並不徹底確保)。所以,對於線性不可分的數據,咱們能夠將它映射到線性可分的新空間中,以後就能夠用剛纔說過的硬間隔支持向量機或軟間隔支持向量機來進行求解了。這樣,咱們將原問題變成了如何對原始數據進行映射,才能使其在新空間中線性可分。在上面的例子中,經過觀察可使用圓的方程來進行映射,但在實際數據中確定沒有這麼簡單。若是均可以觀察出規律來,那就不須要機器來作SVM了。。測試

實際中,對某個實際問題函數來尋找一個合適的空間進行映射是很是困難的,幸運的是,在計算中發現,咱們須要的只是兩個向量在新的映射空間中的內積結果,而映射函數究竟是怎麼樣的其實並不須要知道。這一點不太好理解,有人會問,既然不知道映射函數,那怎麼能知道映射後在新空間中的內積結果呢?答案實際上是能夠的。這就須要引入了核函數的概念。核函數是這樣的一種函數:仍然以二維空間爲例,假設對於變量x和y,將其映射到新空間的映射函數爲φ,則在新空間中,兩者分別對應φ(x)和φ(y),他們的內積則爲<φ(x),φ(y)>。咱們令函數Kernel(x,y)=<φ(x),φ(y)>=k(x,y),能夠看出,函數Kernel(x,y)是一個關於x和y的函數!而與φ無關!這是一個多麼好的性質!咱們不再用管φ具體是什麼映射關係了,只須要最後計算Kernel(x,y)就能夠獲得他們在高維空間中的內積,這樣就能夠直接帶入以前的支持向量機中計算!真是媽媽不再用擔憂個人學習了。。優化

獲得這個使人歡欣鼓舞的函數以後,咱們還須要冷靜一下,問問:這個Kernel函數從哪來?他又是怎麼獲得的?真的能夠解決全部映射到高維空間的問題嗎?ui

這個問題我試着回答一下,若是我理解對的話。核函數不是很好找到,通常是由數學家反向推導出來或拼湊出來的。如今知道的有多項式核函數、高斯核函數、字符串核函數等。其中,高斯核函數對應的支持向量機是高斯徑向基函數(RBF),是最經常使用的核函數。atom

RBF核函數能夠將維度擴展到無窮維的空間,所以,理論上講能夠知足一切映射的需求。爲何會是無窮維呢?我之前都不太明白這一點。後來老師講到,RBF對應的是泰勒級數展開,在泰勒級數中,一個函數能夠分解爲無窮多個項的加和,其中,每個項能夠看作是對應的一個維度,這樣,原函數就能夠看作是映射到了無窮維的空間中。這樣,在實際應用中,RBF是相對最好的一個選擇。固然,若是有研究的話,還能夠選用其餘核函數,可能會在某些問題上表現更好。可是,RBF是在對問題不瞭解的狀況下,對最普遍問題效果都很不錯的核函數。所以,使用範圍也最廣。

這樣,對於線性不可分的數據,也能夠經過RBF等核函數來映射到高維,甚至無窮維的空間中而變得線性可分,經過計算間隔和鬆弛變量等的最大化,能夠對問題進行求解。固然,在求解中,還有一些數學的技巧來簡化運算,例如,使用拉格朗日乘子來將原問題變換爲對偶問題,能夠簡化計算。這些在實驗中用不到,並且數學原理有點困難,就先不講了。

 

==========

原文:http://blog.csdn.net/viewcode/article/details/12840405

SVM的文章介紹多如牛毛,不少介紹都很是詳盡,而我卻一點都不開竅,始終沒法理解其中的奧祕。

此次,我要用本身粗淺的語言,來撩開我與SVM之間的面紗。

 

1. SVM是要解決什麼問題?

以前,衝上來就看SVM的應用,簡介,最優化計算方法等。從沒認真想過SVM要解決什麼問題。
 
下面一幅是經常使用的圖,來解釋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值須要屢次嘗試,獲取一個較好的值。 這個裏面可分析還不少,後面再學習。
 
核函數做用:將徹底不可分問題,轉換爲可分或達到近似可分的狀態。
鬆弛變量:解決近似可分的問題。
相關文章
相關標籤/搜索