svm(支持向量機)的訓練時用到了一些核函數(kernel function),怎麼樣正確理解它們的作用?


SVM推導到最後的拉格朗日對偶函數為,其中h(x)就是其他答案所說的把x映射到了高維空間,達到可分(否則原對偶函數應把h(x)換成x):

所以我們最後的判定函數表達式即為(eta 可以解出來):

現在問題就來了,計算<h(x),h(x_i)>的成本很大,所有就有人想到了一個好辦法就是找到一個合適的函數K,使得

這樣我們只需計算<x,x_i>即可,大大減少了計算複雜度,而這個K就是kernel function。然後kernel函數也不止一個,比如:

參考書目:《The Elements of Statistical Learning》


核函數說白了是為了簡化計算,但這也是svm最重要的一環,大致說下前後:svm是分類器,解決線性可分,線性不可分,非線性情況。解決非線性問題的思想是將【在低維不可分的樣本】映射f到【在高維線性可分】,例如在二維平面不可分,通過映射f到三維就可分 。在求解【模型】時需要計算映射f,但是一個樣本n維不可分,要映射到很高的維上才可分,這樣計算複雜度會非常大,會造成【維災難】 。科學家就想出了【核函數】用來簡化計算,不用再求映射f,只要在低維上求出任意某個符合條件的核函數就可以了。svm比其他的分類器更高效的原因就在於通過核函數可以以低的計算複雜度構造更複雜的分類器,來求解更複雜的問題 。核函數有多種類型,區別在於收斂方式不同,不能絕對地說哪種最優。

ps,我也是初學svm,可能會有些地方有初入,歡迎指出~其實svm思想不難,理解裡面的數學推導比較難。等理解透了p附上另一版本


簡單來說呢就是通過一定的映射找到可以分割數據集的一個超面。

具體可以看大神寫的博客,裡面有一個動態演示,個人覺得做得很棒:http://blog.pluskid.org/?p=685


其實可函數和SVM可以理解為兩個不同的東西,SVM只不過是用到了kernel trick是的有些線性不可分的情況變得在高維線性可分(理想上),任何可以用內積計算距離的分類器或者其他的都可以用kernel trick。可函數的好處是把低維空間投影到高維,有些核函數投影到有限維,比如多項式核,有些投影到無窮維,比如RBF。但這只是增大的線性可分的可能性,並不能保證。所以還要進入鬆弛係數(slash coefficients) 如果形象的理解,就是如果你有N個點,如果N個點分布在N維空間里,那他們肯定是線性可分的(比如2個點在平面上)。所以SVM用kenel的目的就在於此。


第一次回答下吧(近期想努力改變一下自己,就這吧)

前面的回答給出了公式形式,贊一個,也省的我再貼了。。

我理解的核函數是,為了實現線性可分這一目的,對於一些低維空間的點(如2維),將他們投影到高維空間中的點(如5維)的過程中所用到的一種映射方式 。但是很幸運的,我們可以用一些非常簡單的函數形式來代替映射後的高維內積形式(複變函數有介紹,當時著實很費解),也就是說我們只用計算低維空間上的核函數(如RBF核,sigmoid核),這些函數的值跟高維空間上的內積值是等價的(其實還是有區別的,準確說是近似)。

之所以稱這種技術為kernel trick,也是看中了它能夠大大簡化計算過程,就像魔法一樣(trick本意是詭計,就跟偷懶一個意思啦,畢竟嚴格來說核函數的值確實是近似值)。記不住在哪個地方見過這樣的話:核函數技術和結構風險最小化是SVM賴以成功的的兩大法寶(大霧,慎用)。

但是如果進一步研究的話,我們確實可以發現核函數的某些益處:比如它真的可以反映不同樣本間的差異,從而將不同的類分開——比如sigmoid核,類似tanh函數,注意這個函數在不同的x(如-1和1)處具有截然不同的函數值,利用這一點結合決策函數才最終把不同的數據分開,所以核函數才是最根本的分類器!(為自己突發奇想的這句話點個贊,呵)

