SVM核函數


scikit-learn SVM算法庫封裝了libsvmliblinear 的實現,僅僅重寫了算法的接口部分。
scikit-learn中SVM的算法庫分為兩類,相關的類都包裹在sklearn.svm模塊之中。

  • 一類是分類的算法庫,包括SVCNuSVC,和LinearSVC 3個類。SVC和 NuSVC差不多,區別僅僅在於對損失的度量方式不同,而LinearSVC從名字就可以看出,他是線性分類,也就是不支持各種低維到高維的核函數,僅僅支持線性核函數,對線性不可分的數據不能使用。
  • 另一類是回歸算法庫,包括SVRNuSVR,和LinearSVR 3個類。SVR和NuSVR差不多,區別也僅僅在於對損失的度量方式不同。LinearSVR是線性回歸,只能使用線性核函數。

我們使用這些類的時候,如果有經驗知道數據是線性可以擬合的,那么使用LinearSVC去分類 或者LinearSVR去回歸,它們不需要我們去慢慢的調參去選擇各種核函數以及對應參數, 速度也快。如果我們對數據分布沒有什么經驗,一般使用SVC去分類或者SVR去回歸,這就需要我們選擇核函數以及對核函數調參了。

什么特殊場景需要使用NuSVC分類 和 NuSVR 回歸呢?如果我們對訓練集訓練的錯誤率或者說支持向量的百分比有要求的時候,可以選擇NuSVC分類 和 NuSVR 。它們有一個參數來控制這個百分比。

在scikit-learn中,內置的核函數一共有4種,當然如果你認為線性核函數不算核函數的話,那就只有三種。

  • 線性核函數(Linear Kernel):表達式為:\(K(x,z)=<x,z>\),就是普通的內積,LinearSVC 和 LinearSVR 只能使用它。

  • 多項式核函數(Polynomial Kernel):是線性不可分SVM常用的核函數之一,表達式為:\(K(x,z)=(γ<x,z>+r)^d\) ,其中,\(γ,r,d\)都需要自己調參定義,比較麻煩。\(d\)默認是3,\(γ\) 默認為'auto',即\(\frac{1}{特征維度}\),\(r\)默認為0.一般需要通過交叉驗證選擇一組合適的\(γ,r,d\)

  • 高斯核函數(Gaussian Kernel):在SVM中也稱為徑向基核函數(Radial Basis Function,RBF)它是libsvm默認的核函數,當然也是scikit-learn默認的核函數。表達式為:\(K(x,z)=exp(−γ||x−z||^2)\), 其中,\(γ\)大於0,需要自己調參定義。\(γ\) 默認為'auto',即\(\frac{1}{特征維度}\).一般需要通過交叉驗證選擇合適的\(γ\).

  • Sigmoid核函數(Sigmoid Kernel):也是線性不可分SVM常用的核函數之一,表達式為\(K(x,z)=tanh(γ<x,z>+r)\), 其中,\(γ,r\)都需要自己調參定義。\(γ\) 默認為'auto',即\(\frac{1}{特征維度}\),\(r\)默認為0.一般需要通過交叉驗證選擇一組合適的\(γ,r\).

一般情況下,對非線性數據使用默認的高斯核函數會有比較好的效果,如果你不是SVM調參高手的話,建議使用高斯核來做數據分析。

  • 一般推薦在做訓練之前對數據進行歸一化,當然測試集中的數據也需要歸一化。。

  • 在特征數非常多的情況下,或者樣本數遠小於特征數的時候,使用線性核,效果已經很好,並且只需要選擇懲罰系數\(C\)即可

  • 在選擇核函數時,如果線性擬合不好,一般推薦使用默認的高斯核'rbf'。這時我們主要需要對懲罰系數\(C\)和核函數參數\(γ\)進行艱苦的調參,通過多輪的交叉驗證選擇合適的懲罰系數\(C\)和核函數參數\(γ\)

  • 理論上高斯核不會比線性核差,但是這個理論卻建立在要花費更多的時間來調參上。如果調的不好,可能比線性核函數還要差。所以我們實際應用中,能用線性核函數得到較好效果的都會選擇線性核函數。如果線性核不好,我們就需要使用RBF,在享受RBF對非線性數據的良好分類效果前,我們需要對主要的超參數進行選取。

下面是吳恩達的見解:

  1. 如果Feature的數量很大,跟樣本數量差不多,這時候選用LR或者是Linear Kernel的SVM

  2. 如果Feature的數量比較小,樣本數量一般,不算大也不算小,選用SVM+Gaussian Kernel

  3. 如果Feature的數量比較小,而樣本數量很多,需要手工添加一些feature變成第一種情況


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM