libsvm使用方法總結


1.所需要軟件下載:

  (1)libsvm(http://www.csie.ntu.edu.tw/~cjlin/libsvm/

  (2)python

  (3)gnuplot 畫圖軟件(ftp://ftp.gnuplot.info/pub/gnuplot/

 這里只考慮windows的環境:

  1、 下載libsvm的zip包,只要解壓到某個文件夾就好就好(隨便D:\gjs\libsvm)

     

 2、安裝python(我的是2.7.3)

 3、下載好gnuplot ,直接解壓就好,無需安裝(C:\gnuplot)

2.數據格式說明

0 1:5.1 2:3.5 3:1.4 4:0.2
2 1:4.9 2:3.0 3:1.4 4:0.2
1 1:4.7 2:3.2 3:1.3 4:0.2
[label]   [Index1]:[value1]  [index2]:[value2]  [index3]:[value3]
 [label]:類別(通常是整數)[index n]: 有順序的索引 [value n]

可能需要自己轉換訓練以及測試數據的格式。

3.使用方法

1. windows cmd命令窗口

  下載的libsvm包里面已經為我們編譯好了(windows)。

  進入libsvm\windows,可以看到這幾個exe文件:

  1.svm-predict: svmpredict     test_file       mode_file    output_file      依照已經train好的model ,輸入新的數據,並輸出預測新數據的類別。

  2.svm-scale: 有時候特征值的波動范圍比較大需要對特征數據進行縮放,可以縮放到0--1之間(自己定義)。

  3.svm-toy:似乎是圖形界面,可以自己畫點,產生數據等。

  4.svm-train:  svmtrain  [option]  train_file  [model_file]     train 會接受特定格式的輸入,產生一個model 文件。

  第一步:可以自己生成數據,使用svm-toy:

    雙擊svm-toy,點擊change可以在畫布上畫點:

     

   點擊run,其實就是train的過程,划分的區域:

      

 點擊save可以保存數據(假設保存的數據在D://libsvm.txt)。

第二步:使用訓練數據libsvm.txt進行建模,使用svm-train:

   使用cmd命令進入到我們解壓的libsvm目錄中的windows目錄,使用svm-train,如下:

 
 其中,

#iter為迭代次數,

nu 是你選擇的核函數類型的參數,

obj為SVM文件轉換為的二次規划求解得到的最小值,

rho為判決函數的偏置項b,

nSV 為標准支持向量個數(0<a[i]<c),

nBSV為邊界上的支持向量個數(a[i]=c),

Total nSV為支持向量總個數(對於兩類來說,因為只有一個分類模型Total nSV = nSV,但是對於多類,這個是各個分類模型的nSV之和  

同時在該目錄下會生成一個訓練好的model(libsvm.txt.model)可以打開文件查看里面的內容,主要包括一些參數和支持向量等

  第三步:使用建好的model進行預測,使用svm-predict
     
同時會生成一個輸出文件(libsvm.txt.out),每行代表該行的預測值類別。

 

參數優化:

      svm的參數優化很重要,libsvm包里面包含了參數的優化函數,主要是暴力求解參數。一般來說我們會使用高斯核函數,包含兩個參數(c 和 g)

使用gird.py文件進行參數優化選擇:

    grid.py在libsvm/tools里面,首先需要修改gird.py中的gnuplot文件路徑問題,把文件里的路徑改成gnuplot 存放的目錄:

     

   進入grid.py的相應目錄,執行grid.py D://libsvm.txt

    

   前面兩個分別是c 跟g的值,這時候我們重新訓練模型(加上參數c g)

   

    可以看到,准確率有了顯著的提升, 其實這些步驟完全可以使用easy.py進行實現,同理也需要修改eays.py里面的gnuplot文件路徑問題,把文件里的路徑改成gnuplot 存放的目錄:

   

   步驟總結如下:

   1.轉換訓練數據為相應的格式。

   2.有時候可能需要使用 svm-scale對數據進行相應的縮放,有利於訓練建模。

     

  3.使用grid.py或者easy.py進行參數優化。

  4.使用svm-train建模和svm-predict進行預測。

2.python版本 使用:

>>> import os
>>> os.chdir('D://gjs//libsvm//python')
>>> from svmutil import *
>>> y,x=svm_read_problem("D://libsvm.txt")
>>> m=svm_train(y,x,'-c 8.0 -g 8.0')
>>> p_lable,p_acc,p_val=svm_predict(y,x,m)
Accuracy = 96.1538% (25/26) (classification)
>>>
>>> import os
>>> os.chdir('D://gjs//libsvm//python')
>>> from svmutil import*
>>> data=svm_problem([1,-1],[[1,0,1],[-1,0,-1]]) #元組一表示分類類別
>>> param=svm_parameter('-c 8.0 -g 8.0')
>>> model=svm_train(data,param)
>>> svm_predict([1],[1,1,1],model)
>>>svm_predict([1,-1],[[1,-1,-1],[1,1,1]],model)
Accuracy = 0% (0/2) (classification)
([-1.0, 1.0], (0.0, 4.0, 1.0), [[0.0], [0.00033546262790251185]])

3.weka中使用libSVM:

  可以參照: http://datamining.xmu.edu.cn/~gjs/project/LibD3C.html

4.eclipse中調用libsvm:

   http://datamining.xmu.edu.cn/~gjs/download/LibSVM.jar

   http://datamining.xmu.edu.cn/~gjs/download/libsvm.jar

 下載以上兩個包libsvm的包,然后在eclipse工程目錄里面添加相應的jar包:

  

DataSource source = new DataSource("D://iris.arff");
        Classifier clas=new LibSVM();
        
        String[] optSVM = weka.core.Utils.splitOptions("-c 8.0 -g 8.0");
        ((LibSVM) clas).setOptions(optSVM);
        Instances data=source.getDataSet();
        data.setClassIndex(data.numAttributes()-1);
        Evaluation eval=new Evaluation(data);
        eval.crossValidateModel(clas, data, 10, new Random(1));
        System.out.println(eval.toClassDetailsString());
        System.out.println(eval.toSummaryString());
        System.out.println(eval.toMatrixString());

輸出結果為:

 

 5. linux下使用libsvm:

確認已經安裝好python    

1. wget http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm.cgi?+http://www.csie.ntu.edu.tw/~cjlin/libsvm+tar.gz。

2tar -zxvf /home/gjs/libsvm.tar.gz。

3. 進入目錄執行 make 編譯。

4. ./svm-train /home/gjs/libsvm.txt  其他也類似。

5. python grid.py /home/gjs/libsvm.txt  優化參數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM