libsvm使用方法总结
1.所需要軟件下載:
? (1)libsvm(http://www.csie.ntu.edu.tw/~cjlin/libsvm/)
? (2)python
? (3)gnuplot 畫圖軟件(ftp://ftp.gnuplot.info/pub/gnuplot/)
?這里只考慮windows的環(huán)境:
? 1、 下載libsvm的zip包,只要解壓到某個(gè)文件夾就好就好(隨便D:\gjs\libsvm)
? ? ?
?2、安裝python(我的是2.7.3)
?3、下載好gnuplot ,直接解壓就好,無需安裝(C:\gnuplot)
2.數(shù)據(jù)格式說明
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]:類別(通常是整數(shù))[index n]: 有順序的索引 [value n]
可能需要自己轉(zhuǎn)換訓(xùn)練以及測(cè)試數(shù)據(jù)的格式。
3.使用方法
1. windows cmd命令窗口
? 下載的libsvm包里面已經(jīng)為我們編譯好了(windows)。
? 進(jìn)入libsvm\windows,可以看到這幾個(gè)exe文件:
? 1.svm-predict:?svmpredict? ???test_file? ?? ? mode_file? ? output_file ? ? ?依照已經(jīng)train好的model ,輸入新的數(shù)據(jù),并輸出預(yù)測(cè)新數(shù)據(jù)的類別。
? 2.svm-scale:?有時(shí)候特征值的波動(dòng)范圍比較大需要對(duì)特征數(shù)據(jù)進(jìn)行縮放,可以縮放到0--1之間(自己定義)。
? 3.svm-toy:似乎是圖形界面,可以自己畫點(diǎn),產(chǎn)生數(shù)據(jù)等。
? 4.svm-train: ?svmtrain ?[option]??train_file??[model_file] ? ??train 會(huì)接受特定格式的輸入,產(chǎn)生一個(gè)model 文件。
? 第一步:可以自己生成數(shù)據(jù),使用svm-toy:
? ? 雙擊svm-toy,點(diǎn)擊change可以在畫布上畫點(diǎn):
? ? ?
? ?點(diǎn)擊run,其實(shí)就是train的過程,劃分的區(qū)域:
? ? ??
?點(diǎn)擊save可以保存數(shù)據(jù)(假設(shè)保存的數(shù)據(jù)在D://libsvm.txt)。
第二步:使用訓(xùn)練數(shù)據(jù)libsvm.txt進(jìn)行建模,使用svm-train:
? ?使用cmd命令進(jìn)入到我們解壓的libsvm目錄中的windows目錄,使用svm-train,如下:
?
?其中,
#iter為迭代次數(shù),
nu 是你選擇的核函數(shù)類型的參數(shù),
obj為SVM文件轉(zhuǎn)換為的二次規(guī)劃求解得到的最小值,
rho為判決函數(shù)的偏置項(xiàng)b,
nSV 為標(biāo)準(zhǔn)支持向量個(gè)數(shù)(0<a[i]<c),
nBSV為邊界上的支持向量個(gè)數(shù)(a[i]=c),
Total nSV為支持向量總個(gè)數(shù)(對(duì)于兩類來說,因?yàn)橹挥幸粋€(gè)分類模型Total nSV = nSV,但是對(duì)于多類,這個(gè)是各個(gè)分類模型的nSV之和 ?
同時(shí)在該目錄下會(huì)生成一個(gè)訓(xùn)練好的model(libsvm.txt.model)可以打開文件查看里面的內(nèi)容,主要包括一些參數(shù)和支持向量等
? 第三步:使用建好的model進(jìn)行預(yù)測(cè),使用svm-predict
? ? ?
同時(shí)會(huì)生成一個(gè)輸出文件(libsvm.txt.out),每行代表該行的預(yù)測(cè)值類別。
?
參數(shù)優(yōu)化:
? ? ? svm的參數(shù)優(yōu)化很重要,libsvm包里面包含了參數(shù)的優(yōu)化函數(shù),主要是暴力求解參數(shù)。一般來說我們會(huì)使用高斯核函數(shù),包含兩個(gè)參數(shù)(c 和 g)
使用gird.py文件進(jìn)行參數(shù)優(yōu)化選擇:
? ? grid.py在libsvm/tools里面,首先需要修改gird.py中的gnuplot文件路徑問題,把文件里的路徑改成gnuplot 存放的目錄:
? ? ?
? ?進(jìn)入grid.py的相應(yīng)目錄,執(zhí)行g(shù)rid.py D://libsvm.txt
? ??
? ?前面兩個(gè)分別是c 跟g的值,這時(shí)候我們重新訓(xùn)練模型(加上參數(shù)c g)
? ?
? ? 可以看到,準(zhǔn)確率有了顯著的提升, 其實(shí)這些步驟完全可以使用easy.py進(jìn)行實(shí)現(xiàn),同理也需要修改eays.py里面的gnuplot文件路徑問題,把文件里的路徑改成gnuplot 存放的目錄:
? ?
? ?步驟總結(jié)如下:
? ?1.轉(zhuǎn)換訓(xùn)練數(shù)據(jù)為相應(yīng)的格式。
? ?2.有時(shí)候可能需要使用?svm-scale對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的縮放,有利于訓(xùn)練建模。
? ? ?
? 3.使用grid.py或者easy.py進(jìn)行參數(shù)優(yōu)化。
? 4.使用svm-train建模和svm-predict進(jìn)行預(yù)測(cè)。
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中調(diào)用libsvm:
? ?http://datamining.xmu.edu.cn/~gjs/download/LibSVM.jar
? ?http://datamining.xmu.edu.cn/~gjs/download/libsvm.jar
?下載以上兩個(gè)包libsvm的包,然后在eclipse工程目錄里面添加相應(yīng)的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());輸出結(jié)果為:
?
?5. linux下使用libsvm:
確認(rèn)已經(jīng)安裝好python ? ?
1.?wget http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm.cgi?+http://www.csie.ntu.edu.tw/~cjlin/libsvm+tar.gz。
2.?tar -zxvf /home/gjs/libsvm.tar.gz。
3. 進(jìn)入目錄執(zhí)行 make 編譯。
4.?./svm-train /home/gjs/libsvm.txt ?其他也類似。
5. python grid.py /home/gjs/libsvm.txt ?優(yōu)化參數(shù)。
?
轉(zhuǎn)載于:https://www.cnblogs.com/GuoJiaSheng/p/4480497.html
總結(jié)
以上是生活随笔為你收集整理的libsvm使用方法总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P2324 骑士精神
- 下一篇: Docker笔记:常用服务安装——Ngi