九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
libsvm的使用(Python、gnuplot的下載安裝)

Pythonhttps://www.python.org/downloads/ 
Gnuplot: 
https://sourceforge.net/projects/gnuplot/files/gnuplot/ 
LIBSVM: 
http://www.csie.ntu.edu.tw/~cjlin/ 
測試數(shù)據(jù)集:http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/


1、libSVM的數(shù)據(jù)格式轉(zhuǎn)換:

數(shù)據(jù)有很多存儲格式,txt格式,xls格式,data格式,csv格式等等,這些數(shù)據(jù)格式之間都可以互相轉(zhuǎn)換,在此介紹一下xls如何生成libsvm格式的數(shù)據(jù)。

生成libsvm數(shù)據(jù)有兩種方法,在此介紹使用FormatDatalibsvm工具,因?yàn)檫@種方法直觀簡單,效率高,方便易行。其實(shí)只是利用了excel的宏。

一、.xls格式——>svm格式的轉(zhuǎn)換

①    下載FormatDatalibsvm.xls  地址如下:

http://download.csdn.net/detail/smilehehe110/9702456

準(zhǔn)備好Excel數(shù)據(jù)集

如果是csv格式的可以先通過Excel轉(zhuǎn)換成.xls格式,具體方法見下面。

打開FormatDatalibsvm.xls

注意上方會(huì)出現(xiàn)一個(gè)框框提醒你宏已經(jīng)被禁用,一定要點(diǎn)擊更改,啟用宏。

加載data

可以直接將數(shù)據(jù)復(fù)制到topleft單元格,注意復(fù)制的時(shí)候復(fù)制數(shù)據(jù)區(qū)域相關(guān)的屬性,要復(fù)制屬性名稱,否則會(huì)崩潰。

轉(zhuǎn)換

Excel界面點(diǎn)擊

“工具”—>”宏”—>”宏”—>FormatDatatoLibsvm>執(zhí)行

“視圖”—>”宏”—>”查看宏”——>FormatDatatoLibsvm>執(zhí)行

可以看到數(shù)據(jù)在進(jìn)行轉(zhuǎn)換和移動(dòng),稍等一下就可以看到數(shù)據(jù)變成了libsvm格式。

等數(shù)據(jù)轉(zhuǎn)換完成后,將該文件保存為.txt文件。這時(shí)數(shù)據(jù)轉(zhuǎn)換的問題就解決了。

csvxls轉(zhuǎn)換

有時(shí)候一開始拿到的數(shù)據(jù)時(shí)csv格式的,想把它轉(zhuǎn)換成Excel原始格式,可以按照以下方式進(jìn)行:

②   打開Excel,新建一空白文檔。

②   在界面中單擊“數(shù)據(jù)”—>“自文本”。找到并選中csv文件“源文件.csv”,單擊“導(dǎo)入”。

操作會(huì)彈出一個(gè)窗口,不用做任何操作,點(diǎn)擊下一步。

③在下一個(gè)界面根據(jù)分隔符類型選擇相應(yīng)符號,如逗號、分號等,選擇后點(diǎn)擊下一步

③   接著點(diǎn)擊下一步,如果需要更改數(shù)據(jù)格式可做調(diào)整。

④   點(diǎn)擊完成,彈出一個(gè)窗口,選擇數(shù)據(jù)的存放位置,完成操作,可以看到數(shù)據(jù)變成了最原始的xls格式。 

 

二、.txt格式——>svm格式的轉(zhuǎn)換

        首先說明的是,這里所提的.txt文本數(shù)據(jù)是指數(shù)據(jù)文件帶有逗號、空格、頓號、分號等數(shù)據(jù)分離符號的數(shù)據(jù)文件。因?yàn)槠溆梅杹矸蛛x,導(dǎo)致所有數(shù)據(jù)項(xiàng)都?xì)w類為一個(gè)屬性,無法實(shí)現(xiàn)上面2步驟的格式輸入,也就無法實(shí)現(xiàn)正確結(jié)果格式的輸出了。

      為了解決該問題,轉(zhuǎn)換該過程與上面過程的最大不同就在于:

在打開該.txt文件的時(shí)候根據(jù)文本數(shù)據(jù)本身的數(shù)據(jù)特點(diǎn)將其所包含的逗號、分號、制表符等數(shù)據(jù)分離的符號去掉;

具體的做法是:轉(zhuǎn)換運(yùn)行FormatDataLibsvm.xls,文件”->“打開”->選擇要打開的data.txt文件,接著在文本導(dǎo)入向?qū)е懈鶕?jù)data.txt文件本身的數(shù)據(jù)特點(diǎn)選擇原始數(shù)據(jù)類型(分隔符號);接著選擇分隔符號的類型(目的是使得該數(shù)據(jù)分成獨(dú)立的一列列數(shù)據(jù),分離成功的話,在數(shù)據(jù)預(yù)覽中將可以看到一列列分離獨(dú)立的數(shù)據(jù)) :選擇列數(shù)據(jù)格式常規(guī)->完成;

這時(shí)候只要調(diào)整上面過程的數(shù)據(jù)格式,重復(fù)其后面的步驟2、3操作即可。

總結(jié):數(shù)據(jù)最終要從.xlslibSVM進(jìn)行格式轉(zhuǎn)換

2、(Subset.py的用法)樣本子集的選擇:

1、定位到tools目錄下

cd  C:\libsvm-3.21\tools

2、>python subset.py  heart_scale 200  heart_train  heart_test

結(jié)果:tools目錄下多出2個(gè)文件夾heart_train和heart_test文件,數(shù)據(jù)集大小分別為200和70(原數(shù)據(jù)集heart_scale有270條數(shù)據(jù))

 

Python:

Usage:  subset.py  [options]  dataset number  [output1] [output2]

options:

-s method : method of selection (default 0)

     0 -- stratifiedselection (classification only)

     1 -- randomselection

 

output1 : the subset (optional)

output2 : the rest of data (optional)

Example:

>python  subset.py  heart_scale  100  file1  file2

3、grid.py的用法)參數(shù)選擇:

     Python:

Usage:  grid.py  [grid_options]  [svm_options] dataset

  grid_options :

-log2c {begin,end,step| "null"} : set the range of c (default -5,15,2)

    begin,end,step --c_range = 2^{begin,...,begin+k*step,...,end}

   "null"         -- do notgrid with c

-log2g {begin,end,step| "null"} : set the range of g (default 3,-15,-2)

    begin,end,step --g_range = 2^{begin,...,begin+k*step,...,end}

   "null"         -- do notgrid with g

-v n : n-fold crossvalidation (default 5)

-svmtrain {pathname} : setsvm executable path and name

-gnuplot {pathname |"null"} :

    pathname -- setgnuplot executable path and name

   "null"   -- do not plot

-out {pathname |"null"} : (default dataset.out)

    pathname -- setoutput file path and name

   "null"   -- do notoutput file

-png pathname : setgraphic output file path and name (default dataset.png)

-resume [pathname] :resume the grid task using an existing output file (default pathname isdataset.out)

 

svm_options : additionaloptions for svm-train

example:

>python  grid.py -log2c -5,5,1-log2g -4,0,1 -v 5 -m 300  heart_scale

>python grid.py -log2c -5,5,1 -svmtrain "c:\ProgramFiles\libsvm\windows\svm-train.exe" -gnuplotc:\tmp\gnuplot\binary\pgnuplot.exe -v 10 heart_scale

Output: two files

dataset.png: the CV accuracy contour plot generated bygnuplot

dataset.out: the CV accuracy at each (log2(C),log2(gamma))

 

The following example saves running time by loading theoutput file of a previous run.

> python grid.py -log2c -7,7,1 -log2g -5,2,1 -v 5 -resumeheart_scale.out heart_scale

