SVM 調參策略

轉自:SVM 調參策略:https://blog.csdn.net/u014484783/article/details/78220646

SVM 怎樣能得到好的結果?
1. 對數據做歸一化(simple scaling)?
2. 應用 RBF kernel?
3. 用cross-validation和grid-search 得到最優的c和g?
4. 用得到的最優c和g訓練訓練數據?
5. 測試

1 關于svm的C以及核函數參數設置

1.1 C的選擇

C一般可以選擇為:10^t , t=[- 4,4]就是0.0001 到10000。選擇的越大,表示對錯誤例懲罰程度越大,可能會導致模型過擬合

1.2 常見核函數及其選擇

0)線性核函數?
(無其他參數)?
1)多項式核函數?
(重點是階數的選擇,即d,一般選擇1-11:1 3 5 7 9 11,也可以選擇2,4,6…)?
2)RBF核函數?
徑向基RBF內核,exp{-|xi-xj|^2/均方差},其中均方差反映了數據波動的大小。

gamma參數通常可選擇下面幾個數的倒數:0.1 0.2 0.4 0.6 0.8 1.6 3.2 6.4 12.8,默認的是類別數的倒數,即1/k,2分類的話就是0.5)?
3)sigmoid核函數 又叫做S形內核?
兩個參數g以及r:g一般可選1 2 3 4,r選0.2 0.4 0.6 0.8 1?
4)自定義核函數

核函數的參數:

1)對于線性核函數,沒有專門需要設置的參數?
2)對于多項式核函數,有三個參數。-d用來設置多項式核函數的最高此項次數,也就是公式中的d,默認值是3。-g用來設置核函數中的gamma參數設置,也就是公式中的第一個r(gamma),默認值是1/k(k是類別數)。-r用來設置核函數中的coef0,也就是公式中的第二個r,默認值是0。?
3)對于RBF核函數,有一個參數。-g用來設置核函數中的gamma參數設置,也就是公式中的第一個r(gamma),默認值是1/k(k是類別數)。?
4)對于sigmoid核函數,有兩個參數。-g用來設置核函數中的gamma參數設置,也就是公式中的第一個r(gamma),默認值是1/k(k是類別數)。-r用來設置核函數中的coef0,也就是公式中的第二個r,默認值是0。

2 關于cost和gamma

SVM模型有兩個非常重要的參數C與gamma。

  1. 其中 C是懲罰系數,即對誤差的寬容度。c越高,說明越不能容忍出現誤差,容易過擬合。C越小,容易欠擬合。C過大或過小,泛化能力變差

  2. gamma是選擇RBF函數作為kernel后,該函數自帶的一個參數。隱含地決定了數據映射到新的特征空間后的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的個數影響訓練與預測的速度

  3. Grid Search?
    使用grid Search雖然比較簡單,而且看起來很na?ve。但是他確實有兩個優點:?
    可以得到全局最優?
    (C,gamma)相互獨立,便于并行化進行
  4. # SVM Classifier using cross validation

  5. def svm_cross_validation(train_x, train_y):

  6. from sklearn.grid_search import GridSearchCV

  7. from sklearn.svm import SVC

  8. model = SVC(kernel='rbf', probability=True)

  9. param_grid = {'C': [1e-3, 1e-2, 1e-1, 1, 10, 100, 1000], 'gamma': [0.001, 0.0001]}

  10. grid_search = GridSearchCV(model, param_grid, n_jobs = 8, verbose=1)

  11. grid_search.fit(train_x, train_y)

  12. best_parameters = grid_search.best_estimator_.get_params()

  13. for para, val in list(best_parameters.items()):

  14. print(para, val)

  15. model = SVC(kernel='rbf', C=best_parameters['C'], gamma=best_parameters['gamma'], probability=True)

  16. model.fit(train_x, train_y)

  17. return model

SVM有如下主要幾個特點:

(1)非線性映射是SVM方法的理論基礎,SVM利用內積核函數代替向高維空間的非線性映射;

(2)對特征空間劃分的最優超平面是SVM的目標,最大化分類邊際的思想是SVM方法的核心;

(3)支持向量是SVM的訓練結果,在SVM分類決策中起決定作用的是支持向量;

