svm參數說明

svm參數說明----------------------

如果你要輸出類的概率,一定要有-b參數

svm-train training_set_file model_file

svm-predict test_file model_fileoutput_file

自動腳本:Python?easy.py train_data test_data

自動選擇最優參數,自動進行歸一化。

對訓練集合和測試結合,使用同一個歸一化參數。

-c:參數

-g:?參數

-v:交叉驗證數

-s svm_type : set type of SVM (default?0)

????????0 -- C-SVC

????????1 -- nu-SVC

????????2 -- one-class SVM

????????3 -- epsilon-SVR

????????4 -- nu-SVR

-t kernel_type : set type of kernelfunction (default 2)

????????0 -- linear: u'*v

????????1 -- polynomial: (gamma*u'*v + coef0)^degree

????????2 -- radial basis function: exp(-gamma*|u-v|^2)

????????3 -- sigmoid: tanh(gamma*u'*v + coef0)

-d degree : set degree in kernel function(default 3)

?

-g gamma : set gamma in kernel function(default 1/num_features)

-r coef0 : set coef0 in kernel function(default 0)

-c cost : set the parameter C of C-SVC,epsilon-SVR, and nu-SVR (default 1)

-n nu : set the parameter nu of nu-SVC,one-class SVM, and nu-SVR (default 0.5)

-p epsilon : set the epsilon in lossfunction of epsilon-SVR (default 0.1)

-m cachesize : set cache memory size in MB(default 100)

-e epsilon : set tolerance of terminationcriterion (default 0.001)

-h shrinking: whether to use the shrinkingheuristics, 0 or 1 (default 1)

-b probability_estimates: whether to traina SVC or SVR model for probability estimates, 0 or 1 (default 0)(如果需要估計分到每個類的概率,則需要設置這個)

-wi weight: set the parameter C of class ito weight*C, for C-SVC (default 1)

?Thek in the -g option means the number of attributes in the input data.

?

?

libsvm使用誤區----------------------

(1)??????直接將訓練集合和測試集合簡單歸一化到[0,1]區間,可能導致實驗結果很差。

(2)??????如果樣本的特征數非常多,那么就不必使用RBF核將樣本映射到高維空間。

a)????????在特征數非常多的情況下,使用線性核,結果已經非常好,并且只需要選擇參數C即可。

b)????????雖然說RBF核的結果至少比線性核好,前提下搜索整個的空間。

(3)??????樣本數<<特征數的情況:

a)????????推薦使用線性核,可以達到與RBF同樣的性能。

(4)??????樣本數和特征數都非常多:推薦使用liblinear,更少的時間和內存,可比的準確率。

(5)??????樣本數>>特征數:如果想使用線性模型,可以使用liblinear,并且使用-s 2參數

?

libsvm在訓練model的時候,有如下參數要設置,當然有默認的參數,但是在具體應用方面效果會大大折扣。?

Options:可用的選項即表示的涵義如下

-s svm類型:SVM設置類型(默認0)

0 -- C-SVC

1 --v-SVC

2?一類SVM

3 -- e -SVR

4 -- v-SVR?

?

-t?核函數類型:核函數設置類型(默認2)

0?線性:u'v

1?多項式:(r*u'v + coef0)^degree

2??RBF函數:exp(-gamma|u-v|^2)

3?sigmoidtanh(r*u'v + coef0)

?

?

-d degree:核函數中的degree設置(針對多項式核函數)(默認3)

-g r(gama):核函數中的gamma函數設置(針對多項式/rbf/sigmoid核函數)(默認1/ k)

-r coef0:核函數中的coef0設置(針對多項式/sigmoid核函數)((默認0)

-c cost:設置C-SVCe -SVRv-SVR的參數(損失函數)(默認1)

-n nu:設置v-SVC,一類SVMv- SVR的參數(默認0.5)

-p p:設置e -SVR?中損失函數p的值(默認0.1)

-m cachesize:設置cache內存大小,以MB為單位(默認40)

-e eps:設置允許的終止判據(默認0.001)

-h shrinking:是否使用啟發式,01(默認1)

-wi weight:設置第幾類的參數Cweight*C(C-SVC中的C)(默認1)

-v n: n-fold交互檢驗模式,nfold的個數,必須大于等于2

  其中-g選項中的k是指輸入數據中的屬性數。option -v?隨機地將數據剖分為n

?

當構建完成model后,還要為上述參數選擇合適的值,方法主要有Gridsearch,其他的感覺不常用,Gridsearch說白了就是窮舉。

?

網格參數尋優函數(分類問題):SVMcgForClass

[bestCVaccuracy,bestc,bestg]=

SVMcgForClass(train_label,train,

cmin,cmax,gmin,gmax,v,cstep,gstep,accstep)

輸入:

train_label:訓練集的標簽,格式要求與svmtrain相同。

train:訓練集,格式要求與svmtrain相同。

cmin,cmax:懲罰參數c的變化范圍,即在[2^cmin,2^cmax]范圍內尋找最佳的參數c,默認值為cmin=-8cmax=8,即默認懲罰參數c的范圍是[2^(-8),2^8]

gmin,gmax:RBF核參數g的變化范圍,即在[2^gmin,2^gmax]范圍內尋找最佳的RBF核參數g,默認值為gmin=-8gmax=8,即默認RBF核參數g的范圍是[2^(-8),2^8]

v:進行Cross Validation過程中的參數,即對訓練集進行v-fold Cross Validation,默認為3,即默認進行3CV過程。

cstep,gstep:進行參數尋優是cg的步進大小,即c的取值為2^cmin,2^(cmin+cstep),,2^cmax,g的取值為2^gmin,2^(gmin+gstep),,2^gmax,默認取值為cstep=1,gstep=1

accstep:最后參數選擇結果圖中準確率離散化顯示的步進間隔大小([0,100]之間的一個數),默認為4.5

輸出:

bestCVaccuracy:最終CV意義下的最佳分類準確率。

bestc:最佳的參數c

bestg:最佳的參數g

?

網格參數尋優函數(回歸問題):SVMcgForRegress

[bestCVmse,bestc,bestg]=

SVMcgForRegress(train_label,train,

cmin,cmax,gmin,gmax,v,cstep,gstep,msestep)

其輸入輸出與SVMcgForClass類似,這里不再贅述。


而當你訓練完了model,在用它做classificationregression之前,應該知道model中的內容,以及其含義。

?

用來訓練的是libsvm自帶的heart數據

?

model =

???Parameters: [5x1 double]

?????nr_class: 2

??????totalSV: 259???????????????????%?支持向量的數目

??????????rho: 0.0514???????????????%??b

????????Label: [2x1 double]?????%??classification中標簽的個數

????????ProbA: []

????????ProbB: []

??????????nSV: [2x1 double]?????%??每類支持向量的個數

???????sv_coef: [259x1 double]??%???支持向量對應的Wi

?

??????????SVs: [259x13 double]??%???裝的是259個支持向量

?

model.Parameters參數意義從上到下依次為:

-s svm類型:SVM設置類型(默認0)

-t?核函數類型:核函數設置類型(默認2)

-d degree:核函數中的degree設置(針對多項式核函數)(默認3)

-g r(gama):核函數中的gamma函數設置(針對多項式/rbf/sigmoid核函數) (默認類別數目的倒數)

-r coef0:核函數中的coef0設置(針對多項式/sigmoid核函數)((默認0)

?

SVM?怎樣能得到好的結果

1.???對數據做歸一化(simple scaling

2.???應用?RBF kernel?

3.???cross-validationgrid-search?得到最優的c和g

4.???用得到的最優cg訓練訓練數據

5.???測試


?

關于svmC以及核函數參數設置----------------------

參考自:對支持向量機幾種常用核函數和參數選擇的比較研究

??

C一般可以選擇為:10^t , t=- 4..4就是0.0001?10000

?選擇的越大,表示對錯誤例懲罰程度越大,可能會導致模型過擬合

?

LIBSVM-t用來指定核函數類型(默認值是2)。

0)線性核函數

(無其他參數)

1)多項式核函數

(重點是階數的選擇,即d,一般選擇1-111 3 5 7 9 11,也可以選擇2,46…

2RBF核函數

(徑向基RBF內核,exp{-|xi-xj|^2/均方差},其中均方差反映了數據波動的大小。

參數通常可選擇下面幾個數的倒數:0.1 0.2 0.4 0.6 0.8 1.6 3.2 6.4 12.8,默認的是類別數的倒數,即1/k2分類的話就是0.5

3sigmoid核函數?又叫做S形內核

兩個參數g以及rg一般可選1 2 3 4r0.2 0.4 0.60.8 1

4)自定義核函數

?

常用的四種核函數對應的公式如下:

?

與核函數相對應的libsvm參數:

1)對于線性核函數,沒有專門需要設置的參數

2)對于多項式核函數,有三個參數。-d用來設置多項式核函數的最高此項次數,也就是公式中的d,默認值是3-g用來設置核函數中的gamma參數設置,也就是公式中的第一個r(gamma),默認值是1/kk是類別數)。-r用來設置核函數中的coef0,也就是公式中的第二個r,默認值是0

3)對于RBF核函數,有一個參數。-g用來設置核函數中的gamma參數設置,也就是公式中的第一個r(gamma),默認值是1/kk是類別數)。

