svmtrain函式:
model= svmtrain(train_label, train_matrix, [『libsvm_options』]);
其中:train_label表示訓練集的標籤。
train_matrix表示訓練集的屬性矩陣。
libsvm_options是需要設定的一系列引數,各個引數可參見help svmtrain。如果用回歸的話,其中的-s引數值應為3。
libsvm在訓練model的時候,有如下引數要設定,當然有預設的引數,但是在具體應用方面效果會大大折扣。
libsvm 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 –sigmoid:tanh(r*u'v + coef0)
-d degree:核函式中的degree設定(針對多項式核函式)(預設3)
-g r(gama):核函式中的gamma函式設定(針對多項式/rbf/sigmoid核函式)(預設1/ k)
-r coef0:核函式中的coef0設定(針對多項式/sigmoid核函式)((預設0)
-c cost:設定c-svc,e -svr和v-svr的引數(損失函式)(預設1)
-n nu:設定v-svc,一類svm和v- svr的引數(預設0.5)
-p p:設定e -svr 中損失函式p的值(預設0.1)
-m cachesize:設定cache記憶體大小,以mb為單位(預設40)
-e eps:設定允許的終止判據(預設0.001)
-h shrinking:是否使用啟發式,0或1(預設1)
-wi weight:設定第幾類的引數c為weight*c(c-svc中的c)(預設1)
-v n: n-fold互動檢驗模式,n為fold的個數,必須大於等於2
其中-g選項中的k是指輸入資料中的屬性數。option -v 隨機地將資料剖分為n部
當構建完成model後,還要為上述引數選擇合適的值,
方法主要有gridsearch,其他的感覺不常用,gridsearch說白了就是窮舉。
注意:如果在訓練中使用了-v引數進行交叉驗證時,返回的不是乙個模型,而是交叉驗證的分類的正確率或者回歸的均方根誤差。
model:是訓練得到的模型,是乙個結構體(如果引數中用到-v,得到的就不是結構體,對於分類問題,得到的是交叉檢驗下的平均分類準確率;對於回歸問題,得到的是均方誤差)。
parameters: [5x1 double] %結構體變數,依次儲存的是 -s -t -d -g -r等引數
nr_class: 4 %分類的個數
totalsv: 39 %總的支援向量個數
rho: [6x1 double] %b=-model.rho
label: [4x1 double]
proba:
probb:
nsv: [4x1 double] %每一類的支援向量的個數
sv_coef: [39x3 double] %支援向量的係數
svs: [39x12 double] %具體的支援向量,以稀疏矩陣的形式儲存
w*x+b=0 其中
w=model.svs'*model.sv_coef
b=-model.rho
w是高維空間中分類 超平面的法向量,b是常數項。
輸出的結果為
optimization finished,
#iter = 162
nu = 0.431029
obj = -100.877288,
rho = 0.424462
nsv = 132,
nbsv = 107
total nsv = 132
其中,#iter為迭代次數,
nu是你選擇的核函式型別的引數,
obj為svm檔案轉換為的二次規劃求解得到的最小值,
rho為判決函式的偏置項b,
nsv為標準支援向量個數,
nbsv為邊界上的支援向量個數(a[i]=c),
total nsv為支援向量總個數(對於兩類來說,因為只有乙個分類模型total nsv = nsv,
但是對於多類,這個是各個分類模型的nsv之和)。
libsvm使用誤區----------------------
(1) 直接將訓練集合和測試集合簡單歸一化到[0,1]區間,可能導致實驗結果很差。
(2) 如果樣本的特徵數非常多,那麼就不必使用rbf核將樣本對映到高維空間。
a) 在特徵數非常多的情況下,使用線性核,結果已經非常好,並且只需要選擇引數c即可。
b) 雖然說rbf核的結果至少比線性核好,前提下搜尋整個的空間。
(3) 樣本數《特徵數的情況:
a) 推薦使用線性核,可以達到與rbf同樣的效能。
(4) 樣本數和特徵數都非常多:推薦使用liblinear,更少的時間和記憶體,可比的準確率。
(5) 樣本數》特徵數:如果想使用線性模型,可以使用liblinear,並且使用-s 2引數
svm 怎樣能得到好的結果
對資料做歸一化(****** scaling)
應用 rbf kernel
用cross-validation和grid-search 得到最優的c和g
用得到的最優c和g訓練訓練資料測試
關於svm的c以及核函式引數設定----------------------
參考自:對支援向量機幾種常用核函式和引數選擇的比較研究
c一般可以選擇為:10^t , t=- 4…4就是0.0001 到10000
選擇的越大,表示對錯誤例懲罰程度越大,可能會導致模型過擬合
在libsvm中-t用來指定核函式型別(預設值是2)。
0)線性核函式
(無其他引數)
1)多項式核函式
(重點是階數的選擇,即d,一般選擇1-11:1 3 5 7 9 11,也可以選擇2,4,6…)
2)rbf核函式
(徑向基rbf核心,exp,其中均方差反映了資料波動的大小。
引數通常可選擇下面幾個數的倒數: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.60.8 1
4)自定義核函式
常用的四種核函式對應的公式如下:
與核函式相對應的libsvm引數:
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。
svmtrain函式引數
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 r u v 2 3 sigmoid tanh r...
svmtrain的返回引數
parameters 乙個5 x 1的矩陣,從上到下依次表示 s svm型別 預設0 t 核函式型別 預設2 d 核函式中的degree設定 針對多項式核函式 預設3 g 核函式中的r gamma 函式設定 針對多項式 rbf sigmoid核函式 預設類別數目的倒數 r 核函式中的coef0設定 ...
svmtrain返回值的引數解釋
parameters 5x1 double 結構體變數,依次儲存的是 s t d g r等引數 nr class 1025 分類的個數 totalsv 3015 總的支援向量個數 rho 5151x1 double b model.rho label 102x1 double proba probb...