選擇最佳參數(shù)cg

通常而言,比較重要的參數(shù)是 gamma(-g) 跟 cost(-c) 。而 crossvalidation (-v)的參數(shù)常用5。

       那么如何去選取最優(yōu)的參數(shù)cg呢? 

Windows用戶,需要安裝gnuplot,非解壓

      libsvm 的 tools目錄下的 grid.py 可以幫助我們。 此時(shí),其中需要安裝python3.5(一般默認(rèn)安裝到c:/python35-32下),安裝成功之后修改環(huán)境變量,將Python的安裝路徑添加到計(jì)算機(jī)的環(huán)境變量path中去;安裝gnuplot(我安裝到了c:/gnuplot504)

        安裝完畢后,進(jìn)入/libsvm/tools目錄下,用文本編輯器(最好是IDLE)修改grid.py文件,找到其中關(guān)于gnuplot路徑(c:/gnuplot504/bin)的那項(xiàng)(其默認(rèn)路徑為gnuplot_exe=r"c:/tmp/gnuplot/bin/pgnuplot.exe"),根據(jù)實(shí)際路徑進(jìn)行修改,本例即用"c:/gnuplot504/bin/gnnuplot.exe"代替"c:/tmp/gnuplot/bin/pgnuplot.exe",并保存。

   (注意看清楚bin目錄下的exe文件名稱,新版舊版有所差別

然后,將grid.py和樣本文件(heart_scale)文件置于同一目錄下。

打開cmd,先定位到grid.py所在文件夾的位置:

cmd窗口中鍵入:cd C:\libsvm-3.21\tools

python  grid.py heart-scale 執(zhí)行后,即可得到最優(yōu)參數(shù)c和g。

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

不修改路徑的話,需要執(zhí)行程序的時(shí)候給出詳細(xì)路徑信息:

>grid.py  -log2c -5,5,1  -svmtrain"C:\libsvm-3.21\windows\svm-train.exe"  -gnuplot C:\gnuplot504\bin\gnuplot.exe  -v  10  heart_scale

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

1、修改gnuplot的路徑

C:\gnuplot504\bin\gnuplot.exe

2、定位到tools目錄下

cd  C:\libsvm-3.21\tools

3、>python  grid.py heart-scale

     結(jié)果輸出:  grid.py輸出兩個(gè)文件 

    1. dataset.png: the CV accuracy contourplot generated by gnuplot,測試heart_scale,輸出heart_scale.png圖像在tools目錄下,該圖像顯示了數(shù)據(jù)集名稱以及最優(yōu)(c,g)和best_rate。

   2. dataset.out:  the CV accuracy ateach (log2(C),log2(gamma)),輸出每一個(gè)(c,g)組以及交叉驗(yàn)證結(jié)果。

   以下為中間執(zhí)行結(jié)果:

   

使用grid.py是默認(rèn)的取值范圍,可以根據(jù)實(shí)際情況進(jìn)行修改。

關(guān)于SVM參數(shù)的優(yōu)化選取,國際上并沒有公認(rèn)統(tǒng)一的最好的方法,現(xiàn)在目前常用的方法就是讓cg在一定的范圍內(nèi)取值,對于取定的c和g對于把訓(xùn)練集作為原始數(shù)據(jù)集利用K-CV方法得到在此組c和g下訓(xùn)練集驗(yàn)證分類準(zhǔn)確率,最終取使得訓(xùn)練集驗(yàn)證分類準(zhǔn)確率最高的那組c和g做為最佳的參數(shù)。

但有一個(gè)問題就是可能會(huì)有多組的c和g對應(yīng)于最高的驗(yàn)證分類準(zhǔn)確率,這種情況怎么處理?

這里采用的手段是選取能夠達(dá)到最高驗(yàn)證分類準(zhǔn)確率中參數(shù)c最小的那組c和g做為最佳的參數(shù),如果對應(yīng)最小的c有多組g,就選取搜索到的第一組c和g做為最佳的參數(shù)。

這樣做的理由是:過高的c會(huì)導(dǎo)致過學(xué)習(xí)狀態(tài)發(fā)生,即訓(xùn)練集分類準(zhǔn)確率很高而測試集分類準(zhǔn)確率很低(分類器的泛化能力降低),所以在能夠達(dá)到最高驗(yàn)證分類準(zhǔn)確率中的所有的成對的c和g中認(rèn)為較小的懲罰參數(shù)c是更佳的選擇對象。

4、(checkdata.py的用法)LibSVM格式檢查:

  Usage:  checkdata.py  dataset

  > cat bad_data

1 3:1 2:4

> python  checkdata.py  bad_data

line 1: feature indices must be in an ascending order,previous/current features 3:1 2:4

Found 1 lines with error.

 

1、定位到tools目錄下

cd  C:\libsvm-3.21\tools

2、>python checkdata.pyheart_scale


5、Easy.py的用法)一條龍服務(wù):

文件easy.py對樣本文件做了“一條龍服務(wù)”,從參數(shù)優(yōu)選,到文件預(yù)測。因此,其對grid.py、svm-trainsvm-scalesvm-predict都進(jìn)行了調(diào)用(當(dāng)然還有必須的pythongnuplot)。因此,運(yùn)行easy.py需要保證這些文件的路徑都要正確。當(dāng)然還需要樣本文件和預(yù)測文件,這里樣本文件還是用heart_scale,預(yù)測文件我們復(fù)制一份然后改名heart_test。

(注意:easy.py和樣本文件(heart_scale)、測試文件(heart_test)位于同一目錄tools下)

1、修改gnuplot的路徑

    C:\gnuplot504\bin\gnuplot.exe

2、定位到tools目錄下

cd  C:\libsvm-3.21\tools

3、> python easy.py  heart_scale heart_test


參數(shù)解讀:

Scaling training data...歸一化數(shù)據(jù)

Cross validation...在訓(xùn)練集上做交叉驗(yàn)證

Best c=2048.0,g=0.0001220703125  CV rate=84.0741

(通過網(wǎng)格搜索法對每個(gè)參數(shù)對做交叉驗(yàn)證,選擇交叉驗(yàn)證精度最高所對應(yīng)的參數(shù).)

Training... ( 將上面得到的參數(shù)對在訓(xùn)練集合上做模型訓(xùn)練)

Output model:  heart_scale.model  (保存模型到文件)

Scaling testingdata...  (歸一化數(shù)據(jù))

Testing... (用訓(xùn)練得出的模型對測試集進(jìn)行測試)

Accuracy = 87.8049%(36/41) (classification)(測試的精度)

Output prediction: heart_test.predict(輸出預(yù)測結(jié)果)

(在交叉驗(yàn)證過程中,會(huì)有一個(gè)圖形界面顯示參數(shù)選擇的情況,這就是gnuplot.exe的作用了)

SVM-scale操作:

用法:svmscale [-l  lower] [-u  upper] [-y  y_lower y_upper] 

[-s  save_filename] [-r restore_filename]  filename 

(缺省值: lower = -1,upper = 1,沒有對y進(jìn)行縮放) 其中, 

-l:數(shù)據(jù)下限標(biāo)記;lower:縮放后數(shù)據(jù)下限; -u:數(shù)據(jù)上限標(biāo)記;upper:縮放后數(shù)據(jù)上限; 

-y:是否對目標(biāo)值同時(shí)進(jìn)行縮放;y_lower為下限值,y_upper為上限值; 

-s save_filename:表示將縮放的規(guī)則保存為文件save_filename; 

-r restore_filename:表示將縮放規(guī)則文件restore_filename載入后按此縮放; filename:待縮放的數(shù)據(jù)文件(要求滿足前面所述的格式)。

數(shù)據(jù)集的縮放結(jié)果在此情況下通過DOS窗口輸出,當(dāng)然也可以通過DOS的文件重定向符號“>”將結(jié)果另存為指定的文件。

使用實(shí)例: 

    1)svm-scale –s  train3.range  train3> train3.scale  

表示采用缺省值(即對屬性值縮放到[1,1]?的范圍,對目標(biāo)值不進(jìn)行縮放)對數(shù)據(jù)集train3進(jìn)行縮放操作,其結(jié)果縮放規(guī)則文件保存為train3.range,縮放集的縮放結(jié)果保存為train3.scale。 

    2)svm-scale  -r train3.range  test3> test3.scale 

表示載入縮放規(guī)則train3.range后按照其上下限對應(yīng)的特征值和上下限值線性的地對數(shù)據(jù)集test3進(jìn)行縮放,結(jié)果保存為test3.scale。

    3)svm-scale  tran4>train4_scale  (默認(rèn)縮放范圍[-1,1]

SVM-train操作

svmtrain實(shí)現(xiàn)對訓(xùn)練數(shù)據(jù)集的訓(xùn)練,獲得SVM模型。 

用法: svmtrain  [options] training_set_file  [model_file] 

options(操作參數(shù)):可用的選項(xiàng)即表示的涵義如下所示 

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

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

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

-g γ:設(shè)置核函數(shù)中的γ,默認(rèn)值為1/k; -r 0coef:設(shè)置核函數(shù)中的0coef,默認(rèn)值為0;  

-c cost:設(shè)置CSVC?、SVRε?、SVRν?中從懲罰系數(shù)C,默認(rèn)值為1; -n ν:設(shè)置SVCν?、oneclassSVM??與SVRν? 中參數(shù)ν,默認(rèn)值0.5;

 -p ε:設(shè)置SVRν?的損失函數(shù)中的ε,默認(rèn)值為0.1; 

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

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

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

-b 概率估計(jì):是否計(jì)算SVC或SVR的概率估計(jì),可選值0或1,默認(rèn)0; -wi weight:對各類樣本的懲罰系數(shù)C加權(quán),默認(rèn)值為1;

 -v n:n折交叉驗(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è)置成自己慣用的文件名。

使用實(shí)例: 

1)svmtrain  train3.scale  train3.model 

訓(xùn)練train3.scale,將模型保存于文件train3.model,并在dos窗口中輸出如下結(jié)果: 

optimization finished, #iter = 1756 nu = 0.464223 

obj = -551.002342, rho = -0.337784 nSV = 604, nBSV = 557 Total nSV = 604

SVM-predict操作

svmpredict是根據(jù)訓(xùn)練獲得的模型,對數(shù)據(jù)集合進(jìn)行預(yù)測。 

用法:svmpredict  [options] test_file  model_file output_file 

options(操作參數(shù)): 

-b probability_estimates:是否需要進(jìn)行概率估計(jì)預(yù)測,可選值為0或者1,默認(rèn)值為0。 

model_file是由svmtrain產(chǎn)生的模型文件;

test_file是要進(jìn)行預(yù)測的數(shù)據(jù)文件;即使不知道label的值,也要任意填一個(gè)

output_file是svmpredict的輸出文件,表示預(yù)測的結(jié)果值。

  

(注:Windows文件夾下有*.exe文件,tools文件夾下有*.py,為了方便運(yùn)行測試,可以把所有的*.py都移到Windows下,然后一直在windows下運(yùn)行,不用更換路徑;  新舊版某些*.exe文件名所有差別,以windows文件夾下命名方式為準(zhǔn))

 

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
libsvm使用說明
SVM訓(xùn)練結(jié)果參數(shù)說明?訓(xùn)練參數(shù)說明?歸一化加快速度和提升準(zhǔn)確率?歸一化還原
libsvm使用方法總結(jié)
LIBSVM使用介紹
Libsvm 使用筆記
LibSVM學(xué)習(xí)(六)——easy.py和grid.py的使用 - 東海的日志 - 網(wǎng)易博...
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服