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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

libsvm使用心得

發(fā)布時(shí)間:2025/3/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 libsvm使用心得 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Libsvm使用心得

首先下載LibsvmPythonGnuplot

l???????? libsvm的主頁(yè)http://www.csie.ntu.edu.tw/~cjlin/libsvm/上下載libsvm (我自己用2.86版本)

l???????? python的主頁(yè)http://www.python.org下載 python (我自己用2.5版本)

l???????? gnuplot的主頁(yè)http://www.gnuplot.info/下載gnuplot? (我用4.0版本)

LIBSVM 使用的一般步驟是:

1)按照LIBSVM軟件包所要求的格式準(zhǔn)備數(shù)據(jù)集;????????????????????????????????????

2)對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單的縮放操作;???????????????????????????????????

3)首要考慮選用RBF 核函數(shù);

4)采用交叉驗(yàn)證選擇最佳參數(shù)Cg

5)采用最佳參數(shù)Cg 對(duì)整個(gè)訓(xùn)練集進(jìn)行訓(xùn)練獲取支持向量機(jī)模型;

6)利用獲取的模型進(jìn)行測(cè)試與預(yù)測(cè)。

1LIBSVM使用的數(shù)據(jù)格式

??? 該軟件使用的訓(xùn)練數(shù)據(jù)和檢驗(yàn)數(shù)據(jù)文件格式如下:

[label] [index1]:[value1] [index2]:[value2] ...

[label] [index1]:[value1] [index2]:[value2] ...

一行一條記錄數(shù)據(jù),如:

+1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1

這里(x,y)à((0.708,1,1, -0.320, -0.105, -1), +1)

label 或說是class, 就是你要分類的種類,通常是一些整數(shù)。

index 是有順序的索引,通常是連續(xù)的整數(shù)。

value 就是用來 train 的數(shù)據(jù),通常是一堆實(shí)數(shù)。

?

2)對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單的縮放操作

??? 掃描數(shù)據(jù). 因?yàn)樵紨?shù)據(jù)可能范圍過大或過小, svmscale可以先將數(shù)據(jù)重新scale (縮放) 到適當(dāng)范圍使訓(xùn)練與預(yù)測(cè)速度更快。

??? svmscale.exe的用法:svmscale.exe feature.txt feature.scaled

默認(rèn)的歸一化范圍是[-1,1],可以用參數(shù)-l-u分別調(diào)整上界和下屆,feature.txt是輸入特征文件名 輸出的歸一化特征名為feature.scaled

?

3 考慮選用RBF 核函數(shù)