(4)SVM 是一種有堅實理論基礎的新穎的小樣本學習方法。?
它基本上不涉及概率測度及大數定律等,因此不同于現有的統計方法。?
從本質上看,它避開了從歸納到演繹的傳統過程,實現了高效的從訓練樣本到預報樣本的“轉導推理”,大大簡化了通常的分類和回歸等問題;

(5)SVM 的最終決策函數只由少數的支持向量所確定,計算的復雜性取決于支持向量的數目,而不是樣本空間的維數,這在某種意義上避免了“維數災難”。

(6)少數支持向量決定了最終結果,這不但可以幫助我們抓住關鍵樣本、“剔除”大量冗余樣本,而且注定了該方法不但算法簡單,而且具有較好的“魯棒”性。?
這種“魯棒”性主要體現在:?
①增、刪非支持向量樣本對模型沒有影響;?
②支持向量樣本集具有一定的魯棒性;?
③有些成功的應用中,SVM 方法對核的選取不敏感

兩個不足:

(1) SVM算法對大規模訓練樣本難以實施?
由于SVM是借助二次規劃來求解支持向量,而求解二次規劃將涉及m階矩陣的計算(m為樣本的個數),當m數目很大時該矩陣的存儲和計算將耗費大量的機器內存和運算時間。針對以上問題的主要改進有?
J.Platt的SMO算法、?
T.Joachims的SVM、?
C.J.C.Burges等的PCGC、?
張學工的CSVM?
以及O.L.Mangasarian等的SOR算法

(2) 用SVM解決多分類問題存在困難?
經典的支持向量機算法只給出了二類分類的算法,而在數據挖掘的實際應用中,一般要解決多類的分類問題。可以通過多個二類支持向量機的組合來解決。主要有一對多組合模式、一對一組合模式和SVM決策樹;再就是通過構造多個分類器的組合來解決。主要原理是克服SVM固有的缺點,結合其他算法的優勢,解決多類問題的分類精度。如:與粗集理論結合,形成一種優勢互補的多類問題的組合分類器.

-----------------------------------------------------------------------------------------------------------------------------------------------------

https://blog.csdn.net/yzf0011/article/details/71521001

http://discussions.youdaxue.com/t/svm-rbf-kernel/6088

在我們機器學習的過程中,很多同學包括我自己也疑惑過rbf kernel函數的實際作用是什么?不同的參數又有什么作用。

上周我參加了上海的夏令營,這里就是我們討論的結果。

首先我們要知道Support Vector Machine到底是什么東西。看過課程視頻的同學都是到,SVM旨在將一組不可線性分割的數據線性分割。怎么做到的呢?通過將低維度的數據投影到高維度來實現。

這里又涉及到兩個關鍵詞“線性分割”、“投影”。

線性可分割

線性分割就是一組數據可以被一條直線(高維度空間中是超平面)分為兩半。

如上圖所示,A是線性可分的,B不是。

那么在更高維度中,線性就是指的一個平面。在三維空間中是平面,在更高維度中就是超平面。

投影

投影(映射)就是一個函數。z = f(x, y) 就是把x,y投影到z。“投影”這個用詞其實是一個幾何空間的借喻。意思就是說,將(x,y)這個本來屬于二維空間的點‘’投影‘’到第三維。如下:

(x1, y1) => (x1, y1, z1)
(x2, y2) => (x2, y2, z2)
(x3, y3) => (x3, y3, z3)
....
依次類推

內核函數 Kernel Function

內核函數就是投影所具體使用的函數。這里就用rbf來舉例。rbf全稱是Radial Based Function,基于半徑的函數。

在解釋 rbf 之前,先來看一個更簡單地例子。

如上圖所示,左邊的圈圈和叉叉是不可線性分割的。但是我們可以看出,一個圓圈可以將它們分開。這個圓其實就代表不同的點到原點(0,0)的距離的分界線。距離更大的叉叉在圓外面,距離小的圈圈在圓里面。

那么什么函數才可以僅僅基于 x1 和 x2 就算出離原點的距離呢?答案是:

define 距離函數 f(x1, x2) 為: sqrt( x1^2 + x2 ^ 2 ) 。然后讓 f(x1,x2) 投影到 x3

這里開不開根號其實無所謂,因為我們關心的不是絕對的距離,而是一個可以區分不同距離的尺度。

那么對于SVM來說,我們的 f 就是內核函數。通過這個 f,我們就可以將左邊的二維坐標系投影成右邊的三維坐標系。然后很明顯的,我們的數據變得線性可分割了(通過那個切面)。

