对SVM的个人理解
之前以為SVM很強大很神秘,自己了解了之后發(fā)現(xiàn)原理并不難,不過,“大師的功力在于將idea使用數(shù)學定義它,使用物理描述它”,這一點在看SVM的數(shù)學部分的時候已經深刻的體會到了,最小二乘法、梯度下降法、拉格朗日乘子、對偶問題等等被搞的焦頭爛額。在培樂園聽了講課之后才算比較清晰的了解了整個數(shù)學推導的來龍去脈。
1. 為什么一定要研究線性分類?
首先說一下為什么對數(shù)據(jù)集一定要說線性可分或線性不可分,難道不可以非線性分開嗎?想要非線性分開當然可以,實際上SVM只是把原來線性不可分的數(shù)據(jù)點映射到一個新的空間,轉換為在新空間中線性可分數(shù)據(jù)來進行分類的。如果返回到原來數(shù)據(jù)的空間中,其實還是非線性分開的。但是,那為什么不直接在原數(shù)據(jù)空間中進行非線性分開,而是非要轉到新的空間進行線性分開呢?首先,非線性分開比線性分開要復雜很多。線性分開只要一條直線或一個平面之類的就可以了,可以說是曲線中最簡單的表現(xiàn)形式。而非線性分開的情況就多了去了。僅就二維空間而言,曲線、折線、雙曲線、圓錐曲線、波浪線,以及毫無規(guī)律的各種其他曲線太多,沒有辦法進行統(tǒng)一的處理。即便能夠針對某一個具體問題處理得到了非線性分類結果,也無法很好的推廣到其他情形,這樣,每針對一個具體問題就要數(shù)學家專門來建個曲線模型,太麻煩而且也沒有那么多時間精力。因此,采用線性分類一是因為它簡單,性質很容易研究透徹;二是因為它推廣能力強,研究透了之后,其他所有問題都迎刃而解,無需建立其他模型。所以,雖然SVM多了將原始數(shù)據(jù)映射到新空間這一步驟,看起來增加了工作量,而且如何去尋找新的映射空間看著也不是很容易,但是,總體來說,研究透了之后就會比其他方法省很多力氣。
2. SVM的思想是什么?
2.1 硬間隔支持向量機
SVM中最關鍵的思想之一就是引入和定義了“間隔”這個概念。這個概念本身很簡單,以二維空間為例,就是點到分類直線之間的距離。假設直線為y=wx+b,那么只要使所有正分類點到該直線的距離與所有負分類點到該直線的距離的總和達到最大,這條直線就是最優(yōu)分類直線。這樣,原問題就轉化為一個約束優(yōu)化問題,可以直接求解。這叫做硬間隔最大化,得到的SVM模型稱作硬間隔支持向量機。
2.2 軟間隔支持向量機
但是新問題出現(xiàn)了,在實際應用中,我們得到的數(shù)據(jù)并不總是完美的線性可分的,其中可能會有個別噪聲點,他們錯誤的被分類到了其他類中。如果將這些特異的噪點去除后,可以很容易的線性可分。但是,我們對于數(shù)據(jù)集中哪些是噪聲點卻是不知道的,如果以之前的方法進行求解,會無法進行線性分開。是不是就沒辦法了呢?假設在y=x+1直線上下分為兩類,若兩類中各有對方的幾個噪點,在人的眼中,仍然是可以將兩類分開的。這是因為在人腦中是可以容忍一定的誤差的,仍然使用y=x+1直線分類,可以在最小誤差的情況下進行最優(yōu)的分類。同樣的道理,我們在SVM中引入誤差的概念,將其稱作“松弛變量”。通過加入松弛變量,在原距離函數(shù)中需要加入新的松弛變量帶來的誤差,這樣,最終的優(yōu)化目標函數(shù)變成了兩個部分組成:距離函數(shù)和松弛變量誤差。這兩個部分的重要程度并不是相等的,而是需要依據(jù)具體問題而定的,因此,我們加入權重參數(shù)C,將其與目標函數(shù)中的松弛變量誤差相乘,這樣,就可以通過調整C來對二者的系數(shù)進行調和。如果我們能夠容忍噪聲,那就把C調小,讓他的權重降下來,從而變得不重要;反之,我們需要很嚴格的噪聲小的模型,則將C調大一點,權重提升上去,變得更加重要。通過對參數(shù)C的調整,可以對模型進行控制。這叫做軟間隔最大化,得到的SVM稱作軟間隔支持向量機。
2.3 非線性支持向量機
之前的硬間隔支持向量機和軟間隔支持向量機都是解決線性可分數(shù)據(jù)集或近似線性可分數(shù)據(jù)集的問題的。但是如果噪點很多,甚至會造成數(shù)據(jù)變成了線性不可分的,那該怎么辦?最常見的例子是在二維平面笛卡爾坐標系下,以原點(0,0)為圓心,以1為半徑畫圓,則圓內的點和圓外的點在二維空間中是肯定無法線性分開的。但是,學過初中幾何就知道,對于圓圈內(含圓圈)的點:x^2+y^2≤1,圓圈外的則x^2+y^2>1。我們假設第三個維度:z=x^2+y^2,那么在第三維空間中,可以通過z是否大于1來判斷該點是否在圓內還是圓外。這樣,在二維空間中線性不可分的數(shù)據(jù)在第三維空間很容易的線性可分了。這就是非線性支持向量機。
這是SVM非常重要的思想。對于在N維空間中線性不可分的數(shù)據(jù),在N+1維以上的空間會有更大到可能變成線性可分的(但并不是一定會在N+1維上線性可分。維度越高,線性可分的可能性越大,但并不完全確保)。因此,對于線性不可分的數(shù)據(jù),我們可以將它映射到線性可分的新空間中,之后就可以用剛才說過的硬間隔支持向量機或軟間隔支持向量機來進行求解了。這樣,我們將原問題變成了如何對原始數(shù)據(jù)進行映射,才能使其在新空間中線性可分。在上面的例子中,通過觀察可以使用圓的方程來進行映射,但在實際數(shù)據(jù)中肯定沒有這么簡單。如果都可以觀察出規(guī)律來,那就不需要機器來做SVM了。。
實際中,對某個實際問題函數(shù)來尋找一個合適的空間進行映射是非常困難的,幸運的是,在計算中發(fā)現(xiàn),我們需要的只是兩個向量在新的映射空間中的內積結果,而映射函數(shù)到底是怎么樣的其實并不需要知道。這一點不太好理解,有人會問,既然不知道映射函數(shù),那怎么能知道映射后在新空間中的內積結果呢?答案其實是可以的。這就需要引入了核函數(shù)的概念。核函數(shù)是這樣的一種函數(shù):仍然以二維空間為例,假設對于變量x和y,將其映射到新空間的映射函數(shù)為φ,則在新空間中,二者分別對應φ(x)和φ(y),他們的內積則為<φ(x),φ(y)>。我們令函數(shù)Kernel(x,y)=<φ(x),φ(y)>=k(x,y),可以看出,函數(shù)Kernel(x,y)是一個關于x和y的函數(shù)!而與φ無關!這是一個多么好的性質!我們再也不用管φ具體是什么映射關系了,只需要最后計算Kernel(x,y)就可以得到他們在高維空間中的內積,這樣就可以直接帶入之前的支持向量機中計算!真是媽媽再也不用擔心我的學習了。。
得到這個令人歡欣鼓舞的函數(shù)之后,我們還需要冷靜一下,問問:這個Kernel函數(shù)從哪來?他又是怎么得到的?真的可以解決所有映射到高維空間的問題嗎?
這個問題我試著回答一下,如果我理解對的話。核函數(shù)不是很好找到,一般是由數(shù)學家反向推導出來或拼湊出來的。現(xiàn)在知道的有多項式核函數(shù)、高斯核函數(shù)、字符串核函數(shù)等。其中,高斯核函數(shù)對應的支持向量機是高斯徑向基函數(shù)(RBF),是最常用的核函數(shù)。
RBF核函數(shù)可以將維度擴展到無窮維的空間,因此,理論上講可以滿足一切映射的需求。為什么會是無窮維呢?我以前都不太明白這一點。后來老師講到,RBF對應的是泰勒級數(shù)展開,在泰勒級數(shù)中,一個函數(shù)可以分解為無窮多個項的加和,其中,每一個項可以看做是對應的一個維度,這樣,原函數(shù)就可以看做是映射到了無窮維的空間中。這樣,在實際應用中,RBF是相對最好的一個選擇。當然,如果有研究的話,還可以選用其他核函數(shù),可能會在某些問題上表現(xiàn)更好。但是,RBF是在對問題不了解的情況下,對最廣泛問題效果都很不錯的核函數(shù)。因此,使用范圍也最廣。
這樣,對于線性不可分的數(shù)據(jù),也可以通過RBF等核函數(shù)來映射到高維,甚至無窮維的空間中而變得線性可分,通過計算間隔和松弛變量等的最大化,可以對問題進行求解。當然,在求解中,還有一些數(shù)學的技巧來簡化運算,例如,使用拉格朗日乘子來將原問題變換為對偶問題,可以簡化計算。這些在實驗中用不到,而且數(shù)學原理有點困難,就先不講了。
總結
- 上一篇: 电容屏:为什么带手套无法进行操作手机?
- 下一篇: 使用libsvm对MNIST数据集进行实