日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

libsvm 使用介绍

發布時間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.pygrid.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,可以自己隨意定,比如-10015。當然,如果是回歸,這是目標值,就要實事求是了。

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)采用交叉驗證選擇懲罰系數Cg的最佳參數;

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.0g 0.03125,正確率mse84%。

還可以得到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/kk為特征(或者說是屬性)數;

????????-r coef 0:設置核函數中的coef 0,默認值為0

????????-c cost:設置C-SVC、ε-SVRn - SVR中從懲罰系數C,默認值為1

????????-n v:設置v-SVCone-class-SVMn - SVR中參數n ,默認值0.5

????????-pε:設置v-SVR的損失函數中的e,默認值為0.1

????????-m cachesize:設置cache內存大小,以MB為單位,默認值為40

????????-eε:設置終止準則中的可容忍偏差,默認值為0.001

????????-h shrinking:是否使用啟發式,可選值為01,默認值為1

????????-b概率估計:是否計算SVCSVR的概率估計,可選值01,默認0

????????-wi weight:對各類樣本的懲罰系數C加權,默認值為1

????????-v nn折交叉驗證模式;

????????model_file:可選項,為要保存的結果文件,稱為模型文件,以便在預測時使用。???

????默認情況下,只需要給函數提供一個樣本文件名就可以了,但為了能保存結果,還是要提供一個結果文件名,比如:test.model,則命令為:

???????????????????????????????????????? svm-train heart.txttest.model

?

利用上步所得到的的參數 c 2.0g 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 使用介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。