大家好,歡迎大家閱讀周二機器學習專題,今天的這篇文章依然會講SVM模型。
也許大家可能已經看膩了SVM模型了,覺得我是不是寫不出新花樣來,翻來覆去地炒冷飯。實際上也的確沒什么新花樣了,不出意外的話這是本專題最后一篇文章了。下周我們就要開始深度學習之旅了,我相信很多同學期待這一天已經很久了,實際上我也一樣,因為這個專題里講的大部分內容已經只在面試環節會用到,而我已經很久沒有面試了。所以讓我們收拾一下激動的心情,來把SVM最后剩下的一點內容講完。
雖然只剩下最后一點內容了,但是今天的內容非常重要,可以說是SVM模型面試的核心終點。說到SVM可能對偶問題、拉格朗日面試官不一定會問你,可能他自己也不一定會,但是今天要講的核函數是一定會問的。因為它表面上看起來是SVM最重要的內容,實際上我當時在剛轉行准備面試的時候,SVM模型相關的內容一概不知,就知道核函數,所以我想大家應該能夠體會到這里面的深意。
核函數究竟是什么
首先我們來介紹一下核函數的概念,可能大家會很好奇,明明我們已經把SVM模型的原理完整推導完了,怎么又冒出來一個核函數。實際上核函數非常精彩,它對於SVM也非常重要,因為它奠定了SVM的“江湖地位”,也可以說是SVM模型最大的特性。
在介紹核函數之前,我們先來看一個問題,這個問題在機器學習的歷史上非常有名,叫做亦或問題。我們都知道,在二進制當中有一個操作叫做亦或操作。亦或操作其實很簡單,就是如果兩個數相同返回的結果就是0,否則就返回1。如果我們的數據是類似亦或組成的,就會是這樣一個形狀:

我們觀察一下上面這個圖,會發現一個問題,就是我們無論如何也不可能找到一條線把上面這個分類完成。因為一條線只能分出兩個區域,但是上面這個圖明顯有四個區域。
那如果我們把上面的數據映射到更高的維度當中,上圖是二維的圖像,我們把它映射到三維當中,就可以使用一個平面將樣本區分開了。也就是說通過一個映射函數,將樣本從n維映射到n+1或者更高的維度,使得原本線性不可分的數據變成線性可分,這樣我們就解決了一些原本不能解決的問題。

所以核函數是什么?是一系列函數的統稱,這些函數的輸入是樣本x,輸出是一個映射到更高維度的樣本。大部分能實現這一點的函數都可以認為是核函數(不完全准確,只是為了理解方便),當然一些稀奇古怪的函數雖然是核函數,但是對我們的價值可能並不大,所以我們也很少用,常用的核函數還是只有少數幾種。
使用方法
現在我們已經知道核函數是什么了,那么它又該如何使用呢?
這個問題也不難,數學上比較困難的是表示問題,一個問題被描述以及表示清楚可能是最難的,當表示出來了之后把它解出來可能就要簡單很多了。所以我們先來表示問題,用一個字母來表示核函數。前面已經說過了,核函數的輸入是樣本x,所以映射之后的樣本就是
。
還記得我們上次推導到最后的公式嗎?我們把它寫出來,大家回顧一下。

我們要做的就是把核函數代入進去,僅此而已,代入進去之后,就會得到:

這里有一個小問題,我們前面說了函數會把x映射到更高的維度。比如x本身是10維的,我們用了函數之后給映射到1000維了,當然它的線性不可分的問題可能解決了,但是這會帶來另外一個問題,就是計算的復雜度增加了。因為原本
本來只需要10次計算,但現在映射了之后,需要1000次計算才可以得到結果。這不符合我們想要白嫖不想花錢的心理,所以我們對核函數做了一些限制,只有可以白嫖的映射函數才被稱為核函數。
我們把需要滿足的條件寫出來,其實很簡單。我們把滿足條件的核函數稱為K,那么K應該滿足:

也就是說K對的結果進行計算等價於映射之后的結果再進行點乘操作,這樣就可以在計算復雜度不變的情況下完成映射。其實對於核函數是有數學上的定義的,這里我沒放出來,一個是覺得表示太復雜用不到,另外一個是在面試的時候其實也不會問到這么細,我們只需要知道它的性質就可以了。因為常見使用的核函數來來回回基本上也就那么幾種,我們記住它們就OK了。
下面我們就來看一下常見的核函數,大概有這么四種:
-
線性核函數,其實就是沒有核函數。我們表示出來就是 -
多項式核函數,它等價於一個多項式變換: ,這里的
,b和d都是我們設置的參數
-
高斯核,這種核函數使用頻率很高, -
sigmoid核,它的公式是:
我們使用核函數的方法很簡單,就是用K這個函數計算的值來代替原本
的結果,對於SVM模型的推演並不產生影響。這也是為什么我們在上一篇文章當中用SMO算法來推導
優化方法時候,要令
的原因,其實就是在為后面講解核函數做鋪墊。
我個人覺得和前面硬間隔軟間隔以及對偶問題和SMO算法的推導比起來,核函數的原理應該算是其中最簡單的。即使你完全不理解SVM模型的原理,也可以搞得懂核函數。所以大家看這篇文章應該是沒有太大壓力的。
文章到這里就結束了,如果喜歡的話,希望可以來一波三連支持,再次感謝大家的閱讀(關注、轉發、點贊)。
本文使用 mdnice 排版
- END -{{uploading-image-326893.png(uploading...)}}