Libsvm實現支援向量機(Matlab)

2021-09-21 14:34:29 字數 3447 閱讀 9514

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 ...

支援向量機專題 線性支援向量機

原文 當資料線性不可分時,使用硬間隔支援向量機很難得到理想的結果。但是如果資料近似線性可分,可以採用軟間隔支援向量機 線性支援向量機 進行分類。這通常適用於有少量異常樣本的分類,如果使用線性支援向量機,它會盡量使得所有訓練樣本都正確,如下圖所示。顯然這並不是最好的結果,軟間隔支援向量機可以權衡 間隔...