1.[trainlable,traininstance] = libsvmread('b.txt'); %讀入歸一化的資料
model = svmtrain(trainlable,traininstance,' ');%訓練模型
主要含有三個引數,第乙個為類別標籤,第二個為訓練樣本,' ' 內設定引數。
引數選擇如下:
-parameters:
-s svm型別(預設0);
-t 核函式型別(預設2);
在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。
-d 核函式中的degree設定(針對多項式核函式)(預設3);
-g 核函式中的r(gamma)函式設定(針對多項式/rbf/sigmoid核函式) (預設類別數目的倒數);
-r 核函式中的coef0設定(針對多項式/sigmoid核函式)((預設0)
-nr_class: 表示資料集中有多少類別,比如二分類時這個值即為2。
-totalsv: 表示支援向量的總數。
-rho: 決策函式wx+b中的常數項的相反數(-b)。
-label: 表示資料集中類別的標籤,比如二分類常見的1和-1。
-proba: 使用-b引數時用於概率估計的數值,否則為空。
-probb: 使用-b引數時用於概率估計的數值,否則為空。
-nsv: 表示每類樣本的支援向量的數目,和label的類別標籤對應。如label=[1; -1],nsv=[63; 67],則標籤為1的樣本有63個支援向量,標籤為-1的有67個。
-sv_coef: 表示每個支援向量在決策函式中的係數。
-svs: 表示所有的支援向量,如果特徵是n維的,支援向量一共有m個,則為m x n的稀疏矩陣。
-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*u』v + coef0)
-d degree:核函式中的degree設定(針對多項式核函式)(預設3)
-g r(gamma):核函式中的gamma函式設定(針對多項式/rbf/sigmoid核函式)(預設1/k,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
[predict_label,accuracy,dec_values] = svmpredict(trainlable,traininstance,model,' libsvm_options ');
輸出predict_label測試樣本的類標
-model:使用libsvmtrain返回的模型
-libsvm_options:**的引數,與訓練的引數形式一樣。
-predilibsvmpredict函式有三個返回值,不需要的值在matlab可以用 ~ 進行代替。
-accuracy:表示分類的正確率
-decision_values/prob_estimates:乙個矩陣包含決策的值或者概率估計。對於n個**樣本、k類的問題,如果指定「-b 1」引數,則n x k的矩陣,每一行表示這個樣本分別屬於每乙個類別的概率;如果沒有指定「-b 1」引數,則為n x k*(k-1)/2的矩陣,每一行表示k(k-1)/2個二分類svm的**結果。
結果解釋
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為標準支援向量個數(0
支援向量機多分類libSVM
支援向量機多分類可以採用兩種方式,1.一對一 one vs one 2.一對多 one vs rest 1.one vs rest clc clear all iris label,iris data libsvmread iris.scale 讀取資料到matlab格式 labels unique...
支援向量機 R語言如何實現支援向量機?
支援向量機是幫助我們解決小樣本 非線性及高維資料的重要手段。1在r語言中,實現支援向量機的是e1071軟體包中的svm函式。首先,安裝並載入軟體包。2讀取資料集。gyyz data read.csv gyyz.csv head t 讀取資料集 gyyz data is rise as.factor ...
支援向量機專題 線性支援向量機
原文 當資料線性不可分時,使用硬間隔支援向量機很難得到理想的結果。但是如果資料近似線性可分,可以採用軟間隔支援向量機 線性支援向量機 進行分類。這通常適用於有少量異常樣本的分類,如果使用線性支援向量機,它會盡量使得所有訓練樣本都正確,如下圖所示。顯然這並不是最好的結果,軟間隔支援向量機可以權衡 間隔...