4)對于sigmoid核函數,有兩個參數。-g用來設置核函數中的gamma參數設置,也就是公式中的第一個r(gamma),默認值是1/kk是類別數)。-r用來設置核函數中的coef0,也就是公式中的第二個r,默認值是0


關于cost和gamma

SVM模型有兩個非常重要的參數C與gamma。其中 C是懲罰系數,即對誤差的寬容度。c越高,說明越不能容忍出現誤差,容易過擬合。C越小,容易欠擬合。C過大或過小,泛化能力變差

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

? ? ? ? ??此外大家注意RBF公式里面的sigma和gamma的關系如下

? ??

? ? ? ? 這里面大家需要注意的就是gamma的物理意義,大家提到很多的RBF的幅寬,它會影響每個支持向量對應的高斯的作用范圍,從而影響泛化性能。我的理解:如果gamma設的太大,會很小,很小的高斯分布長得又高又瘦,?會造成只會作用于支持向量樣本附近,對于未知樣本分類效果很差,存在訓練準確率可以很高,(如果讓無窮小,則理論上,高斯核的SVM可以擬合任何非線性數據,但容易過擬合)而測試準確率不高的可能,就是通常說的過訓練;而如果設的過小,則會造成平滑效應太大,無法在訓練集上得到特別高的準確率,也會影響測試集的準確率。

此外,可以明確的兩個結論是:
結論1:樣本數目少于特征維度并不一定會導致過擬合,這可以參考余凱老師的這句評論:
這不是原因啊,呵呵。用RBF kernel, 系統的dimension實際上不超過樣本數,與特征維數沒有一個trivial的關系。

結論2:RBF核應該可以得到與線性核相近的效果(按照理論,RBF核可以模擬線性核),可能好于線性核,也可能差于,但是,不應該相差太多。
當然,很多問題中,比如維度過高,或者樣本海量的情況下,大家更傾向于用線性核,因為效果相當,但是在速度和模型大小方面,線性核會有更好的表現。

老師木還有一句評論,可以加深初學者對SVM的理解:
須知rbf實際是記憶了若干樣例,在sv中各維權重重要性等同。線性核學出的權重是feature weighting作用或特征選擇 。
以上摘錄了:http://blog.sina.com.cn/s/blog_6ae183910101cxbv.html


Grid Search

Grid Search是用在Libsvm中的參數搜索方法。很容易理解:就是在C,gamma組成的二維參數矩陣中,依次實驗每一對參數的效果。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??


使用grid Search雖然比較簡單,而且看起來很na?ve。但是他確實有兩個優點:

  1. 可以得到全局最優
  2. (C,gamma)相互獨立,便于并行化進行
[python]?view plaincopy
在CODE上查看代碼片派生到我的代碼片
  1. #?SVM?Classifier?using?cross?validation????
  2. def?svm_cross_validation(train_x,?train_y):????
  3. ????from?sklearn.grid_search?import?GridSearchCV????
  4. ????from?sklearn.svm?import?SVC????
  5. ????model?=?SVC(kernel='rbf',?probability=True)????
  6. ????param_grid?=?{'C':?[1e-3,?1e-2,?1e-1,?1,?10,?100,?1000],?'gamma':?[0.001,?0.0001]}????
  7. ????grid_search?=?GridSearchCV(model,?param_grid,?n_jobs?=?8,?verbose=1)????
  8. ????grid_search.fit(train_x,?train_y)????
  9. ????best_parameters?=?grid_search.best_estimator_.get_params()????
  10. ????for?para,?val?in?list(best_parameters.items()):????
  11. ????????print(para,?val)????
  12. ????model?=?SVC(kernel='rbf',?C=best_parameters['C'],?gamma=best_parameters['gamma'],?probability=True)????
  13. ????model.fit(train_x,?train_y)????
  14. ????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固有的缺點,結合其他算法的優勢,解決多類問題的分類精度。
如:
與粗集理論結合,形成一種優勢互補的多類問題的組合分類器。

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

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

相關文章

poj-3667(線段樹區間合并)

題目鏈接&#xff1a;傳送門 參考文章&#xff1a;傳送門 思路&#xff1a;線段樹區間合并問題&#xff0c;每次查詢到滿足線段樹的區間最左值&#xff0c;然后更新線段樹。 #include<iostream> #include<cstdio> #include<cstring> using namespace std; co…

面試題編程題11-python 生成隨機數

隨機整數&#xff1a; random.randint(a,b), [a,b] random.randrange(a,b,step) [a,b) 隨機實數 random.random()返回0 到1 之間的浮點數轉載于:https://www.cnblogs.com/feihujiushiwo/p/10922454.html

車牌識別之顏色選取

車牌定位是車牌識別中第一步&#xff0c;也是最重要的一步。 由于中國車牌種類多樣&#xff0c;顏色不一&#xff0c; 再加上車牌經常有污損&#xff0c;以及車牌周圍干擾因素太多&#xff0c;都成為了車牌定位的難點。 這里首先使用最簡單算法來描述車牌定位&#xff0c;以及他…

Python - 排序( 插入, 冒泡, 快速, 二分 )

插入排序 算法分析 兩次循環, 大循環對隊列中的每一個元素拿出來作為小循環的裁定對象 小循環對堆當前循環對象在有序隊列中尋找插入的位置 性能參數 空間復雜度  O(1) 時間復雜度  O(n^2) 詳細代碼解讀 import randomdef func(l):# 外層循環: 對應遍歷所有的無序數據for i…

