libsvm 使用介绍
一、介紹:
??????? LIBSVM是臺灣大學林智仁(Chih-Jen Lin)副教授等開發設計的一個簡單、易于使用和快速有效的SVM模式識別與回歸的軟件包,他不但提供了編譯好的可在Windows系列系統的執行文件,還提供了源代碼,方便改進、修改以及在其它操作系統上應用;該軟件還有一個特點,就是對SVM所涉及的參數調節相對比較少,提供了很多的默認參數,利用這些默認參數就可以解決很多問題;并且提供了交互檢驗(Cross Validation)的功能。
二、安裝使用
1、下載
總共需要三個軟件:libsvm, python, gnuplot。(python安裝就不用說了,記得加python路徑到環境變量)
gnuplot是用來畫圖用的。可以直接去這里下載http://download.csdn.net/detail/kuaile123/6252717
放置路徑如下:
E:\labSoftWare\gp373w32
E:\labSoftWare\libsvm-2.9.tar\libsvm-2.9
2、修改參數
在c:\libsvm-2.9\tools中修改easy.py和grid.py的路徑:
①打開easy.py 修改地方如下:
?else:
??????? # example for windows
?svmscale_exe = r"E:\labSoftWare\libsvm-2.9.tar\libsvm-2.9\windows\svm-scale.exe"
?svmtrain_exe = r"E:\labSoftWare\libsvm-2.9.tar\libsvm-2.9\windows\svm-train.exe"
?svmpredict_exe = r"E:\labSoftWare\libsvm-2.9.tar\libsvm-2.9\windows\svm-predict.exe"
?gnuplot_exe = r"E:\labSoftWare\gp373w32\pgnuplot.exe"
?grid_py = r"E:\labSoftWare\libsvm-2.9.tar\libsvm-2.9\tools\grid.py"
②點中grid.py修改路徑如下:
else:
?????? # example for windows
?????? svmtrain_exe = r"E:\labSoftWare\libsvm-2.9.tar\libsvm-2.9\windows\svm-train.exe"
?????? gnuplot_exe = r"E:\labSoftWare\gp373w32\pgnuplot.exe"
三、訓練步驟
里面的語法和參數說明:按照 E:\labSoftWare\libsvm-2.9.tar\libsvm-2.9和E:\labSoftWare\libsvm-2.9.tar\libsvm-2.9\tools下的README
(1)按照LIBSVM軟件包所要求的格式準備數據集;
libSVM的數據格式
Label 1:value 2:value ….
?Label:是類別的標識,比如1 -1,可以自己隨意定,比如-10,0,15。當然,如果是回歸,這是目標值,就要實事求是了。
Value:就是要訓練的數據,從分類的角度來說就是特征值,數據之間用空格隔開
?需要注意的是,如果特征值為0,特征冒號前面的(姑且稱做序號)可以不連續。如:
?????? -15 1:0.708 3:-0.3333
表明第2個特征值為0,從編程的角度來說,這樣做可以減少內存的使用,并提高做矩陣內積時的運算速度。
準備的數據存放于txt中,如 heart.txt
可以在這里下載http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/heart
(2)對數據進行縮放操作;
svm-scale是用來對原始樣本進行縮放的,范圍可以自己定,一般是[0,1]或[-1,1]。縮放的目的主要是
1)防止某個特征過大或過小,從而在訓練中起的作用不平衡;
2)為了計算速度。因為在核計算中,會用到內積運算或exp運算,不平衡的數據可能造成計算困難。
用法:svm-scale [-l lower] [-u upper]
?????????????????????????[-y y_lower y_upper]
?????????????????????????[-s save_filename]
?????????????????????????[-r restore_filename] filename
其中,[]中都是可選項:
???????? -l:設定數據下限;lower:設定的數據下限值,缺省為-1
???????? -u:設定數據上限;upper:設定的數據上限值,缺省為 1
???????? -y:是否對目標值同時進行縮放;y_lower為下限值,y_upper為上限值;
???????? -s save_filename:表示將縮放的規則保存為文件save_filename;
???????? -r restore_filename:表示將按照已經存在的規則文件restore_filename進行縮放;
???????? filename:待縮放的數據文件,文件格式按照libsvm格式。
?
默認情況下,只需要輸入要縮放的文件名就可以了:????
???????????????????????? svm-scaleheart.txt
這時,test.txt中的數據已經變成[-1,1]之間的數據了。但是,這樣原來的數據就被覆蓋了,為了讓規劃好的數據另存為其他的文件,我們用一個dos的重定向符 > 來另存為(假設為out.txt):
???????????????????????????????? svm-scaleheart.txt > out.txt
????運行后,我們就可以看到目錄下多了一個out.txt文件,那就是規范后的數據。假如,我們想設定數據范圍[0,1],并把規則保存為heart.range文件:
???????????????????????? svm-scale –l 0 –u 1 -sheart.range heart.txt > out.txt?
?
將數據heart.txt保存在E:\labSoftWare\libsvm-2.9.tar\libsvm-2.9\windows文件夾下
svm-scale -l 0 -u 1 heart.txt > heart.scale.txt
(3)選用適當的核函數;
(4)采用交叉驗證選擇懲罰系數C與g的最佳參數;
cd 到所要保存文件的路徑下 輸入
python E:\labSoftWare\libsvm-2.9.tar\libsvm-2.9\tools\grid.py -log2c -10,10,1 -log2g -10,10,1 E:\labSoftWare\libsvm-2.9.tar\libsvm-2.9\windows\heart.scale.txt > test.txt
會出錯顯示 libsvm NameError: global name 'split' is not defined
原因是split使用語法錯誤,跟python版本不一致造成的,將split(argv[i],",") 都替換為argv[i].split(",")
這個需要一段時間,產生一個test.txt文件,其中記錄了參數尋優的結果
可以看到,參數分別為c 2.0,g 0.03125,正確率mse為84%。
還可以得到heart.scale.txt.png
(5)采用獲得的最佳參數對整個訓練集進行訓練獲取支持向量機模型;
svm-train用法:
用法: svm-train [options] training_set_file [model_file]
其中,options為操作參數,可用的選項即表示的涵義如下所示:
-s設置svm類型:
????????0 – C-SVC
????????1 – v-SVC
????????2 – one-class-SVM
????????3 –ε-SVR
????????4 – n - SVR
-t設置核函數類型,默認值為2
???????? 0 -- 線性核:u'*v
?????????1 -- 多項式核: (g*u'*v+coef0)degree
?????????2 -- RBF 核:exp(-γ*||u-v||2)
?????????3 -- sigmoid 核:tanh(γ*u'*v+coef0)
-d degree:設置多項式核中degree的值,默認為3
-gγ:設置核函數中γ的值,默認為1/k,k為特征(或者說是屬性)數;
????????-r coef 0:設置核函數中的coef 0,默認值為0;
????????-c cost:設置C-SVC、ε-SVR、n - SVR中從懲罰系數C,默認值為1;
????????-n v:設置v-SVC、one-class-SVM與n - SVR中參數n ,默認值0.5;
????????-pε:設置v-SVR的損失函數中的e,默認值為0.1;
????????-m cachesize:設置cache內存大小,以MB為單位,默認值為40;
????????-eε:設置終止準則中的可容忍偏差,默認值為0.001;
????????-h shrinking:是否使用啟發式,可選值為0或1,默認值為1;
????????-b概率估計:是否計算SVC或SVR的概率估計,可選值0或1,默認0;
????????-wi weight:對各類樣本的懲罰系數C加權,默認值為1;
????????-v n:n折交叉驗證模式;
????????model_file:可選項,為要保存的結果文件,稱為模型文件,以便在預測時使用。???
????默認情況下,只需要給函數提供一個樣本文件名就可以了,但為了能保存結果,還是要提供一個結果文件名,比如:test.model,則命令為:
???????????????????????????????????????? svm-train heart.txttest.model
?
利用上步所得到的的參數 c 2.0,g 0.03125?對heart.scale.txt進行訓練,cd 到 E:\labSoftWare\libsvm-2.9.tar\libsvm-2.9\windows 下輸入:
svm-train –c 2.0 –g 0.03125 -b 1? heart.scale.txt heart.scale.txt.model
注意此處這里會生成 heart.scale.txt.model
注意要加 -b 1 不然進行c++連接訓練時會出錯。probability_estimates train a SVR model for probability estimates?
(6)利用獲取的模型進行測試與預測。
svm-predict 是根據訓練獲得的模型,對數據集合進行預測。?? 用法:svm-predict [options] test_file model_file output_file?
?? 其中,options為操作參數,可用的選項即表示的涵義如下所示:
-b probability_estimates——是否需要進行概率估計預測,可選值為0或者1,默認值為0。
model_file ——是由svmtrain產生的模型文件;
test_file——是要進行預測的數據文件,格式也要符合libsvm格式,即使不知道label的值,也要任意填一個,svmpredict會在output_file中給出正確的label結果,如果知道label的值,就會輸出正確率;
output_file ——是svmpredict的輸出文件,表示預測的結果值。?
?
如在一個test1.txt文件輸入一個符合規則的值,輸出結果保存在result1.txt中,則 cmd下輸入 svm-predict test1.txt heart.scale.txt.model result1.txt
?
四、svm.cpp 等的理解
自己下載:
http://download.csdn.net/detail/kuaile123/6253085
更多理解參考:http://xgli0910.blog.163.com/blog/static/469621682012313101327710/
總結
以上是生活随笔為你收集整理的libsvm 使用介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: libSVM介绍
- 下一篇: 面试题整理 1:将一个字符串转换为整数