必威电竞|足球世界杯竞猜平台

LIBSVM
來源:互聯(lián)網(wǎng)

LIBSVM是臺灣大學林智仁(Lin Chih-Jen)教授等開發(fā)設(shè)計的一個簡單、易于使用和快速有效的SVM模式識別與回歸的軟件包,他不但提供了編譯好的可在Windows系列系統(tǒng)的執(zhí)行文件,還提供了源代碼,方便改進、修改以及在其它操作系統(tǒng)上應用;該軟件對SVM所涉及的參數(shù)調(diào)節(jié)相對比較少,提供了很多的默認參數(shù),利用這些默認參數(shù)可以解決很多問題;并提供了交互檢驗(Cross Validation)的功能。該軟件可以解決C-SVM、ν-SVM、ε-SVR和ν-SVR等問題,包括基于一對一算法的多類模式識別問題。

概述補充

SVM用于模式識別或回歸時,SVM方法及其參數(shù)、核函數(shù)及其參數(shù)的選擇,目前國際上還沒有形成一個統(tǒng)一的模式,也就是說最優(yōu)SVM算法參數(shù)選擇還只能是憑借經(jīng)驗、實驗對比、大范圍的搜尋或者利用軟件包提供的交互檢驗功能進行尋優(yōu)。

目前,LIBSVM擁有C、Java、MATLAB、C#、RubyPython、R、Perl、Common LISP、LabVIEWPHP等數(shù)十種語言版本。最常使用的是C、Matlab、Java和命令行(c語言編譯的工具)的版本。

以上各版本在林智仁(Lin Chih-Jen)主頁上均有鏈接。

使用手冊

LibSVM是以源代碼和可執(zhí)行文件兩種方式給出的。如果是Windows系列操作系統(tǒng),可以直接使用軟件包提供的程序,也可以進行修改編譯;如果是Unix類系統(tǒng),必須自己編譯,軟件包中提供了編譯格式文件,我們在SGI工作站(操作系統(tǒng)IRⅨ6.5)上,使用免費編譯器GNU C++3.3編譯通過。

使用步驟

LIBSVM 使用的一般步驟是:

1)按照LIBSVM軟件包所要求的格式準備數(shù)據(jù)集;

2)對數(shù)據(jù)進行簡單的縮放操作;

3)考慮選用RBF 核函數(shù);

4)采用交叉驗證選擇最佳參數(shù)C與g ;

5)采用最佳參數(shù)C與g 對整個訓練集進行訓練獲取支持向量機模型;

6)利用獲取的模型進行測試與預測。

數(shù)據(jù)格式

LIBSVM使用的數(shù)據(jù)格式

該軟件使用的訓練數(shù)據(jù)和檢驗數(shù)據(jù)文件格式如下:

其中

可以編寫小程序,將自己常用的數(shù)據(jù)格式轉(zhuǎn)換成這種格式。其中formatdatalibsvm.xls文件可以方便的將excel數(shù)據(jù)轉(zhuǎn)化為符合LIBSVM要求的數(shù)據(jù)格式。

Svmtrain使用方法

Svmtrain(訓練建模)的用法:svmtrain [options] training_set_file [model_file]

options:可用的選項即表示的涵義如下

-s svm類型:SVM設(shè)置類型(默認0)

0 -- C-SVC

1 --v-SVC

2 – 一類SVM

3 -- e -SVR

4 -- v-SVR

-t 核函數(shù)類型:核函數(shù)設(shè)置類型(默認2)

0 – 線性:u'v

1 – 多項式:(r*u'v + coef0)^degree

2 – RBF函數(shù):exp(-r|u-v|^2)

3 –sigmoid:tanh(r*u'v + coef0)

-d degree:核函數(shù)中的degree設(shè)置(針對多項式核函數(shù))(默認3)

-g r(gama):核函數(shù)中的gamma函數(shù)設(shè)置(針對多項式/rbf/sigmoid核函數(shù))(默認1/ k)

-r coef0:核函數(shù)中的coef0設(shè)置(針對多項式/sigmoid核函數(shù))((默認0)

-c cost:設(shè)置C-SVC,e -SVR和v-SVR的參數(shù)(損失函數(shù))(默認1)

-n nu:設(shè)置v-SVC,一類SVM和v- SVR的參數(shù)(默認0.5)

-p p:設(shè)置e -SVR 中損失函數(shù)p的值(默認0.1)

-m cachesize:設(shè)置cache內(nèi)存大小,以MB為單位(默認40)

-e eps:設(shè)置允許的終止判據(jù)(默認0.001)

-h shrinking:是否使用啟發(fā)式,0或1(默認1)

-wi weight:設(shè)置第幾類的參數(shù)C為weight*C (C-SVC中的C) (默認1)

-v n: n-fold交互檢驗模式,n為fold的個數(shù),必須大于等于2

其中-g選項中的k是指輸入數(shù)據(jù)中的屬性數(shù)。option -v 隨機地將數(shù)據(jù)剖分為n部分并計算交互檢驗準確度和均方根誤差。以上這些參數(shù)設(shè)置可以按照SVM的類型和核函數(shù)所支持的參數(shù)進行任意組合,如果設(shè)置的參數(shù)在函數(shù)或SVM類型中沒有也不會產(chǎn)生影響,程序不會接受該參數(shù);如果應有的參數(shù)設(shè)置不正確,參數(shù)將采用默認值。

training_set_file是要進行訓練的數(shù)據(jù)集;model_file是訓練結(jié)束后產(chǎn)生的模型文件,文件中包括支持向量樣本數(shù)、支持向量樣本以及l(fā)agrange系數(shù)等必須的參數(shù);該參數(shù)如果不設(shè)置將采用默認的文件名,也可以設(shè)置成自己慣用的文件名。

Svmpredict使用方法

[predict_label, accuracy, decision_values/prob_estimates] = svmpredict(test_label, test_matrix, model, ['libsvm_options']);

-test_label:

測試標簽

-testmatrix:

測試數(shù)據(jù)

-model:

訓練的模型

用法如下:

modle=svmtrain(test_label,testmatrix,'libsvm_options');

[PredictLabel,accurac1] = svmpredict(test_label,testmatrix,model);

Svmpredict(使用已有的模型進行預測)的用法:svmpredict test_file model_file output_file

model_file是由svmtrain產(chǎn)生的模型文件;

test_file是要進行預測的數(shù)據(jù)文件;

Output_file是svmpredict的輸出文件。

svm-predict沒有其它的選項。

SVMSCALE 的用法

對數(shù)據(jù)集進行縮放的目的在于:1)避免一些特征值范圍過大而另一些特征值范圍過小;

2)避免在訓練時為了計算核函數(shù)而計算內(nèi)積的時候引起數(shù)值計算的困難。因此,通常將數(shù)據(jù)縮放到[ -1,1]或者是[0,1]之間。

用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper]

[-s save_filename] [-r restore_filename] filename

(缺省值:lower = -1,upper = 1,沒有對y進行縮放)

其中,

-l:數(shù)據(jù)下限標記;lower:縮放后數(shù)據(jù)下限;

-u:數(shù)據(jù)上限標記;upper:縮放后數(shù)據(jù)上限;

-y:是否對目標值同時進行縮放;y_lower為下限值,y_upper為上限值;

-s save_filename:表示將縮放的規(guī)則保存為文件save_filename;

-r restore_filename:表示將縮放規(guī)則文件restore_filename載入后按此縮放;

filename:待縮放的數(shù)據(jù)文件(要求滿足前面所述的格式)。

縮放規(guī)則文件可以用文本瀏覽器打開,看到其格式為:

lower upper

lval1 uval1

lval2 uval2

其中的lower 與upper 與使用時所設(shè)置的lower 與upper 含義相同;index 表

示特征序號;lval 為該特征對應轉(zhuǎn)換后下限lower 的特征值;uval 為對應于轉(zhuǎn)換后上限upper 的特征值。

數(shù)據(jù)集的縮放結(jié)果在此情況下通過dos窗口輸出,當然也可以通過DOS的

文件重定向符號“>;”將結(jié)果另存為指定的文件。

使用實例:

1) svmscale –s train3.rangetrain3>train3.scale

表示采用缺省值(即對屬性值縮放到[ -1,1]的范圍,對目標值不進行縮放)

對數(shù)據(jù)集train3 進行縮放操作,其結(jié)果縮放規(guī)則文件保存為train3.range,縮放集的縮放結(jié)果保存為train3.scale。

2) svmscale –r train3.rangetest3>test3.scale

表示載入縮放規(guī)則train3.range 后按照其上下限對應的特征值和上下限值線

性的地對數(shù)據(jù)集test3 進行縮放,結(jié)果保存為test3.scale。

舉例說明

svmtrain -s 0 -c 1000 -t 1 -g 1 -r 1 -d 3 data_file

訓練一個由多項式核(u'v+1)^3和C=1000組成的分類器。

svmtrain -s 1 -n 0.1 -t 2 -g 0.5 -e 0.00001 data_file

在RBF核函數(shù)exp(-0.5|u-v|^2)和終止允許限0.00001的條件下,訓練一個?-SVM (? = 0.1)分類器。

svmtrain -s 3 -p 0.1 -t 0 -c 10 data_file

以線性核函數(shù)u'v和C=10及損失函數(shù)?= 0.1求解SVM回歸。

輸出如下:

optimization finished,#iter

迭代次數(shù)

epsilon =

二次規(guī)劃的終止條件

obj =,

obj,就是那個二次規(guī)劃的最小值吧

rho =

判決函數(shù)的常數(shù)

nSV =,

支持向量的個數(shù)

重要論文

本部分列出幾篇關(guān)于LIBSVM的重要論文。

libsvm:a library for Support Vector Machines

A practical guide to SVM classification

Training and Testing Low-degree Polynomial Data Mappings via Linear SVM

Working Set Selection Using Second Order Information for Training Support Vector Machines

參考資料 >

生活家百科家居網(wǎng)