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