想寫一下我本身對於核函數的理解,雖然並不知道核函數的發明過程,但我想以本身的理解,來重現這個過程。算法
核函數的應用很廣,在SVM上的應用只是冰山一角。即使如此,我仍是假設發明人是在解決SVM問題的過程了發明的核函數。函數
對於一個二分類問題,有一個理想的數據集,假設它是線性可分的,這時直接應用SVM算法便可進行分類。優化
假設如今的數據集不是線性可分的,如圖1所示:spa
該數據集在二維空間中,每一個數據點均可用一個二維向量(x1,x2)'''來表示(3個單引號'''表示轉置)。咱們能夠用一個橢圓形狀的超平面在該2維空間中對數據集進行分類,咱們寫出橢圓的通常方程:rem
若是咱們令:it
其中:class
你會發現,2維向量x被映射成另外一個5維向量z後,分類超平面是一個線性超平面,數據點變得線性可分!也便是下面的變換:技巧
也就是說,數據集在二維空間中線性不可分,若想實現線性可分,須把該數據集映射到一個5維空間中!考慮SVM的的原始優化問題:im
(式中的點號表明內積運算)式(5)中的xi對應數據集中的樣本點,如今在二維空間中。咱們要實現該數據集線性可分,須要把每一個點都映射到5維空間中去。也就變成了下式:總結
根據式(6)能夠推知,對於一個線性不可分的數據集,咱們只要把xi替換成相應的映射後的點就能夠了。因此,原來二維空間中的分類決策函數:
也就變成了5維空間中的分類決策函數:
好了,由於x的映射函數已知,因此咱們就能輕鬆根據上式獲得決策超平面了。
看似問題到這裏就結束了,可是,考慮到本例中只是實現二維空間中數據的線性可分,就把數據映射到了5維空間。想像若是數據自己的維度就很高,那映射後的空間維度會更高,甚至是無限維!咱們該怎麼求這個映射函數呢?即使知道了這個映射函數,也無法算啊,由於它是無限維的。因此,咱們應該找一個合適的二元函數,它的輸入是原空間的兩個向量,它的輸出是映射到高維空間的兩個向量的內積!給這個合適的二元函數起個霸氣的名字,就叫作核函數。
爲何這樣定義?對照(8)式中的兩個映射函數的內積來思考一下:咱們要求出(8)式兩個映射函數的內積,因此要構造一個二元函數,它的輸入就是原二維空間中的x和xi兩個向量,它的輸出就是映射到5維空間的兩個向量的內積。
這樣,咱們就避免了求映射函數,只經過一個核函數就能夠在低維空間完成高維空間中才能完成的事!
(至此,有些童鞋會想,既然映射後的向量的內積很差求,你咋知道你構造的核函數的值就是映射後的向量的內積?!一下子會說這個問題。)
先考慮一個簡單的例子:
如今有兩個二維空間中的數據點x=(x1,x2)'''和y=(y1,y2)''',考慮下面這個二元函數:
把x,y表明(9)式,解之得:
你會發現,最後的函數值居然等於兩個向量p和q的內積,並且兩個向量分別是二維空間數據點x和y在三維空間中的映射!想到剛纔定義的核函數,咱們很容易想到,f(x,y)就是一個核函數。它給出了一個二維的表達式,使得x,y代入便可求值,而再也不須要先把x,y映射成3維空間中的向量p,q,再求內積。
這也正是咱們定義核函數的目的,即雖然沒有顯式地給出原空間中向量的映射函數,但卻達到了能夠在原空間中計算映射後的向量內積的目的!
回到咱們剛纔討論的問題,對於(8)式,假設我不知道這個5維的映射是啥,但我要求映射後向量的內積,因此我要構造一個核函數K(x,xi)來代替映射後向量的內積,便可獲得下面的決策分類面:
那麼問題來了:
有幾個經典的核函數可供選用,如:多項式核函數,高斯核函數等。固然你也能夠本身構造核函數,但也不是任意一個函數就能夠當作核函數的,須要知足Mercer條件(有興趣的童鞋能夠本身研究一下)。
我沒專門研究過,我也不知道本身構造的核函數必定能把數據點在高維空間中線性地分開。可是你能夠選擇上面提到的經常使用的核函數,選擇合適的參數,就能使得原空間中的數據點在高維空間中變得線性可分。至於爲何,我是這樣理解的:
經常使用的核函數把原空間的數據映射到了高維空間中,使得數據變得「更容易」線性可分,考慮下圖所示的例子:
二維空間中的點只能用非線性的超平面才能分開,但把數據映射到高維空間中,就能夠用一個線性的平面給分開了。雖然更高維的畫面沒法腦補,可是能夠參考咱們在文章開始舉的橢圓方程的例子。即空間的維度越高,數據越容易線性可分。
總結一下:
在SVM的應用中,若是數據點在原空間中不是線性可分的,理想的作法是找到一個映射函數把數據映射到高維空間中,而後再進行分類。可是,映射後的目標空間每每是很高維甚至是無限維的,咱們須要找到一個函數來代替求高維空間中向量內積的運算,咱們命名它爲核函數。通常的作法都是選擇經常使用的核函數來使用,固然,你也能夠本身構造核函數,前提是要知足Mercer條件。核函數不僅應用在SVM中,只要有相似需求的地方均可以考慮使用核技巧。