[EmguCV|C#]使用CvInvoke自己繪製色彩直方圖-直方圖(Hitsogram)系列(4)

2014-02-0610325 0C# 檢舉文章 過年結束了&#xff0c;雖然還是學生所以其實還有兩個禮拜的假期&#xff0c;不過為了不讓自己發慌&#xff0c;趁著假期多利用充實自己&#xff0c;所以提早回到開工狀態&#xff0c;而這次總算要把一直說的自己動手繪製猜色直方圖文章寫出。 …

G.點我

鏈接&#xff1a;https://ac.nowcoder.com/acm/contest/903/G 題意&#xff1a; X腿與隊友到河北省來參加2019河北省大學生程序設計競賽&#xff0c;然而這場比賽的題目難度實在是太高了。比賽開始一個小時后&#xff0c;X腿仍然沒有做出一個題。這時候&#xff0c;X腿驚訝的發…

輪廓的查找、表達、繪制、特性及匹配(How to Use Contour? Find, Component, Construct, Features Match)

前言 輪廓是構成任何一個形狀的邊界或外形線。前面講了如何根據色彩及色彩的分布&#xff08;直方圖對比和模板匹配&#xff09;來進行匹配&#xff0c;現在我們來看看如何利用物體的輪廓。包括以下內容&#xff1a;輪廓的查找、表達方式、組織方式、繪制、特性、匹配。 查…

Android:IntentService的學習

在Android的四大組件中&#xff0c;Service排行老二&#xff0c;在Android中的主要作用是后臺服務&#xff0c;進行與界面無關的操作。由于Service運行在主線程&#xff0c;所以進行異步操作需要在子線進行。為此Android為我們提供了IntentService。 IntentService是一個抽象類…

智能商業大會構造信息化交流平臺

在快速發展的當今社會&#xff0c;所有事物都在日新月異地變化著&#xff0c;相較于過去的傳統商業的變化速度&#xff0c;現今基于數據的互聯網商業變化速度高出了一個量級&#xff0c;同時市場對于企業的應對速度也有了更高的要求&#xff0c;然而面對大體量的數據&#xff0…

itcast-ssh-crm實踐

分析 BaseDao 文件上傳 轉載于:https://www.cnblogs.com/hellowq/p/10209761.html

分類器大牛們

David Lowe&#xff1a;Sift算法的發明者&#xff0c;天才。 Rob Hess&#xff1a;sift的源碼OpenSift的作者&#xff0c;個人主頁上有openSift的下載鏈接&#xff0c;Opencv中sift的實現&#xff0c;也是參考這個。 Koen van de Sande&#xff1a;作者給出了sift,densesift,co…

go 成長路上的坑(1)

一、先來看一段代碼 package mainimport "fmt"type X struct{}func (x *X) test(){println("h1",x) } func main(){a : X{} a.test()(&X{}).test()(X{}).test() } 猜猜他的結果 二、揭曉答案 package mainimport "fmt"type X struct{}func (…

利用python腳本程序監控文件被修改

需求&#xff1a;利用python編寫監控程序&#xff0c;監控一個文件目錄&#xff0c;當目錄下的文件發生改變時&#xff0c;實現有修改就發報警郵件 郵件使用QQ郵箱&#xff0c;需要開啟smtp&#xff0c;使用手機發生短信&#xff0c;騰訊會給你發郵箱密碼。如下所示&#xff1a…

Oracle RAC

環境如下&#xff1a; Linux操作系統&#xff1a;Centos 6.5 64bit &#xff08;這個版本的redhat 6內核等OS在安裝grid最后執行root.sh時會出現crs-4124&#xff0c;是oracle11.2.0.1的bug&#xff09; VMware version&#xff1a;Workstation 8.0.3 build-703057 Oracle…

好程序員web前端分享MVVM框架Vue實現原理

好程序員web前端分享MVVM框架Vue實現原理&#xff0c;Vue.js是當下很火的一個JavaScript MVVM庫&#xff0c;它是以數據驅動和組件化的思想構建的。相比于Angular.js和react.js更加簡潔、更易于理解的API&#xff0c;使得我們能夠快速地上手并使用Vue.js。?1.什么是MVVM呢&…

HDU - 3516 Tree Construction

HDU - 3516 思路&#xff1a; 平行四邊形不等式優化dp &#xff1a;&#xff09; 代碼&#xff1a; #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc.h> using namespace std; #define y1 y11 #define fi first #define se…

各類總線傳輸速率

1. USB總線 USB1.1&#xff1a; -------低速模式(low speed)&#xff1a;1.5Mbps -------全速模式(full speed)&#xff1a; 12Mbps USB2.0&#xff1a;向下兼容。增加了高速模式&#xff0c;最大速率480Mbps。 -------高速模式(high speed)&#xff1a; 25~480Mbps US…

Activiti多人會簽例子

Activiti中提供了多實例任務&#xff08;for-each&#xff09;將多實例應到到UserTask中可以實現會簽功能。 Multi-instance (for each) Description A multi-instance activity is a way of defining repetition for a certain step in a business process. In programming …

Django 【認證系統】auth

本篇內容 介紹Django框架提供的auth 認證系統 方法&#xff1a; 方法名 備注 create_user 創建用戶 authenticate 登錄驗證 login 記錄登錄狀態 logout 退出用戶登錄 is_authenticated 判斷用戶是否登錄 login_required裝飾器 進行登錄判斷 引入模塊 from django.…

兒科常見疾病的中成藥療法

孩子感冒&#xff0c;分清寒熱是關鍵——兒童風寒感冒和風熱感冒的中成藥內服外治法 兒童不養兒不知父母恩&#xff0c;每個人恐怕都只有自己做了父母&#xff0c;才能感受到父母的愛。嬰幼兒正處于最初的發育期&#xff0c;抵抗力弱&#xff0c;有個感冒發燒的也是常有的事兒。…