LIBSVM ( 二 ) 參數實例詳解


1. 入門案例 

1.1 分類的小例子--根據身高體重進行性別預測

%% 使用Libsvm進行分類的小例子
%{
一個班級里面有兩個男生(男生1、男生2),兩個女生(女生1、女生2),其中
男生1 身高:176cm 體重:70kg;
男生2 身高:180cm 體重:80kg;
女生1 身高:161cm 體重:45kg;
女生2 身高:163cm 體重:47kg;
如果我們將男生定義為1,女生定義為-1,並將上面的數據放入矩陣data中,
並在label中存入男女生類別標簽(1、-1)
%}
train_data = [176 70;
        180 80;
        161 45;
        163 47];
train_label = [1;1;-1;-1];
%{
這樣上面的data矩陣就是一個屬性矩陣,行數4代表有4個樣本,列數2表示屬性有兩個,
label就是標簽(1、-1表示有兩個類別:男生、女生)。
%}

% 利用libsvm建立分類模型  此處options參數為默認值
model = svmtrain(train_label,train_data);

%{
此時該班級又轉來一個新學生,其
身高190cm,體重85kg
我們想給出其標簽(想知道其是男[1]還是女[-1])
由於其標簽我們不知道,我們假設其標簽為-1(也可以假設為1) 
%}
test_data = [190 85];
test_label = -1;

[predict_label,accuracy,dec_value] = svmpredict(test_label,test_data,model);
predict_label
if 1 == predict_label
    disp('==該生為男生');
end
if -1 == predict_label
    disp('==該生為女生');
end

 

1.2 回歸的小例子  y=x^2

   利用訓練集合已知的x,y來建立回歸模型 model ,然后利用這個 model 去預測。

  本例中的x相當於1.1中的屬性矩陣 data ,y 相當於其中的 label ;相應的回歸問題中 x 就是自變量,y 就是因變量。

%% 使用Libsvm進行回歸的小例子
% 生成待回歸的數據
x = (-1:0.1:1)';
y = -x.^2;

% 建模回歸模型
model = svmtrain(y,x,'-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');

% 利用建立的模型看其在訓練集合上的回歸效果
[py,mse,dec_value] = svmpredict(y,x,model);

scrsz = get(0,'ScreenSize');
figure('Position',[scrsz(3)*1/4 scrsz(4)*1/6  scrsz(3)*4/5 scrsz(4)]*3/4);
plot(x,y,'o');
hold on;
plot(x,py,'r*');
legend('原始數據','回歸數據');
grid on;

% 進行預測
testx = 1.1;
display('真實數據')
testy = -testx.^2

[ptesty,tmse,tdec_value] = svmpredict(testy,testx,model);
display('預測數據');
ptesty

 

2. 參數詳解

2.1 主要函數

LIBSVM工具箱的主要函數為 svmtrain 和 svmpredict ,其調用格式為:

model = svmtrain(train_label,train_data,options);
[predict_label,accuracy/mse,dec_value] = svmpredict(test_label,test_data,model);

 2.2 options 參數

  options的參數設置可以按照 SVM 的類型和核函數所支持的參數進行任意組合。如果設置的參數在函數或 SVM 類型中沒有也不會產生影響,程序不會接受該參數;如果應有的參數設置不正確,參數將采用默認值。主要有:

-s svm類型:SVM模型設置類型(默認值為0)
    0:C - SVC
    1:nu - SVC
    2:one - class SVM
    3: epsilon - SVR
    4: nu - SVR