Radial Based Function

現在我們再來看?rbf1

這是 rbf 的數學公式。當然,更一般性的寫法是

公式的具體含義這里不作很數學的解釋(比如說什么是 exponential function)

要注意的有3個方面。

  1. X 和 X’ 不是標量,是向量(別名:矢量)
  2. | X - X' | ^ 2 就是一個距離公式,X’ 是相對于 X 的另外一個點 (一個向量可以被當做一個點)
  3. gamma 是一個常數 (具體含義后面講)

我們可以觀察到,之前算到原點距離的 f 就是 這里的 rbf 的一種特殊情況。X’ 就是 (0,0)。而 rbf 中 X’ 是根據具體情況而定的。

我們可以再看到這個圖

對于圖 B 來說,用原點作為參考點肯定是不合適的。參考點應該是藍色數據的中心點。然后 rbf 可以算出每個點到該中心的距離,從而將其投影到一個三維空間,讓其變得可以線性分割。

rbf 投影后的結果大概就長這樣(圖片僅供參考)

gamma 參數什么意思
我們通過公式可知,gamma 是一個常量,而且是一個線性的因數。所以大家可以想象,gamma的作用,其實就是控制數據在向高維度投影后的縮放比例。如果 gamma 很大,那么上圖的點就會離切面很遠。如果 gamma 很小,上圖的點就會離切面很近。

而這個縮放比例就會影響線性分割面的運算結果(不同的loss function對距離的懲罰度不一樣)。這也是SVM對數據 Scaling 和 Normalization 是敏感的原因之一。因為最后都是算的一個 Linear Model

這就是為什么,有人說如果原始數據比較分散,gamma可以小一點。反之,如果原始數據很密集,gamma可以大一點。當然,這不是絕對的,所以我們才要做 GridSearch

通常我們會 0.01、0.1、1、10、100 ... 這樣指數級地搜索一個比較好的 gamma

sklearn SVM 里的 C 是什么意思?
我都寫了這么多,這就留給你當作業吧。多看?sklearn 文檔3。記住,gamma 和 C 是好基友

你可以在評論里面寫自己對 C 的理解

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/458138.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458138.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458138.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

美好的?天 從ActionTab開始 美觀、智能、?效的新標簽? iTab 新標簽頁iTab新標簽頁Atop100工具推薦

文章目錄 ActionTabiTab 新標簽頁iTab新標簽頁,小組件,起始頁,標簽頁,日歷,股票,瀏覽器擴展 https://www.actiontab.cn/ ActionTab 收費???? iTab 新標簽頁iT…

Oracle學習之merge

