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  优化参数。

时间: 2024-10-06 03:16:41

libsvm使用方法总结的相关文章

libSVM介绍(二)

鉴于libSVM中的readme文件有点长,并且,都是採用英文书写,这里,我把当中重要的内容提炼出来,并给出对应的样例来说明其使用方法,大家能够直接參考我的代码来调用libSVM库. 第一部分,利用libSVM自带的简易工具来演示SVM的两类分类过程.(下面内容仅仅是利用libSVM自带的一个简易的工具供大家更好的理解SVM,假设你对SVM已经有了一定的了解,能够直接跳过这部分内容) 首先,你要了解的是libSVM仅仅是众多SVM实现版本号中的当中之中的一个.而SVM是一种进行两类分类的分类器,

如何转成libsvm支持的数据格式并做回归分析

本次实验的数据是来自老师给的2006-2008年的日期,24小时的温度.电力负荷数据,以及2009年的日期,24小时的温度数据,目的是预测2009年每天24小时的电力负荷,实验数据本文不予给出. 用libsvm进行预测的步骤大体是:将数据进行归一化处理,并转换成livsvm需要的格式,然后进行参数择优,用选的最佳参数使用2006-2008 3年的数据建立模型,再用该模型预测2009年的电力负荷.实际过程中,我先用2006-2007年的数据建模,预测2008年的数据,以得到测试误差.事实证明,用2

SVM训练结果参数说明 训练参数说明 归一化加快速度和提升准确率 归一化还原

原文:http://blog.sina.com.cn/s/blog_57a1cae80101bit5.html 举例说明 svmtrain -s 0 -?c 1000 -t 1 -g 1 -r 1 -d 3 data_file 训练一个由多项式核(u'v+1)^3和C=1000组成的分类器. svmtrain -s 1 -n 0.1 -t 2 -g 0.5 -e 0.00001 data_file 在RBF核函数exp(-0.5|u-v|^2)和终止允许限0.00001的条件下,训练一个?-SV

模式识别 - libsvm的函数调用方法 详解

libsvm的函数调用方法 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26261173 需要加载(load)SVM的模型, 然后将结点转换为SVM的格式, 即索引(index)+数据(value)的形式; 释放SVM的model有专用的函数: svm_free_and_destroy_model, 否则容易内存泄露; 可以预测数据的概率, 则需要模型是概率模型, 返回的是一个类别数组(2分类, 则为2个值的数组),

LibSvm介绍---调用方法及参数介绍

    libsvm是著名的SVM开源组件,目前有JAVA.C/C++,.NET 等多个版本,本人使用的是2.82 libsvm命名空间下主要使用类: svm_model 为模型类,通过训练或加载训练好的模型文件获得 svm_parameter 为参数类,主要为支持向量机设定参数,具体参数如下: svm_parameter.svm_typesvm类型:SVM设置类型(默认svm_parameter.C_SVC)svm_parameter.C_SVC -- C-SVCsvm_parameter.N

在matlab上使用libsvm工具箱使用错误及解决方法汇总

经过几天的学习,终于可以正常的用libsvm工具箱咯--工具箱很强大但是刚开始总是错误百出啊!在遇到问题时google了一下在网上总能找到很多解决方法...我总结的是能解决我当时的问题的那些~ 首先附上使用过程 step1: 输入>>mex -setup step2: Please choose your compiler for building external interface (MEX) files: Would you like mex to locate installed co

LibSVM之C# Wrapper

[百度百科] LIBSVM是台湾大学林智仁(Lin Chih-Jen)教授等开发设计的一个简单.易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进.修改以及在其它操作系统上应用:该软件对SVM所涉及的参数调节相对比较少,提供了很多的默认参数,利用这些默认参数可以解决很多问题:并提供了交互检验(Cross Validation)的功能.该软件可以解决C-SVM.ν-SVM.ε-SVR和ν-SVR等问题,包括基于一对一

机器学习 libsvm交叉验证与网格搜索(参数选择)

首先说交叉验证. 交叉验证(Cross validation)是一种评估统计分析.机器学习算法对独立于训练数据的数据集的泛化能力(generalize), 能够避免过拟合问题. 交叉验证一般要尽量满足: 1)训练集的比例要足够多,一般大于一半 2)训练集和测试集要均匀抽样 交叉验证主要分成以下几类: 1)Double cross-validation Double cross-validation也称2-fold cross-validation(2-CV),作法是将数据集分成两个相等大小的子集

解密SVM系列(五):matlab下libsvm的简单使用

本节简单介绍一下libsvm的使用方法.关于libsvm似乎曾经使用过,那个时候主要用libsvm进行简单的人脸识别实验.当时还翻译过关于libsvm里面的matlab英文文档 那么现在最新版本的libsvm为3.2.0,下载地址如下: http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 下载下来的libsvm其实包含好多个平台的工具箱软件,c++,matlab,java,python都有.他们的函数使用方法是一样的. 那么在下载完以后,点击里面的matlab下平