LibSVM学习(三)——LibSVM使用规范
?? 其實,這部分寫也是多余,google一下“l(fā)ibsvm使用”,就會N多的資源,但是,為了讓你少費點心,在這里就簡單的介紹一下,有不清楚的只有動動你的mouse了。需要說明的是,2.89版本以前,都是svmscale、svmtrain和svmpredict,最新的是svm-scale、svm-train和svm-predict,要是用不習慣,只需要把那四個exe文件名去掉中間的短橫線,改成svmscale、svmtrain和svmpredict就可以了,我們還是按原來函數(shù)名的講。
?
1. libSVM的數(shù)據(jù)格式
Label 1:value 2:value ….
?
Label:是類別的標識,比如上節(jié)train.model中提到的1 -1,你可以自己隨意定,比如-10,0,15。當然,如果是回歸,這是目標值,就要實事求是了。
Value:就是要訓練的數(shù)據(jù),從分類的角度來說就是特征值,數(shù)據(jù)之間用空格隔開
?
比如: -15 1:0.708 2:1056 3:-0.3333
?
需要注意的是,如果特征值為0,特征冒號前面的(姑且稱做序號)可以不連續(xù)。如:
?????? -15 1:0.708 3:-0.3333
表明第2個特征值為0,從編程的角度來說,這樣做可以減少內(nèi)存的使用,并提高做矩陣內(nèi)積時的運算速度。我們平時在matlab中產(chǎn)生的數(shù)據(jù)都是沒有序號的常規(guī)矩陣,所以為了方便最好編一個程序進行轉化。
?
?
?
2. svmscale的用法
?
??? svmscale是用來對原始樣本進行縮放的,范圍可以自己定,一般是[0,1]或[-1,1]??s放的目的主要是
1)防止某個特征過大或過小,從而在訓練中起的作用不平衡;
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ù)據(jù)下限;lower:設定的數(shù)據(jù)下限值,缺省為-1
???????? -u:設定數(shù)據(jù)上限;upper:設定的數(shù)據(jù)上限值,缺省為 1
???????? -y:是否對目標值同時進行縮放;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的重定向符 > 來另存為(假設為out.txt):
????????
??????????????????????? svmscale test.txt > out.txt
?
?? 運行后,我們就可以看到目錄下多了一個out.txt文件,那就是規(guī)范后的數(shù)據(jù)。假如,我們想設定數(shù)據(jù)范圍[0,1],并把規(guī)則保存為test.range文件:
???????????????????????? svmscale –l 0 –u 1 –s test.range test.txt > out.txt
?
這時,目錄下又多了一個test.range文件,可以用記事本打開,下次就可以用-r test.range來載入了。
?
?
3. svmtrain的用法
?
????? svmtrain我們在前面已經(jīng)接觸過,他主要實現(xiàn)對訓練數(shù)據(jù)集的訓練,并可以獲得SVM模型。
?
??????? 用法: svmtrain [options] training_set_file [model_file]
?
其中,options為操作參數(shù),可用的選項即表示的涵義如下所示:
-s 設置svm類型:
???????? 0 – C-SVC
???????? 1 – v-SVC
???????? 2 – one-class-SVM
???????? 3 – ε-SVR
???????? 4 – n - SVR
-t 設置核函數(shù)類型,默認值為2
???????? 0 -- 線性核:u'*v
???????? 1 -- 多項式核: (g*u'*v+ coef 0)degree
???????? 2 -- RBF 核:exp(-γ*||u-v||2)
???????? 3 -- sigmoid 核:tanh(γ*u'*v+ coef 0)
-d degree: 設置多項式核中degree的值,默認為3
-gγ: 設置核函數(shù)中γ的值,默認為1/k,k為特征(或者說是屬性)數(shù);
???????? -r coef 0:設置核函數(shù)中的coef 0,默認值為0;
???????? -c cost:設置C-SVC、ε-SVR、n - SVR中從懲罰系數(shù)C,默認值為1;
???????? -n v :設置v-SVC、one-class-SVM 與n - SVR 中參數(shù)n ,默認值0.5;
???????? -p ε :設置v-SVR的損失函數(shù)中的e ,默認值為0.1;
???????? -m cachesize:設置cache內(nèi)存大小,以MB為單位,默認值為40;
???????? -e ε :設置終止準則中的可容忍偏差,默認值為0.001;
???????? -h shrinking:是否使用啟發(fā)式,可選值為0 或1,默認值為1;
???????? -b 概率估計:是否計算SVC或SVR的概率估計,可選值0 或1,默認0;
???????? -wi weight:對各類樣本的懲罰系數(shù)C加權,默認值為1;
???????? -v n:n折交叉驗證模式;
???????? model_file:可選項,為要保存的結果文件,稱為模型文件,以便在預測時使用。
????
??? 默認情況下,只需要給函數(shù)提供一個樣本文件名就可以了,但為了能保存結果,還是要提供一個結果文件名,比如:test.model,則命令為:
???????????????????????????????????????? svmtrain test.txt test.model
?
結果說明見LibSVM學習(二)。
?
4. svmpredict 的用法
?
??? svmpredict 是根據(jù)訓練獲得的模型,對數(shù)據(jù)集合進行預測。
?
?? 用法:svmpredict [options] test_file model_file output_file
?
?? 其中,options為操作參數(shù),可用的選項即表示的涵義如下所示:
-b probability_estimates——是否需要進行概率估計預測,可選值為0 或者1,默認值為0。
?
model_file ——是由svmtrain 產(chǎn)生的模型文件;
test_file—— 是要進行預測的數(shù)據(jù)文件,格式也要符合libsvm格式,即使不知道label的值,也要任意填一個,svmpredict會在output_file中給出正確的label結果,如果知道label的值,就會輸出正確率;
output_file ——是svmpredict 的輸出文件,表示預測的結果值。
?
?? 至此,主要的幾個接口已經(jīng)講完了,滿足一般的應用不成問題。對于要做研究的,還需要深入到svm.cpp文件內(nèi)部,看看都做了什么。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/flydreamGG/archive/2009/08/21/4468995.aspx
總結
以上是生活随笔為你收集整理的LibSVM学习(三)——LibSVM使用规范的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LibSVM学习(二)——第一次体验li
- 下一篇: libsvm学习 all