LIBSVM的使用方法以及参数注释总结
目錄
1. 模型訓(xùn)練
1.1?libsvmtrain三個(gè)輸入?yún)?shù),其中
1.2?libsvmtrain返回參數(shù)
1.3 模型最佳參數(shù)選取
1.4 SVM 怎樣能得到好的結(jié)果
2. 使用訓(xùn)練模型進(jìn)行預(yù)測(cè)
2.1 libsvmpredict輸入?yún)?shù)
2.1 libsvmpredict返回參數(shù)
3. 訓(xùn)練的參數(shù)
4. 讀取或保存
4.1?LIBSVM格式存儲(chǔ)
4.2 保存和使用模型
1. 模型訓(xùn)練
格式:
model = libsvmtrain(training_label_vector, training_instance_matrix [, 'libsvm_options']);1.1?libsvmtrain三個(gè)輸入?yún)?shù),其中
-training_label_vector:訓(xùn)練樣本的類(lèi)標(biāo),如果有m個(gè)樣本,就是m x 1的矩陣(類(lèi)型必須為double)。這里可以是二分類(lèi)和多分類(lèi),類(lèi)標(biāo)是(-1,1)、(1,2,3)或者其他任意用來(lái)表示不同的類(lèi)別的數(shù)字,要轉(zhuǎn)成double類(lèi)型。
-training_instance_matrix:訓(xùn)練樣本的特征,如果有m個(gè)樣本,每個(gè)樣本特征是n維,則為m x n的矩陣(類(lèi)型必須為double)。
-libsvm_options:訓(xùn)練的參數(shù),在第3點(diǎn)詳細(xì)介紹。
1.2?libsvmtrain返回參數(shù)
libsvmtrain函數(shù)返回訓(xùn)練好的SVM分類(lèi)器模型model是一個(gè)結(jié)構(gòu)體,包含以下成員:
-Parameters: 一個(gè)5 x 1的矩陣,從上到下依次表示:
-s SVM類(lèi)型(默認(rèn)0);
-t 核函數(shù)類(lèi)型(默認(rèn)2)
-d 核函數(shù)中的degree設(shè)置(針對(duì)多項(xiàng)式核函數(shù))(默認(rèn)3);
-g 核函數(shù)中的r(gamma)函數(shù)設(shè)置(針對(duì)多項(xiàng)式/rbf/sigmoid核函數(shù)) (默認(rèn)類(lèi)別數(shù)目的倒數(shù));
-r 核函數(shù)中的coef0設(shè)置(針對(duì)多項(xiàng)式/sigmoid核函數(shù))((默認(rèn)0)
-nr_class: 表示數(shù)據(jù)集中有多少類(lèi)別,比如二分類(lèi)時(shí)這個(gè)值即為2。
-totalSV: 表示支持向量的總數(shù)。
-rho: 決策函數(shù)wx+b中的常數(shù)項(xiàng)的相反數(shù)(-b)。
-Label: 表示數(shù)據(jù)集中類(lèi)別的標(biāo)簽,比如二分類(lèi)常見(jiàn)的1和-1。
-ProbA: 使用-b參數(shù)時(shí)用于概率估計(jì)的數(shù)值,否則為空。
-ProbB: 使用-b參數(shù)時(shí)用于概率估計(jì)的數(shù)值,否則為空。
-nSV: 表示每類(lèi)樣本的支持向量的數(shù)目,和Label的類(lèi)別標(biāo)簽對(duì)應(yīng)。如Label=[1; -1],nSV=[63; 67],則標(biāo)簽為1的樣本有63個(gè)支持向量,標(biāo)簽為-1的有67個(gè)。
-sv_coef: 表示每個(gè)支持向量在決策函數(shù)中的系數(shù)。
-SVs: 表示所有的支持向量,如果特征是n維的,支持向量一共有m個(gè),則為m x n的稀疏矩陣。
另外,如果在訓(xùn)練中使用了-v參數(shù)進(jìn)行交叉驗(yàn)證時(shí),返回的不是一個(gè)模型,而是交叉驗(yàn)證的分類(lèi)的正確率或者回歸的均方根誤差。
1.3 模型最佳參數(shù)選取
當(dāng)構(gòu)建完成model后,還要為上述參數(shù)選擇合適的值,也就是懲罰因子c以及核函數(shù)的參數(shù)g。方法主要有Gridsearch,GA,PSO. Gridsearch說(shuō)白了就是窮舉,GA, PSO也只是一些尋優(yōu)算法。
這里以Gridsearch為例,其余兩種算法網(wǎng)上也有,也可以私信我。都類(lèi)似。
網(wǎng)格參數(shù)尋優(yōu)函數(shù)(分類(lèi)問(wèn)題):SVMcgForClass
?[bestCVaccuracy,bestc,bestg]=SVMcgForClass(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,accstep)輸入:
train_label:訓(xùn)練集的標(biāo)簽,格式要求與svmtrain相同。
train:訓(xùn)練集,格式要求與svmtrain相同。
cmin,cmax:懲罰參數(shù)c的變化范圍,即在[2^cmin,2^cmax]范圍內(nèi)尋找最佳的參數(shù)c,默認(rèn)值為cmin=-8,cmax=8,即默認(rèn)懲罰參數(shù)c的范圍是[2^(-8),2^8]。
gmin,gmax:RBF核參數(shù)g的變化范圍,即在[2^gmin,2^gmax]范圍內(nèi)尋找最佳的RBF核參數(shù)g,默認(rèn)值為gmin=-8,gmax=8,即默認(rèn)RBF核參數(shù)g的范圍是[2^(-8),2^8]。
v:進(jìn)行Cross Validation過(guò)程中的參數(shù),即對(duì)訓(xùn)練集進(jìn)行v-fold Cross Validation,默認(rèn)為3,即默認(rèn)進(jìn)行3折CV過(guò)程。?
cstep,gstep:進(jìn)行參數(shù)尋優(yōu)是c和g的步進(jìn)大小,即c的取值為2^cmin,2^(cmin+cstep),…,2^cmax,,g的取值為2^gmin,2^(gmin+gstep),…,2^gmax,默認(rèn)取值為cstep=1,gstep=1。
accstep:最后參數(shù)選擇結(jié)果圖中準(zhǔn)確率離散化顯示的步進(jìn)間隔大小([0,100]之間的一個(gè)數(shù)),默認(rèn)為4.5。
輸出:
bestCVaccuracy:最終CV意義下的最佳分類(lèi)準(zhǔn)確率。
bestc:最佳的參數(shù)c。
bestg:最佳的參數(shù)g。
網(wǎng)格參數(shù)尋優(yōu)函數(shù)(回歸問(wèn)題):SVMcgForRegress
其輸入輸出與SVMcgForClass類(lèi)似,這里不再贅述。
1.4 SVM 怎樣能得到好的結(jié)果
1. ? 對(duì)數(shù)據(jù)做歸一化(simple scaling)
2. ? 應(yīng)用 RBF kernel?
3. ? 用cross-validation和grid-search 得到最優(yōu)的c和g
4. ? 用得到的最優(yōu)c和g訓(xùn)練訓(xùn)練數(shù)據(jù)
5. ? 測(cè)試
關(guān)于svm的C以及核函數(shù)參數(shù)設(shè)置:
懲罰因子C:一般可以選擇為:10^t , t=- 4..4就是0.0001 到10000。?選擇的越大,表示對(duì)錯(cuò)誤例懲罰程度越大,可能會(huì)導(dǎo)致模型過(guò)擬合。
核函數(shù)t:在LIBSVM中-t用來(lái)指定核函數(shù)類(lèi)型(默認(rèn)值是2)。
0)線(xiàn)性核函數(shù)
(無(wú)其他參數(shù))
1)多項(xiàng)式核函數(shù)
(重點(diǎn)是階數(shù)的選擇,即d,一般選擇1-11:1 3 5 7 9 11,也可以選擇2,4,6…)
2)RBF核函數(shù)
(徑向基RBF內(nèi)核,exp{-|xi-xj|^2/均方差},其中均方差反映了數(shù)據(jù)波動(dòng)的大小。
參數(shù)通常可選擇下面幾個(gè)數(shù)的倒數(shù):0.1 0.2 0.4 0.6 0.8 1.6 3.2 6.4 12.8,默認(rèn)的是類(lèi)別數(shù)的倒數(shù),即1/k,2分類(lèi)的話(huà)就是0.5)
3)sigmoid核函數(shù) 又叫做S形內(nèi)核
兩個(gè)參數(shù)g以及r:g一般可選1 2 3 4,r選0.2 0.4 0.60.8 1
4)自定義核函數(shù)
與核函數(shù)相對(duì)應(yīng)的libsvm參數(shù):
1)對(duì)于線(xiàn)性核函數(shù),沒(méi)有專(zhuān)門(mén)需要設(shè)置的參數(shù)
2)對(duì)于多項(xiàng)式核函數(shù),有三個(gè)參數(shù)。-d用來(lái)設(shè)置多項(xiàng)式核函數(shù)的最高此項(xiàng)次數(shù),也就是公式中的d,默認(rèn)值是3。-g用來(lái)設(shè)置核函數(shù)中的gamma參數(shù)設(shè)置,也就是公式中的第一個(gè)r(gamma),默認(rèn)值是1/k(k是類(lèi)別數(shù))。-r用來(lái)設(shè)置核函數(shù)中的coef0,也就是公式中的第二個(gè)r,默認(rèn)值是0。
3)對(duì)于RBF核函數(shù),有一個(gè)參數(shù)。-g用來(lái)設(shè)置核函數(shù)中的gamma參數(shù)設(shè)置,也就是公式中的第一個(gè)r(gamma),默認(rèn)值是1/k(k是類(lèi)別數(shù))。
4)對(duì)于sigmoid核函數(shù),有兩個(gè)參數(shù)。-g用來(lái)設(shè)置核函數(shù)中的gamma參數(shù)設(shè)置,也就是公式中的第一個(gè)r(gamma),默認(rèn)值是1/k(k是類(lèi)別數(shù))。-r用來(lái)設(shè)置核函數(shù)中的coef0,也就是公式中的第二個(gè)r,默認(rèn)值是0。
2. 使用訓(xùn)練模型進(jìn)行預(yù)測(cè)
格式:
[predicted_label, accuracy, decision_values/prob_estimates]?= libsvmpredict(testing_label_vector, testing_instance_matrix, model [, 'libsvm_options']);2.1 libsvmpredict輸入?yún)?shù)
這個(gè)函數(shù)包括四個(gè)參數(shù),其中
-testing_label_vector:測(cè)試樣本的類(lèi)標(biāo),如果有m個(gè)樣本,就是m x 1的矩陣(類(lèi)型必須為double)。如果類(lèi)標(biāo)未知,可以初始化為任意m x 1的double數(shù)組。
-testing_instance_matrix:測(cè)試樣本的特征,如果有m個(gè)樣本,每個(gè)樣本特征是n維,則為m x n的矩陣(類(lèi)型必須為double)。
-model:使用libsvmtrain返回的模型
-libsvm_options:預(yù)測(cè)的參數(shù),與訓(xùn)練的參數(shù)形式一樣。
2.1 libsvmpredict返回參數(shù)
libsvmpredict函數(shù)有三個(gè)返回值,不需要的值在Matlab可以用 ~ 進(jìn)行代替。
-predicted_label:第一個(gè)返回值,表示樣本的預(yù)測(cè)類(lèi)標(biāo)號(hào)。
-accuracy:第二個(gè)返回值,一個(gè)3 x 1的數(shù)組,表示分類(lèi)的正確率、回歸的均方根誤差、回歸的平方相關(guān)系數(shù)。
-decision_values/prob_estimates:第三個(gè)返回值,一個(gè)矩陣包含決策的值或者概率估計(jì)。對(duì)于n個(gè)預(yù)測(cè)樣本、k類(lèi)的問(wèn)題,如果指定“-b 1”參數(shù),則n x k的矩陣,每一行表示這個(gè)樣本分別屬于每一個(gè)類(lèi)別的概率;如果沒(méi)有指定“-b 1”參數(shù),則為n x k*(k-1)/2的矩陣,每一行表示k(k-1)/2個(gè)二分類(lèi)SVM的預(yù)測(cè)結(jié)果。
3. 訓(xùn)練的參數(shù)
LIBSVM訓(xùn)練時(shí)可以選擇的參數(shù)很多,包括:
-s svm類(lèi)型:SVM設(shè)置類(lèi)型(默認(rèn)0)
0 — C-SVC; 1 –v-SVC; 2 – 一類(lèi)SVM; 3 — e-SVR; 4 — v-SVR
-t 核函數(shù)類(lèi)型:核函數(shù)設(shè)置類(lèi)型(默認(rèn)2)
0 – 線(xiàn)性核函數(shù):u’v?
1 – 多項(xiàng)式核函數(shù):(r*u’v + coef0)^degree
2 – RBF(徑向基)核函數(shù):exp(-r|u-v|^2)
3 – sigmoid核函數(shù):tanh(r*u’v + coef0)
-d degree:核函數(shù)中的degree設(shè)置(針對(duì)多項(xiàng)式核函數(shù))(默認(rèn)3)
-g r(gamma):核函數(shù)中的gamma函數(shù)設(shè)置(針對(duì)多項(xiàng)式/rbf/sigmoid核函數(shù))(默認(rèn)1/k,k為總類(lèi)別數(shù))
-r coef0:核函數(shù)中的coef0設(shè)置(針對(duì)多項(xiàng)式/sigmoid核函數(shù))((默認(rèn)0)
-c cost:設(shè)置C-SVC,e -SVR和v-SVR的參數(shù)(損失函數(shù))(默認(rèn)1)
-n nu:設(shè)置v-SVC,一類(lèi)SVM和v- SVR的參數(shù)(默認(rèn)0.5)
-p p:設(shè)置e -SVR 中損失函數(shù)p的值(默認(rèn)0.1)
-m cachesize:設(shè)置cache內(nèi)存大小,以MB為單位(默認(rèn)40)
-e eps:設(shè)置允許的終止判據(jù)(默認(rèn)0.001)
-h shrinking:是否使用啟發(fā)式,0或1(默認(rèn)1)
-wi weight:設(shè)置第幾類(lèi)的參數(shù)C為weight*C (C-SVC中的C) (默認(rèn)1)
-v n: n-fold交互檢驗(yàn)?zāi)J?#xff0c;n為fold的個(gè)數(shù),必須大于等于2
以上這些參數(shù)設(shè)置可以按照SVM的類(lèi)型和核函數(shù)所支持的參數(shù)進(jìn)行任意組合,如果設(shè)置的參數(shù)在函數(shù)或SVM類(lèi)型中沒(méi)有也不會(huì)產(chǎn)生影響,程序不會(huì)接受該參數(shù);如果應(yīng)有的參數(shù)設(shè)置不正確,參數(shù)將采用默認(rèn)值。
4. 讀取或保存
4.1?LIBSVM格式存儲(chǔ)
libsvmread函數(shù)可以讀取以L(fǎng)IBSVM格式存儲(chǔ)的數(shù)據(jù)文件。
[label_vector, instance_matrix] = libsvmread(‘data.txt’);
這個(gè)函數(shù)輸入的是文件的名字,輸出為樣本的類(lèi)標(biāo)和對(duì)應(yīng)的特征。
libsvmwrite函數(shù)可以把Matlab的矩陣存儲(chǔ)稱(chēng)為L(zhǎng)IBSVM格式的文件。
libsvmwrite(‘data.txt’, label_vector, instance_matrix]
這個(gè)函數(shù)有三個(gè)輸入,分別為保存的文件名、樣本的類(lèi)標(biāo)和對(duì)應(yīng)的特征(必須為double類(lèi)型的稀疏矩陣)。
4.2 保存和使用模型
save('G:\YanJiuSheng\課題相關(guān)\算法程序\論文開(kāi)始后算法程序\LSY_SVM\flow_model','model');
flow_model= load('G:\YanJiuSheng\課題相關(guān)\算法程序\論文開(kāi)始后算法程序\LSY_SVM\flow_model');
flow_svmstruct = flow_model.model;
參考鏈接:https://blog.csdn.net/sherry_gp/article/details/51823380
總結(jié)
以上是生活随笔為你收集整理的LIBSVM的使用方法以及参数注释总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 二十万字C/C++、嵌入式软开面试题全集
- 下一篇: SVM一些细节说明