標籤:
考慮dual SVM 問題:如果對原輸入變數做了non-linear transform,那麼在二次規劃計算Q矩陣的時候,就面臨著:先做轉換,再做內積;如果轉換後的項數很多(如100次多項式轉換),那麼耗費的時間就比較多。
能否在計算Q矩陣這一步的時候,把transform+inner product合成一步呢?
這裡就用到了一些kernel trick。
簡單來說:某些特殊形式的transfrom,利用kernel trick就是只用計算一次transform之前的輸入向量內積(X‘X),transform之後的內積結果可以用X‘X來表示,這樣計算複雜度就維持在了O(d)。
如下的2nd order polynomial transform為例:
只要能用上kernel trick,所有Z‘Z都可以用K(X,X‘)來代替。
接下來看,如果能使用上kernel trick,計算dual SVM的時候會帶來哪些好處。
可以用上K(X,X‘)的地方有:
(1)計算qn,m的時可以直接用
(2)計算bias b的時候可以用上
(3)當輸入一個測試樣本的時候,可以直接用上(否則先得做轉換,再用求出來的公式)
因此,Kernel SVM的QP過程可以利用kernel trick在各個環節都獲得簡化。
下面分別介紹幾個常用的kernel類型。
General Poly-2 Kernel
上面這種K2 kernel的好處:
(1)在計算上非常簡潔,只需要計算一次X‘X,加1再平方就OK了。
(2)又不失一般性,因為在QP的過程中,常數項、一次項、二次項前面的係數會隨著最佳化而吃掉
但是K2 kernel前面的係數也不能亂選,因為這影響到了最終的W是多少(即margin definition)
K2不同的係數,選擇的SV也不同。
一般先從最簡單的SVM開始實驗,然後再逐漸複雜。
Gaussian SVM
Gaussian SVM是一個無窮維的多項式變換。
無窮維的好處就是學習power增強了,缺點就是參數選的不好就....
即使是SVM 過擬合依然會出現,要慎用Gaussian SVM。
幾種Kernel各有好處,但原則還是要慎用,能用簡單的不用複雜的。
【Kernal Support Vector Machine】林軒田機器學習技術