訓(xùn)練數(shù)據(jù)形成模型(model,實(shí)質(zhì)是算出了wx+b=0中的w,b.

?Svmtrain的用法:svmtrain [options] training_set_file [model_file]

?

其中options涵義如下:

-s svm類型:設(shè)置SVM 類型,默認(rèn)值為0,可選類型有:

0 -- C- SVC

1 -- nu - SVC

2 -- one-class-SVM

3 -- e - SVR

4 -- nu-SVR

-t 核函數(shù)類型:設(shè)置核函數(shù)類型,默認(rèn)值為2,可選類型有:

0 -- 線性核:u'*v

1 -- 多項(xiàng)式核:(g*u'*v+ coef0)degree

2 -- RBF :exp(-||u-v||*||u-v||/g*g)

3 -- sigmoid 核:tanh(g*u'*v+ coef 0)

-d degree:核函數(shù)中的degree設(shè)置,默認(rèn)值為3

-g r(gama):核函數(shù)中的函數(shù)設(shè)置(默認(rèn)1/ k);

-r coef 0:設(shè)置核函數(shù)中的coef0,默認(rèn)值為0

-c cost:設(shè)置C- SVCe - SVRn - SVR中從懲罰系數(shù)C,默認(rèn)值為1

-n nu :設(shè)置nu - SVCone-class-SVM nu - SVR 中參數(shù)nu ,默認(rèn)值0.5

-p e :核寬,設(shè)置e - SVR的損失函數(shù)中的e ,默認(rèn)值為0.1

-m cachesize:設(shè)置cache內(nèi)存大小,以MB為單位(默認(rèn)40)

-e e :設(shè)置終止準(zhǔn)則中的可容忍偏差,默認(rèn)值為0.001

-h shrinking:是否使用啟發(fā)式,可選值為0 1,默認(rèn)值為1

-b 概率估計(jì):是否計(jì)算SVCSVR的概率估計(jì),可選值0 1,默認(rèn)0

-wi weight:對(duì)各類樣本的懲罰系數(shù)C加權(quán),默認(rèn)值為1

-v nn折交叉驗(yàn)證模式。

?

其中-g選項(xiàng)中的k是指輸入數(shù)據(jù)中的屬性數(shù)。操作參數(shù) -v 隨機(jī)地將數(shù)據(jù)剖分為n 部分并計(jì)算交叉檢驗(yàn)準(zhǔn)確度和均方根誤差。以上這些參數(shù)設(shè)置可以按照SVM 的類型和核函數(shù)所支持的參數(shù)進(jìn)行任意組合,如果設(shè)置的參數(shù)在函數(shù)或SVM 類型中沒有也不會(huì)產(chǎn)生影響,程序不會(huì)接受該參數(shù);如果應(yīng)有的參數(shù)設(shè)置不正確,參數(shù)將采用默認(rèn)值training_set_file是要進(jìn)行訓(xùn)練的數(shù)據(jù)集model_file是訓(xùn)練結(jié)束后產(chǎn)生的模型文件,該參數(shù)如果不設(shè)置將采用默認(rèn)的文件名,也可以設(shè)置成自己慣用的文件名。舉個(gè)例子如下:

C:/libsvm-2.85/windows>svmtrain heart_scale

*

optimization finished, #iter = 162

nu = 0.431029

obj = -100.877288, rho = 0.424462

nSV = 132, nBSV = 107

Total nSV = 132

現(xiàn)簡(jiǎn)單對(duì)屏幕回顯信息進(jìn)行說明:

#iter為迭代次數(shù),

nu 與前面的操作參數(shù)-n nu 相同,

objSVM文件轉(zhuǎn)換為的二次規(guī)劃求解得到的最小值,

rho 為判決函數(shù)的常數(shù)項(xiàng)b

nSV 為支持向量個(gè)數(shù),

nBSV為邊界上的支持向量個(gè)數(shù),

Total nSV為支持向量總個(gè)數(shù)。

訓(xùn)練后的模型保存為文件*.model,用記事本打開其內(nèi)容如下:

svm_type c_svc % 訓(xùn)練所采用的svm類型,此處為C- SVC

kernel_type rbf %訓(xùn)練采用的核函數(shù)類型,此處為RBF

gamma 0.0769231 %設(shè)置核函數(shù)中的g ,默認(rèn)值為1/ k

nr_class 2 %分類時(shí)的類別數(shù),此處為兩分類問題

total_sv 132 %總共的支持向量個(gè)數(shù)

rho 0.424462 %決策函數(shù)中的常數(shù)項(xiàng)b

label 1 -1%類別標(biāo)簽

nr_sv 64 68 %各類別標(biāo)簽對(duì)應(yīng)的支持向量個(gè)數(shù)

SV %以下為支持向量

1 1:0.166667 2:1 3:-0.333333 4:-0.433962 5:-0.383562 6:-1 7:-1 8:0.0687023 9:-1 10:-0.903226 11:-1 12:-1 13:1

0.5104832128985164 1:0.125 2:1 3:0.333333 4:-0.320755 5:-0.406393 6:1 7:1 8:0.0839695 9:1 10:-0.806452 12:-0.333333 13:0.5

1 1:0.333333 2:1 3:-1 4:-0.245283 5:-0.506849 6:-1 7:-1 8:0.129771 9:-1 10:-0.16129 12:0.333333 13:-1

1 1:0.208333 2:1 3:0.333333 4:-0.660377 5:-0.525114 6:-1 7:1 8:0.435115 9:-1 10:-0.193548 12:-0.333333 13:1

4)采用交叉驗(yàn)證選擇最佳參數(shù)Cg

??? 通常而言,比較重要的參數(shù)是 gamma (-g) cost (-c) 。而 cross validation (-v)

的參數(shù)常用5。那么如何去選取最優(yōu)的參數(shù)cg呢?libsvm python 子目錄下面的 grid.py 可以幫助我們。 此時(shí)。其中安裝python2.5需要(一般默認(rèn)安裝到c:/python25

下),將gnuplot解壓。安裝解壓完畢后,進(jìn)入/libsvm/tools目錄下,用文本編輯器(記事

本,edit都可以)修改grid.py文件,找到其中關(guān)于gnuplot路徑的那項(xiàng)(其默認(rèn)路徑為

gnuplot_exe=r"c:/tmp/gnuplot/bin/pgnuplot.exe"),根據(jù)實(shí)際路徑進(jìn)行修改,并保存。然

后,將grid.pyC:/Python25目錄下的python.exe文件拷貝到libsvm/windows目錄下,鍵入以下命令:$ python grid.py train.1.scale 執(zhí)行后,即可得到最優(yōu)參數(shù)cg

??? 另外,至于下libsvmpython的接口的問題,在libsvm2.86中林老師已經(jīng)幫助我們解決,在/libsvm/windows/python目錄下自帶了svmc.pyd這個(gè)文件,將該文件文件復(fù)制到

libsvm/python目錄下,同時(shí),也將python.exe文件復(fù)制到該目錄下,鍵入以下命令以檢驗(yàn)效

果(注意:.Py文件中關(guān)于gnuplot路徑的那項(xiàng)路徑一定要根據(jù)實(shí)際路徑修改):

python svm_test.py

??? 如果能看到程序執(zhí)行結(jié)果,說明libsvmpython之間的接口已經(jīng)配置完成,以后就可以直接在python程序里調(diào)用libsvm的函數(shù)了!

5 采用最佳參數(shù)Cg 對(duì)整個(gè)訓(xùn)練集進(jìn)行訓(xùn)練獲取支持向量機(jī)模型

?? $ svmtrain –c x –g x –v x training_set_file [model_file]

?? x為上述得到的最優(yōu)參數(shù)cg的值,v的值一般取5

6)利用獲取的模型進(jìn)行測(cè)試與預(yù)測(cè)

使用Svmtrain訓(xùn)練好的模型進(jìn)行測(cè)試。輸入新的X值,給出SVM預(yù)測(cè)出的Y

?$ Svmpredict? test_file? model_file? output_file

如:./svm-predict heart_scale heart_scale.model heart_scale.out

Accuracy = 86.6667% (234/270) (classification)

這里顯示的是結(jié)果

一個(gè)具體使用的例子。

?? ?libsvm中的heart_scale作為訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù),同時(shí)已經(jīng)將python安裝至c盤,并將grid.py文件中關(guān)于gnuplot路徑的默認(rèn)值修改為實(shí)際解壓縮后的路徑,將