如果只想粗淺了解,推薦看白鵬等人的

ef="http://www.sogou.com/link?url=hedJjaC291Ph3wesPGw3nQC1-n_5Jrx_GYhS5qIYCngSx2rTV3FoJjga1eByp3xGLnWudX_V6J0jMvMVRUDgm2s0Un2sfdSlJZ1kV6oLkHPMEl57ynhLjny5Ou_GXBRCOxct0LY7beXjTPxo_YkonnKoMtaUnsbVxvb8pY4t18uwULoUwiw_TCtjB_fweWXZsFGZn8_K6CisJ41V_LPuRebTS81o7ASsAxgdu2mYWxdZJ-esKc90LA..amp;amp;query=%E7%99%BD%E9%B9%8F+%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA">支持向量機理論及工程應用實例 裡面的一些圖很形象

如果要進一步研究,就看鄧乃揚、田英傑的

數據挖掘中的新方法:支持向量機 真的不錯

原諒我第一次回答,說了很多廢話,不過最後還是讓我過個癮吧:

以上


就是允許你自定義距離的概念。比如:我用幾何距離當距離,或者用坐標軸上的直角距離當距離,或者用某種統計量(pearson相關係數、熵相關係數什麼的)當距離,等等……

這個概念可以類比編程標準庫的排序設施。你可以自己定義一個「核函數」,來給出自定義的比較兩個對象大小的概念,從而對基本的數字類型以外的對象進行排序。

數學上,這叫泛函;編程上,這叫函數指針、回調函數、運行時多態。


簡單的說就是,低維度空間不可分的數據在高維度可分,但是數據映射到高維度是個問題。

事實上我們在線性可分的情況下需要的是該維度下數據的內積,因此核函數就是得到該數據在高維度下的內積。

下面的文章介紹了kernal trick

The Kernel Trick

希望我理解的沒錯。。。


支持向量機優化的目標是一個二次約束二次規劃,拉格朗日對偶以後目標函數的取值只與任意兩樣本的內積有關係。手機打不了公式。假設兩個3維樣本內積是5,現在我想構造高維樣本,比如任意兩變數的乘積作為新變數,即原始變數空間的二次式空間。樣本就變成了6維。然而這個6維的樣本進去支持向量機後,其每一維是多少並不重要,我們需要的只是它與其他樣本的內積。也就是說,我們升維的過成並不需要真的構造出更多特徵。比如把3維樣本的內積5作平方,得到25,它就對應了另一個高維變數空間上的內積。其實就是二次式空間。可以從數學上證明對原始變數空間內積的哪些操作實質上對應了另一個變數空間上的內積


就以某ml start up面試題為例,給你平面四個點,組成平行四邊形,分黑白兩色,對角線同色,問用SVM可分么?如果能,該怎麼做?

答案是kernel trick,映射到另一個維度,就能把原本線性不可分的點變為可分,這樣就可以回到一般的SVM去做了。


如果題主想弄明白核函數如何將線性不可分變為可分的,那麼核函數是將樣本數據X從原空間R轉換到希爾伯特空間,這應該不是SVM方面的問題

如果題主想要一個解釋「為啥用核技巧的話」,一個原因就是可以使得原本「線性不可分的樣本數據變得線性可分」,還有就是求解拉格朗日對偶問題時,公式里的x"x直接改成k(x"x)就完成了這個轉換,非常簡潔漂亮不是嘛~~

題主可以參考《統計學習方法》推導一下SVM的過程,應該就會有簡單的理解了,另外周志華先生那本西瓜書里對核函數和希爾伯特空間有一點點介紹~~

拋磚引玉,希望對題主有幫助


低維到高維的映射


推薦閱讀:

如何通過已有數據對用戶畫像,標籤和分析?該產品核心問題在哪,如何落地?
國內的數據挖掘,大數據的案例有哪些?
國內外有哪些數據分析相關的競賽比賽網站?
如何系統地學習Python 中 matplotlib, numpy, scipy, pandas?
國內在線圖表工具,你能說出幾個?

TAG:數據分析 | 機器學習 | SVM |