1. 程式人生 > >LIBSVM使用與自定義核函式

LIBSVM使用與自定義核函式

LIBSVM訓練函式使用如下:

model = svmtrain(trainlabel,traindata,'-s 0 -t 2 -c 1.2 -g 2.8')

trainlabel:訓練樣本標籤

traindata:訓練樣本資料集,行向量為樣本值

SVM型別,用引數-s 設定,預設值為0,可選型別有:

0 -- C- SVC

1 -- nu - SVC

2 -- one-class-SVM

3 -- e - SVR

4 -- nu-SVR

核函式(用引數 -t 來指定),-t 設定核函式型別(預設為2),可選核函式有:

0 -- 線性核函式: K(u,v)=u'*v
1 -- 多項式核函式: K(u,v)=(gamma*u'*v + coef0)^d

2 -- RBF核函式: K(u,v)=exp(-gamma*||u-v||^2)
3 -- sigmoid核函式: K(u,v)=tanh(gamma*u'*v + coef0)

4 -- 自定義核函式

u、v為資料集中的兩個樣本

核函式對應引數:

線性核函式,沒有專門需要設定的引數
多項式核函式,有三個引數。  -d用來設定多項式核函式的最高此項次數,也就是公式中的d,預設值是3 。-g用來設定核函式中的gamma引數設定,也就是公式中的gamma,預設值是1/k(k是類別數)。-r用來設定核函式中的coef0,預設值是0
RBF核函式,有一個引數。 -g用來設定核函式中的gamma引數設定,預設值是1/k(k是類別數)。
sigmoid核函式,有兩個引數。-g用來設定核函式中的gamma引數設定,預設值是1/k(k是類別數)。-r用來設定核函式中的coef0,預設值是0。
其它引數:
-c cost:設定C- SVC、e - SVR、n - SVR中從懲罰係數C,預設值為1;
-wi weight:對各類樣本的懲罰係數C加權,預設值為1;
-v n:n折交叉驗證模式。
自定義核函式

使用-t 4引數時,可以使用自定義核函式,根據自定義核函式求出核矩陣,自定義核函式使用方法如下:

比如線性核函式 是 K(u,v)=u'*v,設訓練集是train_data,設訓練集有150個樣本 , 測試集是test_data,設測試集有120個樣本,則

訓練集的核矩陣: ktrain = train_data*train_data'

測試集的核矩陣: ktest = test_data*train_data'

想要使用-t 4引數還需要把樣本的序列號放在核矩陣前面 ,形成一個新的矩陣:

% 使用線性核函式 K(u,v) = (u' * v)
Ktrain = train_data * train_data';    %求訓練集核矩陣
Ktrain = [(1:150)',ktrain];     %樣本的序列號放在核矩陣前面
model = svmtrain(train_label, Ktrain, '-t 4');  % 輸入 Ktrain
Ktest = test_data*train_data';  %求測試集核矩陣
Ktest = [(1:120)', Ktest];      %樣本的序列號放在核矩陣前面
[predict_label, accuracy, P1] = svmpredict(test_label,Ktest,model); % 輸入Ktest


混合核函式
多項式核函式有良好的全域性效能,具有很強的外推能力,並且多項式的次數越低,其外推能力越強。而Gauss徑向基核函式則是區域性性強,其內推能力隨著引數的減小而減弱。通過把兩類核函式結合起來,發揮它們各自的優點,得到學習能力和推廣性都很強,兼具良好的外推和內推能力的核函式,利用多項式核函式和徑向基核函式構建混合核函式分類模型,表示式為:

式中:Kpoly 為多項式核函式;Krbf 為徑向基核函式;λ∈(0,1)。當 λ 較大時,混合核函式的效能表現得優良一些。

原文:https://blog.csdn.net/xgf415/article/details/51417791