一般的 kernel tricks 在最初的時候的思路都是什麼樣的?

讀了很多和kernel有關的資料,比如svm,kpca,klda,總覺得很零散,說「映射到hilbert空間」未免有點虛,總覺得是把所有的問題轉化到求內積上,但又覺得好像不是……

初學者,思路十分混亂,詞不達意還請見諒,求大牛點撥一下,kernel tricks的核心到底是什麼。


轉化成求內積不是目的是手段,所以叫trick。

線性分類面總是人們所希求的,數學上好處理,但是許多時候原數據的確是線性不可分的。映射到希爾伯特空間不是一句虛話,而是實實在在的根本解決思路,因為一條曲線如果在高維空間就可以描述成線性方程。例如,橢圓/雙曲線/拋物面都是二次型方程,如果將所有二次和一次項都定義成高維空間的一維(Polynomial kernel),那就變成了一個線性方程——而我們已有各種各樣的方案的線性分類面,SVM只是其中之一罷了。但SVM的特殊之處(或者說所有kernel based methods)在於,你並不需要顯式的定義怎麼映射到高維空間,而僅僅需要求內積就可以跟線性時候一樣求解了。可是,本質不是kernel trick而是背後對高維空間的映射,使線性不可分變成線性可分——問題在於有沒有一般化的方法或者guidance來進行這種映射呢,答案是否定的也算是肯定的。說否定是因為非線性是沒有一般化的解決方案的,而說肯定算是基於RBF核說的,因為RBF具有universal approximation的性質,使其總可以無限逼近一個任意非線性函數(請參考另一回答模式識別中從Kernel方法的本質來看,是否真的有效? - Linglai Li 的回答)。所以在不了解數據分布特性,即不知道該怎麼映射到高維空間時採用RBF核總是可以試一試的,沒辦法的辦法;但在Polynomial kernel中也提到了「Although the RBF kernel is more popular in SVM classification than the polynomial kernel, the latter is quite popular in natural language processing (NLP)」。因此,如果可以對問題特性有了深入的認識(例如發現Polynomial kernel比RBF kernel更適合NLP),可以選用更合適的方法(甚或是specific designed)和更合適的kernel,這才能真正更好的解決問題。Kernel trick更像是neural network一般的一個大的框架性指導,意義重大卻並不意味著一定能解決好問題。最後引用Box的名言:「essentially, all models are wrong, but some are useful


某種意義上為anova里的interaction,linear regression里加平方項都可以歸為kernel method。

說白了就是把input非線性映射到高維的feature space,然後你在這個feature space里做的線性劃分在原本的input space里就是非線性的了。

這樣說有點抽象,舉個簡單的例子吧:

上圖中假設圓的圓心在原點上,並且假設你要用機器學習得到一個方法劃分圓內的點和圓外的點。你的feature只有x1和x2的話,顯然這兩部分是線性不可分的。但如果你加上第三個維度(即映射到高維空間),x3=x1^2+x2^2,那麼就很簡單了,只用x3 &< C就能線性劃分了。這是polynomial kernel的一種簡單形式。其他還有RBF kernel這種可以認為是無限維的。

這實際上跟neural network里做的事情是一樣的,總之就是非線性變換,使得在變換之後的空間中能盡量線性可分。deep neural network就是疊加了多次非線性變換,從而能映射到更容易線性分割的空間。所以說白了帶kernel的SVM可以看成是一個一層hidden layer的neural network。

至於為什麼叫trick,因為這是一種有些取巧的方法。RBF kernel本來的用法是在input space的「合適」的地方取中心,但什麼叫合適的地方呢?你可以做k-means,取k-means的中心放kernel,但k-means畢竟是unsupervised,你並不知道把RBF kernel放在k-means的中心能對你的prediction有多大幫助。所以簡單的解決方案是,在每個training sample的位置放一個RBF,這樣一來你只要知道每兩個training sample在feature space中的內積就行了,運算上也好、具體操作上也好,省去了不少麻煩。於是就有了這樣一個trick。


就是個trick,很多情況下不work。

誠然理論上解決了線性不可分問題,但在實際條件下 往往特徵都很sparse了 不太可能線性不可分 就算線性不可分也可以通過直接加特徵解決

就算需要用kernel 你也不能找個現成的就用 映射到無限維度的對應方式有無數種 要有好結果是不是得找個合適的kernel? 隨便選一個就很可能會坑。 比如distributional data要用distributional kernel (但是這個kernel沒人證明過滿足kernel的限制條件)

簡單說數據量大 特徵多 就忘記kernel吧。


推薦閱讀:

通過DARPA項目看看晶元世界的「遠方」- 自動化工具和開源硬體
A Network-based End-to-End Trainable Task-oriented Dialogue System
基於遷移學習的樹葉分類
深度學習-用PaddlePaddle調戲郵件詐騙犯(1)

TAG:機器學習 | 計算機科學 | SVM | kernel核函數 |