- t 核函數類型:核函數設置類型(默認值為2)
    0:線性核函數 u'v
    1:多項式核函數(r *u'v + coef0)^degree
    2:RBF 核函數 exp( -r|u - v|^2)
    3:sigmiod核函數 tanh(r * u'v + coef0)
- d degree:核函數中的 degree 參數設置(針對多項式核函數,默認值為3)
- g r(gama):核函數中的gama參數設置(針對多項式/sigmoid 核函數/RBF/,默認值為屬性數目的倒數)
- r coef0:核函數中的coef0參數設置(針對多項式/sigmoid核函數,默認值為0)
- c cost:設置 C - SVC,epsilon - SVR 和 nu - SVR的參數(默認值為1)
- n nu:設置 nu-SVC ,one - class SVM 和 nu - SVR的參數
- p epsilon:設置 epsilon - SVR 中損失函數的值(默認值為0.1)
- m cachesize:設置 cache 內存大小,以 MB 為單位(默認值為100)
- e eps:設置允許的終止閾值(默認值為0.001)
- h shrinking:是否使用啟發式,0或1(默認值為1)
- wi weight:設置第幾類的參數 C 為 weight * C(對於 C - SVC 中的 C,默認值為1)
- v n:n - fold 交互檢驗模式,n為折數,必須大於等於2

 2.3 分類模型 model 解析

   測試數據使用 LIBSVM 工具箱自帶的 heart_scale.mat 數據(共計270個樣本,每個樣本有13個屬性)。測試代碼如下:

clear;
clc;
close all;

% 首先載入數據
load heart_scale;
data = heart_scale_inst;
label = heart_scale_label;
% 建立分類模型
model = svmtrain(label,data,'-s 0 -t 2 -c 1.2 -g 2.8');
% 利用建立的模型看其在訓練集合上的分類效果
[PredictLabel, accuracy, dec_values] = svmpredict(label,data, model);
accuracy

% 分類模型model解密
model
Parameters = model.Parameters
Label = model.Label
nr_class = model.nr_class
totalSV = model.totalSV
nSV = model.nSV

 1)svmtrain 的輸出 model:

model =
    Parameters: [5x1 double]
      nr_class: 2
       totalSV: 259
           rho: 0.0514
         Label: [2x1 double]
    sv_indices: [259x1 double]
         ProbA: []
         ProbB: []
           nSV: [2x1 double]
       sv_coef: [259x1 double]
           SVs: [259x13 double]

 2) model.Paramenters  %參數表

Parameters =
         0
    2.0000
    3.0000
    2.8000
         0

 2) model.Paraments 參數意義從上到下依次為

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

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

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

- g r(gama):核函數中的gama參數設置(針對多項式/sigmoid 核函數/RBF/,默認值為屬性數目的倒數)

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

3) model.Label   model.nr_class

model.label 表示數據集中類別的標簽都有什么

model.nr_class 表示數據集職工有多少個類別

4)model.totalSV  model.nSV

   model.total SV 代表總共的支持向量機的數目,這里一共259個。

  model.nSV 代表每類樣本的支持向量的數目,model.nSV 所代表的順序是和 model.label 相對應。 標簽為1的樣本118個,標簽為-1的樣本 141 個。

5)model.sv_coef  model.SVs  model.rho

  sv_coef: [259x1 double]
      SVs: [259x13 double]
model.rho = 0.0514

 sv_coef,承裝的是259個支持向量在決策函數中的系數;

model.SVs 承裝的是259個支持向量;

 model.rho = 0.0514   是決策函數中的常數項的相反數。

 6) accuracy

返回參數accuracy 從上到下的意義依次是:

分類准確率,分類問題中用到的參數指標;

平均平方誤差( mean squared error,MSE),回歸問題中用到的參數指標;

平方相關系數( squared correlation coefficient ,r2),回歸問題中用到的參數指標。

3. 決策函數

3.1 理論分析

3.2 代碼實現

function plabel = DecisionFunction(x,model)
gamma = model.Parameters(4);
RBF = @(u,v)( exp(-gamma.*sum( (u-v).^2) ) );
len = length(model.sv_coef);
y = 0;
for i = 1:len
    u = model.SVs(i,:);
    y = y + model.sv_coef(i)*RBF(u,x);
end
b = -model.rho;
y = y + b;
if y >= 0
    plabel = 1;
else
    plabel = -1;
end

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM