<kbd id="9plqc"><label id="9plqc"></label></kbd>

        <th id="9plqc"></th>
        1. <center id="9plqc"><video id="9plqc"></video></center>
          <sub id="9plqc"><form id="9plqc"><pre id="9plqc"></pre></form></sub>
          <nav id="9plqc"><form id="9plqc"><legend id="9plqc"></legend></form></nav>
          libsvm中參數(shù)c與g的調(diào)整 您所在的位置:網(wǎng)站首頁 算卦的步驟順序 libsvm中參數(shù)c與g的調(diào)整

          libsvm中參數(shù)c與g的調(diào)整

          2025-07-15 06:29| 來源: 網(wǎng)絡(luò)整理| 查看: 265

          Libsvm使用心得

          首先下載Libsvm、Python和Gnuplot:

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

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

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

          LIBSVM?使用的一般步驟是:

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

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

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

          4)采用交叉驗(yàn)證選擇最佳參數(shù)C與g?;

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

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

          1)LIBSVM使用的數(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)對數(shù)據(jù)進(jìn)行簡單的縮放作

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

          ????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- SVC、e - SVR、n - SVR中從懲罰系數(shù)C,默認(rèn)值為1;

          -n nu?:設(shè)置nu - SVC、one-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ì)算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?類型中沒有也不會產(chǎn)生影響,程序不會接受該參數(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)簡單對屏幕回顯信息進(jìn)行說明:

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

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

          obj為SVM文件轉(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)簽對應(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ù)C與g

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

          的參數(shù)常用5。那么如何去選取最優(yōu)的參數(shù)c和g呢?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.py和C:/Python25目錄下的python.exe文件拷貝到libsvm/windows目錄下,鍵入以下命令:$ python grid.py train.1.scale?執(zhí)行后,即可得到最優(yōu)參數(shù)c和g。

          ????另外,至于下libsvm和python的接口的問題,在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é)果,說明libsvm和python之間的接口已經(jīng)配置完成,以后就可以直接在python程序里調(diào)用libsvm的函數(shù)了!

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

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

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

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

          使用Svmtrain訓(xùn)練好的模型進(jìn)行測試。輸入新的X值,給出SVM預(yù)測出的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ù)和測試數(shù)據(jù),同時(shí)已經(jīng)將python安裝至c盤,并將grid.py文件中關(guān)于gnuplot路徑的默認(rèn)值修改為實(shí)際解壓縮后的路徑,將

          heart_scale、grid.py和python.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ù)測:

          ./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=2048,g=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)自動化過程。

          如果要訓(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對文件b59.txt執(zhí)行1000次分層隨機(jī)抽樣(對數(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ù)對)。

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

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



          【本文地址】

          公司簡介

          聯(lián)系我們

          今日新聞

          推薦新聞

          專題文章
            CopyRight 2018-2019 實(shí)驗(yàn)室設(shè)備網(wǎng) 版權(quán)所有
            黄色免费网站在线看,韩国精品在线观看,韩国美女一区二区,99国产热 夏津县| 崇明县| 仁怀市| 敖汉旗| 商城县| 怀化市| 郧西县| 柳州市| 临漳县| 二手房| 于都县| 寿阳县| 盐亭县| 三河市| 大冶市| 临泽县| 焉耆| 虎林市| 邵东县| 阳春市| 荆州市| 翁牛特旗| 交口县| 宁蒗| 南部县| 德兴市| 新巴尔虎右旗| 铁岭县| 普格县| 蓬莱市| 西昌市| 三门县| 庆阳市| 龙岩市| 共和县| 湖南省| 安国市| 宁国市| 宜良县| 滦南县| 昌乐县| http://444 http://444 http://444 http://444 http://444 http://444