heart_scalegrid.pypython.exe拷貝至/libsvm/windows文件夾下。

./svm-train heart_scale

optimization finished, #iter = 162

nu = 0.431029

obj = -100.877288, rho = 0.424462

nSV = 132, nBSV = 107

Total nSV = 132

此時(shí),已經(jīng)得到heart_scale.model,進(jìn)行預(yù)測(cè):

./svm-predict heart_scale? heart_scale.model ?heart_scale.out

Accuracy = 86.6667% (234/270) (classification)

正確率為Accuracy = 86.6667%

./python grid.py heart_scale

得到最優(yōu)參數(shù)c=2048g=0.0001220703125.

./svm-train -c 2048 -g 0.0001220703125 heart_scale得到model后,由./svm-predict heart_scale? heart_scale.model heart_scale.out得到的正確

率為Accuracy = 85.1852%.這塊還有點(diǎn)迷惑?為什么正確率降低了?

當(dāng)然也可以結(jié)合subset.py 和 easy.py 實(shí)現(xiàn)自動(dòng)化過程。

如果要訓(xùn)練多次,可以寫個(gè)批處理程序省好多事。

這里舉個(gè)例子:

::@ echo off
cls
:: split the data and output the results
for /L %%i in (1,1,1000) do python subset.py b59.txt 546 b59(%%i).in8 b59(%%i).out2

for /L %%i in (1,1,1000) do python easy.py b59(%%i).in8 b59(%%i).out2 >> result89.txt

這段批處理代碼首先調(diào)用subset.py對(duì)文件b59.txt執(zhí)行1000次分層隨機(jī)抽樣(對(duì)數(shù)據(jù)進(jìn)行80-20%分割)然后調(diào)用easy.py 進(jìn)行1000次參數(shù)尋優(yōu),把記錄結(jié)果寫到result89.txt中

(包括1000次訓(xùn)練的分類準(zhǔn)確率和參數(shù)對(duì))。

還可以調(diào)用fselect.py進(jìn)行特征選擇,調(diào)用plotroc.py進(jìn)行roc曲線繪制。

先寫到這里吧,希望能和大家一起學(xué)習(xí)libsvm,進(jìn)一步學(xué)好svm。

?

總結(jié)

以上是生活随笔為你收集整理的libsvm使用心得的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。