--使用merge語句 create table new as select * from emp where 10; insert into new (empno,ename) select empno,ename from emp where deptno10;merge into new n using emp e on (n.empnoe.empno) when matched then update set n.sale.salwhen not matched then insert (…

機器學習中的算法(2)-支持向量機(SVM)基礎

from:http://www.cnblogs.com/LeftNotEasy/archive/2011/05/18/2034566.html 版權聲明: 本文由LeftNotEasy發布于http://leftnoteasy.cnblogs.com, 本文可以被全部的轉載或者部分使用,但請注明出處,如果有問題,請聯系wheeleastgm…

HDU 2586 How far away ?【LCA】

題目鏈接: http://acm.hdu.edu.cn/showproblem.php?pid2586 題意: 無向圖,給定邊及邊權重,任意兩點之間都有一條唯一的道路,道路上每個點只能出現一次。給定詢問,求詢問的結點之間的距離。 分析&#xff1…

深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT條件

from:https://blog.csdn.net/xianlingmao/article/details/7919597 在求取有約束條件的優化問題時,拉格朗日乘子法(Lagrange Multiplier) 和KKT條件是非常重要的兩個求取方法,對于等式約束的優化問題,可以應用拉格朗日乘子法去求…

android一些若干回調測試

1.activity:onAttachedToWindow在onResume后回調 2.onCreate和onResume調用間隔為29ms, onAttachedToWindow和OnResume相差11ms, viewTreeObserver:OnGloballayout和onAttachedtoWindow相差19ms 注:以上的測試時間間隔不能保證精確相同,但是可以從中看出…

Kinect深度圖與攝像頭RGB的標定與配準(轉載文章)

作者原文地址:http://blog.csdn.net/aichipmunk/article/details/9264703 自從有了Kinect,根據深度圖提取前景就非常方便了。因此出現了很多虛擬現實、視頻融合等應用。但是,Kinect自身的RGB攝像頭分辨率有限,清晰度也不及一些專業…

臺北到淡水版Firefox無法播放視頻

臺北到淡水版的Firefox所有的視頻都無法播放,禁用了各種插件也還是沒法播放,最后才確定是SWF的問題,大家有同樣問題的,可以下載我的放到SWF文件夾下,目錄結構如下圖: ?Firefox的SWF下載地址1 ?Firefox的S…

最詳細、最完整的相機標定講解

相機標定詳解 最近做項目要用到標定,因為是小白,很多東西都不懂,于是查了一堆的博客,但沒有一個博客能讓我完全能看明白整個過程,絕大多數都講的不全面,因此自己總結了一篇博客,給自己理一下思…

時間日志和缺陷日志

項目計劃總結: 日期&&任務 聽課 編寫程序 閱讀相關書籍 網上查找資料 日總計 周一 2 2 1 1 6 周二 2 1 3 周三 1 2 2 5 周四 2 2 1 5 周五 4 1 1 6 周六 3 1 1 4 周日 4 2 2 周總計 4 …

卷積與反卷積動圖

各種卷積與反卷積動態圖 反卷積: 詳細文字鏈接:https://www.zhihu.com/question/43609045/answer/132235276(該鏈接中并沒有下面的動態圖) Deconvolution大致可以分為以下幾個方面:(1)unsupervised learning,其實就…

ASP.NET-權限管理五張表

ASP.NET 權限管理五張表權限管理的表(5張表)每個表里面必有的一些信息序號名稱 字段 類型 主鍵默認值是否為空備注1 用戶ID ID INT 是 null 否用戶ID2用戶名稱UserNamevarchar(100)否null否用戶名稱3用戶密碼UserPasswordvarchar(20)否null否用…

神經網絡CNN解釋

from:https://blog.csdn.net/ruiyiin/article/details/77113973 這篇文章原地址為An Intuitive Explanation of Convolutional Neural Networks,卷積神經網絡的講解非常通俗易懂。 什么是卷積神經網絡?為什么它們很重要? 卷積神經…

線條的屬性

1.lineCap"butt“ /"round" /"square" 只能用于線段的結尾處 不能用于線段的銜接處 2.lineJoin:線條與線條相交時的形態 miter(default)/ bevel (斜接)/round(圓接) 1.后繪制的圖形,如果與前繪制的圖形區…

pcl里面使用KdTree來搜索

from:https://blog.csdn.net/qq_25491201/article/details/51135054 下面這個教程我們將學會怎么用KdTree找一個特殊點附近的K個最近鄰,然后我們也將復習怎么通過一個特殊的半徑來找里面所有的近鄰。 一個k-d樹,或者k維的樹是一個計算機科學里面的數據…

Linux英文全稱

su:Swith user 切換用戶,切換到root用戶cat: Concatenate 串聯uname: Unix name 系統名稱df: Disk free 空余硬盤du: Disk usage 硬盤使用率chown: Change owner 改變所有者chgrp: Change group 改變用戶組ps:Process Status 進程狀態ta…

caffe caffe.cpp 程序入口分析

from:https://blog.csdn.net/u014114990/article/details/47747025 caffe.cpp 程序入口分析, (1)main()函數中,輸入的train,test,device_query,time。 通過下面兩行進入程序。 …

php文件加密

1.在線加密 網址:http://www.phpjm.net/encode.html 本人測試過還可以,就是純加密,沒有解密。 轉載于:https://www.cnblogs.com/wuheng1991/p/5332617.html

樹莓派3 編譯驅動

分為本地編譯和交叉編譯,主要是Makefile的寫法: 本地編譯: obj-m : bcm2835-i2s.o KDIR : /lib/modules/$(shell uname -r)/build PWD : $(shell pwd) all:make -C $(KDIR) M$(PWD) modules clean:rm *.o *.ko *.mod.c modules.order Module.…

caffe common 程序分析 類中定義類

caffe中 有 common.hpp 和common.cpp // The main singleton of Caffe class and encapsulates the boost and CUDA random number // generation function, providing a unified interface. caffe的singleton 類, 封裝boost和cuda等操作。 提供一個統一的接口&am…