背景
上一講從對偶問題的角度描述了SVM問題,但是始終需要計算原始數據feature轉換后的數據。這一講,通過一個kernel(核函數)技巧,可以省去feature轉換計算,但是仍然可以利用feature轉換的特性。
什么是kernel
Kernel的其實就是將向量feature轉換與點積運算合並后的運算,如下,
概念上很簡單,但是並不是所有的feature轉換函數都有kernel的特性。
Kernel化的SVM
在對偶化的SVM解中,有三個地方會使用到kernel
-
計算截距b
-
計算QP中的Q矩陣
-
預測分類
使用了kernel,w的具體值都無需計算,因為沒有地方會直接使用w。這也是為什么上一講花了那么大的精力描述對偶化的SVM解。
常見kernel
常見kernel有多項式,高斯和線性,各有利弊。
線性kernel
不做feature轉換,直接使用。不需要使用對偶技巧,直接使用linear hard SVM解。
優點:計算效率高;結果解釋性好。
缺點:需要數據線性可分
多項kernel
對x進行多項式展開,一般的形式為
其中a,b,Q為常量。
優點:相比線性kernel,對數據要求沒有那么嚴格
缺點:需要選擇的系數較多;Q太大會超出一些計算機的精度,一般Q<=3。
高斯Kernel
有些資料也稱為RBF(Radial Base Function),一般形式為
其中a(>0)是常量。高斯kernel厲害的地方是可以將原始數據x映射到無線維度空間中,x下面取a=1的例子
上面的變化采用了Taylor展開,接着
其中特征轉化為
這樣,就完成了向無線維度轉換,RBF是不是很厲害!
優點:調試的系數較少;比線性和多項式更強大,幾乎可以適應所有數據;不容易出現計算精度問題
缺點:無線維度無法解釋;太強大,容易過擬合;計算開銷大。
總結
個人感覺,核函數是SVM畫龍點睛之筆,真的很佩服發現kernel的科學家。在實際使用SVM的過程中,很大一部分精力可能就是選擇kernel和相關系數。Kernel還可以自定義,但是需要滿足一些條件,具體可以參考講義相關部分。