對支持向量機SVM的總結和理解篇(六)

之前以爲SVM很強大很神祕,自己瞭解了之後發現原理並不難,不過,“大師的功力在於將idea使用數學定義它,使用物理描述它”,這一點在看SVM的數學部分的時候已經深刻的體會到了,最小二乘法、梯度下降法、拉格朗日乘子、對偶問題等等被搞的焦頭爛額。靜下心來研究纔算比較清晰的瞭解了整個數學推導的來龍去脈。

1. 爲什麼一定要研究線性分類?

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

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函數從哪來?他又是怎麼得到的?真的可以解決所有映射到高維空間的問題嗎?

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

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

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




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