LIBSVM使用方法
1、 Libsvm下載
下載libsvm的最新版本,下載地址為http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 目前最新版本為libsvm-3.22
將libsvm-3.22.zip解壓,我的解壓到了F:\libsvm。
添加環(huán)境變量到path:我的電腦->屬性->高級->環(huán)境變量->系統(tǒng)變量->變量列表里面雙擊 Path,在變量值最后添加;F:\libsvm\libsvm-3.22\windows 然后點擊確定即可。
解壓后可以看到,主要有5個文件夾和一些c++源碼文件:
Java——主要是應(yīng)用于java平臺;
Python——是用來參數(shù)優(yōu)選的工具,稍后介紹;
svm-toy——一個可視化的工具,用來展示訓(xùn)練數(shù)據(jù)和分類界面,里面是源碼,其編譯后的程序在windows文件夾下;
tools——主要包含四個python文件,用來數(shù)據(jù)集抽樣(subset),參數(shù)優(yōu)選(grid),集成測試(easy),數(shù)據(jù)檢查(checkdata);
windows——包含libSVM四個exe程序包,我們所用的庫就是他們,里面還有個heart_scale,是一個樣本文件,可以用記事本打開,用來測試用的。
其他.h和.cpp文件都是程序的源碼,可以編譯出相應(yīng)的.exe文件。其中,最重要的是svm.h和svm.cpp文件,svm-predict.c、svm-scale.c和svm-train.c(還有一個svm-toy.c在svm-toy文件夾中)都是調(diào)用的這個文件中的接口函數(shù),編譯后就是windows下相應(yīng)的四個exe程序。另外,里面的 README 跟 FAQ也是很好的文件,對于初學(xué)者如果E文過得去,可以看一下。
2、運行python程序的環(huán)境配置
由于有可能使用到F:\libsvm\libsvm-3.22\tools下的工具,所以的搭建相應(yīng)的環(huán)境,下載兩個軟件python和gnuplot,下面說一下兩個軟件的下載地址和配置:
a.對于python,下載地址在http://www.python.org上尋找下載,我用的是python2.7的,測試成功。安裝在任意目錄就行(我放在F:),將F:\Python27 添加到系統(tǒng)環(huán)境變量中。另外將F:\Python27 中的python.exe添加到F:\libsvm\libsvm-3.22\windows下面即可。
b.對于gnuplot,下載地址在http://www.gnuplot.info/ 。他不用安裝,直接將gp530-20180104-win64-mingw http://www.tatsuromatsuoka.com/gnuplot/Eng/winbin/解壓放到指定目錄即可(我放在F:\libsvm)。然后拷貝其中的gnuplot.exe放到F:\libsvm\libsvm-3.22\windows下面即可。
3、數(shù)據(jù)格式說明
該軟件使用的訓(xùn)練數(shù)據(jù)和檢驗數(shù)據(jù)文件格式如下:
[label] [index1]:[value1] [index2]:[value2] …
[label] [index1]:[value1] [index2]:[value2] …
Label 就是說class(屬于哪一類), 就是你要分類的種類,通常是一些整數(shù)。
index 是有順序的索引,通常是連續(xù)的整數(shù)。就是指特征編號,必須按照升序排列
value 就是特征值,用來 train 的數(shù)據(jù),通常是一堆實數(shù)組成。
(注:修改訓(xùn)練和測試數(shù)據(jù)的格式為程序可以識別的格式)
目標(biāo)值 第一維特征編號:第一維特征值 第二維特征編號:第二維特征值…
目標(biāo)值 第一維特征編號:第一維特征值 第二維特征編號:第二維特征值…
……
例如: 2.3 1:5.6 2:3.2
表示訓(xùn)練用的特征有兩維,第一維是5.6,第二維是3.2,目標(biāo)值是2.3
注意:訓(xùn)練和測試數(shù)據(jù)的格式必須相同,都如上所示。測試數(shù)據(jù)中的目標(biāo)值是為了計算誤差用 )
4、svmscale的用法
svmscale是用來對原始樣本進行縮放的,范圍可以自己定,一般是[0,1]或[-1,1]。縮放的目的主要是:
1)防止某個特征過大或過小,從而在訓(xùn)練中起的作用不平衡;
2)為了計算速度。因為在核計算中,會用到內(nèi)積運算或exp運算,不平衡的數(shù)據(jù)可能造成計算困難。
用法:svmscale [-l lower] [-u upper]
[-y y_lower y_upper]
[-s save_filename
[-r restore_filename] filename
其中,[]中都是可選項:
-l:設(shè)定數(shù)據(jù)下限;lower:設(shè)定的數(shù)據(jù)下限值,缺省為-1
-u:設(shè)定數(shù)據(jù)上限;upper:設(shè)定的數(shù)據(jù)上限值,缺省為 1
-y:是否對目標(biāo)值同時進行縮放;y_lower為下值,y_upper為上限值;
-s save_filename:表示將縮放的規(guī)則保存為文件save_filename;
-r restore_filename:表示將按照已經(jīng)存在的規(guī)則文件restore_filename進行縮放;
filename:待縮放的數(shù)據(jù)文件,文件格式按照libsvm格式。
默認情況下,只需要輸入要縮放的文件名就可以了:比如(已經(jīng)存在的文件為test.txt)
svmscale test.txt
這時,test.txt中的數(shù)據(jù)已經(jīng)變成[-1,1]之間的數(shù)據(jù)了。但是,這樣原來的數(shù)據(jù)就被覆蓋了,為了讓規(guī)劃好的數(shù)據(jù)另存為其他的文件,我們用一個dos的重定向符 > 來另存為(假設(shè)為out.txt):
svmscale test.txt > out.txt
運行后,我們就可以看到目錄下多了一個out.txt文件,那就是規(guī)范后的數(shù)據(jù)。假如,我們想設(shè)定數(shù)據(jù)范圍[0,1],并把規(guī)則保存為test.range文件:
svmscale –l 0 –u 1 –s test.range test.txt > out.txt
這時,目錄下又多了一個test.range文件,可以用記事本打開,下次就可以用-r test.range來載入了。
5、svmtrain的用法
svmtrain我們在前面已經(jīng)接觸過,他主要實現(xiàn)對訓(xùn)練數(shù)據(jù)集的訓(xùn)練,并可以獲得SVM模型。
用法: svmtrain [options] training_set_file [model_file]
其中,options為操作參數(shù),可用的選項即表示的涵義如下所示:
-s設(shè)置svm類型:
0 – C-SVC
1 – v-SVC
2 – one-class-SVM
3 –ε-SVR
4 – n - SVR
-t設(shè)置核函數(shù)類型,默認值為2
0 –線性核:u’*v
1 –多項式核:(g*u’*v+coef0)degree
2 – RBF核:exp(-γ*||u-v||2)
3 – sigmoid核:tanh(γ*u’*v+coef0)
-d degree:設(shè)置多項式核中degree的值,默認為3
-g γ:設(shè)置核函數(shù)中γ的值,默認為1/k,k為特征(或者說是屬性)數(shù);
-r coef 0:設(shè)置核函數(shù)中的coef 0,默認值為0;
-c cost:設(shè)置C-SVC、ε-SVR、n - SVR中從懲罰系數(shù)C,默認值為1;
-n v:設(shè)置v-SVC、one-class-SVM與n - SVR中參數(shù)n,默認值0.5;
-p ε:設(shè)置v-SVR的損失函數(shù)中的e,默認值為0.1;
-m cachesize:設(shè)置cache內(nèi)存大小,以MB為單位,默認值為40;
-e ε:設(shè)置終止準(zhǔn)則中的可容忍偏差,默認值為0.001;
-h shrinking:是否使用啟發(fā)式,可選值為0或1,默認值為1;
-b概率估計:是否計算SVC或SVR的概率估計,可選值0或1,默認0;
-wi weight:對各類樣本的懲罰系數(shù)C加權(quán),默認值為1;
-v n:n折交叉驗證模式;
model_file:可選項,為要保存的結(jié)果文件,稱為模型文件,以便在預(yù)測時使用。
默認情況下,只需要給函數(shù)提供一個樣本文件名就可以了,但為了能保存結(jié)果,還是要提供一個結(jié)果文件名,比如:test.model,則命令為:
svmtrain test.txt test.model
6、 svmpredict的用法
svmpredict是根據(jù)訓(xùn)練獲得的模型,對數(shù)據(jù)集合進行預(yù)測。
用法:svmpredict [options] test_file model_file output_file
其中,options為操作參數(shù),可用的選項即表示的涵義如下所示:
-b probability_estimates——是否需要進行概率估計預(yù)測,可選值為0或者1,默認值為0。
model_file ——是由svmtrain產(chǎn)生的模型文件;
test_file——是要進行預(yù)測的數(shù)據(jù)文件,格式也要符合libsvm格式,即使不知道label的值,也要任意填一個,svmpredict會在output_file中給出正確的label結(jié)果,如果知道label的值,就會輸出正確率;
output_file ——是svmpredict的輸出文件,表示預(yù)測的結(jié)果值。
7、使用libsvm
windows 進入 cmd命令窗口
下載的libsvm包里面已經(jīng)為我們編譯好了(windows)。
進入libsvm\windows,可以看到這幾個exe文件:
a. svm-predict:
使用命令格式:svm-predict.exe test_file mode_file output_file
依照已經(jīng)train好的model ,輸入新的數(shù)據(jù),并輸出預(yù)測新數(shù)據(jù)的類別。
b.svm-scale: 有時候特征值的波動范圍比較大需要對特征數(shù)據(jù)進行縮放,可以縮放到0–1之間(自己定義)。
c.svm-toy:似乎是圖形界面,可以自己畫點,產(chǎn)生數(shù)據(jù)等。
d.svm-train
使用命令格式:svm-train.exe [option] train_file model_file
train 會接受特定格式的輸入,產(chǎn)生一個model 文件。
第一步:可以自己生成數(shù)據(jù),使用svm-toy:
雙擊svm-toy,點擊change可以在畫布上畫點:
點擊run,其實就是train的過程,劃分的區(qū)域:
點擊save可以保存數(shù)據(jù)(假設(shè)保存的數(shù)據(jù)在D://libsvm.txt)。
第二步:使用訓(xùn)練數(shù)據(jù)libsvm.txt進行建模,使用svm-train:
使用cmd命令進入到我們解壓的libsvm目錄中的windows目錄,使用svm-train,如下:
其中,
iter為迭代次數(shù),
nu 是你選擇的核函數(shù)類型的參數(shù),
obj為SVM文件轉(zhuǎn)換為的二次規(guī)劃求解得到的最小值,
rho為判決函數(shù)的偏置項b,
nSV 為標(biāo)準(zhǔn)支持向量個數(shù)介于[0,c]
nBSV為邊界上的支持向量個數(shù)(a[i]=c),
Total nSV為支持向量總個數(shù)(對于兩類來說,因為只有一個分類模型Total nSV = nSV,但是對于多類,這個是各個分類模型的nSV之和
同時在該目錄下會生成一個訓(xùn)練好的model(libsvm.txt.model)可以打開文件查看里面的內(nèi)容,主要包括一些參數(shù)和支持向量等
第三步:使用建好的model進行預(yù)測,使用svm-predict
同時會生成一個輸出文件(libsvm.txt.out),每行代表該行的預(yù)測值類別。
8、參數(shù)優(yōu)化
svm的參數(shù)優(yōu)化很重要,libsvm包里面包含了參數(shù)的優(yōu)化函數(shù),主要是暴力求解參數(shù)。一般來說我們會使用高斯核函數(shù),包含兩個參數(shù)(c 和 g)
使用gird.py文件進行參數(shù)優(yōu)化選擇:
grid.py在libsvm/tools里面,首先需要修改gird.py中的gnuplot文件路徑問題,把文件里的路徑改成gnuplot 存放的目錄:
進入grid.py的相應(yīng)目錄,執(zhí)行g(shù)rid.py D://libsvm.txt
前面兩個分別是c 跟g的值,這時候我們重新訓(xùn)練模型(加上參數(shù)c g)
可以看到,準(zhǔn)確率有了顯著的提升, 其實這些步驟完全可以使用easy.py進行實現(xiàn),同理也需要修改eays.py里面的gnuplot文件路徑問題,把文件里的路徑改成gnuplot 存放的目錄
步驟總結(jié)如下:
1.轉(zhuǎn)換訓(xùn)練數(shù)據(jù)為相應(yīng)的格式。
2.有時候可能需要使用 svm-scale對數(shù)據(jù)進行相應(yīng)的縮放,有利于訓(xùn)練建模。
3.使用grid.py或者easy.py進行參數(shù)優(yōu)化。
4.使用svm-train建模和svm-predict進行預(yù)測。
參考:
https://www.cnblogs.com/zhazhiqiang/p/3599218.html
https://jingyan.baidu.com/article/86fae346f8a7113c49121a3f.html
http://blog.csdn.net/zy_zhengyang/article/details/45009431
總結(jié)
以上是生活随笔為你收集整理的LIBSVM使用方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天上不会掉馅饼!12万的保时捷已下架 购
- 下一篇: 有多大提升?M1 Max 和 M2 Ma