zoukankan      html  css  js  c++  java
  • 如何使用LIBSVM,从安装到基本实例使用

    1.在eclipse上安装libsvm

    下载libsvm压缩包解压到本地目录,下载地址http://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html

    如图:

    2.新建JAVA工程,导入libsvm包及其源码。

      1. 新建JAVA工程及主函数main后,右键工程=>build path=>configure build path,Java Build Path>Libraries>Add External JARs,导入libsvm.jar。

      2. 关联libsvm源码(方便以后查看源码):点开libsvm.jar=>Source attachment:(None)=>Edit,External location=>External Folder

      选择libsvm-3.12下java目录,一路OK。

    3.编写libSvm基本代码实例

    package SVM;
    import libsvm.svm;
    import libsvm.svm_model;
    import libsvm.svm_node;
    import libsvm.svm_parameter;
    import libsvm.svm_problem;
    
    public class jmain {
    
    /**
    * @param args
    */
    public static void main(String[] args) {
    //定义训练集点a{10.0, 10.0} 和 点b{-10.0, -10.0},对应lable为{1.0, -1.0}
    svm_node pa0 = new svm_node();
    pa0.index = 0;
    pa0.value = 176.0;
    svm_node pa1 = new svm_node();
    pa1.index = 1;
    pa1.value = 70.0;
    svm_node pb0 = new svm_node();
    pb0.index = 0;
    pb0.value = 180.0;
    svm_node pb1 = new svm_node();
    pb1.index = 1;
    pb1.value = 80.0;
    svm_node pc0 = new svm_node();
    pb0.index = 0;
    pb0.value = 161.0;
    svm_node pc1 = new svm_node();
    pb1.index = 1;
    pb1.value = 45.0;
    svm_node pd0 = new svm_node();
    pb0.index = 0;
    pb0.value = 163.0;
    svm_node pd1 = new svm_node();
    pb1.index = 1;
    pb1.value = 47.0;
    svm_node[] pa = {pa0, pa1}; //点a
    svm_node[] pb = {pb0, pb1}; //点b
    svm_node[] pc = {pc0, pc1}; //点c
    svm_node[] pd = {pd0, pd1}; //点d
    svm_node[][] datas = {pa, pb,pc,pd}; //训练集的向量表
    double[] lables = {1.0,1.0,2.0,2.0}; //a,b 对应的lable
    
    //定义svm_problem对象
    svm_problem problem = new svm_problem();
    problem.l = 4; //向量个数
    problem.x = datas; //训练集向量表
    problem.y = lables; //对应的lable数组
    
    //定义svm_parameter对象
    svm_parameter param = new svm_parameter();
    param.svm_type = svm_parameter.C_SVC;
    param.kernel_type = svm_parameter.LINEAR;
    param.cache_size = 100;
    param.eps = 0.00001;
    param.C = 1;
    
    //训练SVM分类模型
    System.out.println(svm.svm_check_parameter(problem, param)); //如果参数没有问题,则svm.svm_check_parameter()函数返回null,否则返回error描述。
    svm_model model = svm.svm_train(problem, param); //svm.svm_train()训练出SVM分类模型
    
    //定义测试数据点c
    svm_node pe0 = new svm_node();
    pc0.index = 0;
    pc0.value = 165.0;
    svm_node pe1 = new svm_node();
    pc1.index = 1;
    pc1.value = 50.0;
    svm_node[] pe = {pe0, pe1};
    
    //预测测试数据的lable
    System.out.println(svm.svm_predict(model, pe));
    }
    }

    代码说明以及简单的svm介绍如下:

    1.libSvm可以用来分类,大概的原理是先使用svm对已经知道的数据进行训练得出训练模型,然后通过训练模型对要分析的数据进行预测,得出分类。

    2.例子:

    一个班级里面有两个男生(男生1、男生2),两个女生(女生1、女生2),其中

    男生1 身高:176cm 体重:70kg;
    男生2 身高:180cm 体重:80kg;

    女生1 身高:161cm 体重:45kg;
    女生2 身高:163cm 体重:47kg;

    这些是已经知道的数据,使用这些数据建立训练模型,通过训练模型可以通过给出的身高和体重分类是男生还是女生

    1)  先建立训练模型

    数据格式为:

    <lable1>  1:特征1       2:特征2       3:特征3 ...

    <lable2>  1:特征1       2:特征2       3:特征3 ...

        以下建立班级男女生训练数据:

    1:代表男生 2:代表女生 ------------------------------------------此为标签

    数据:

    Label index1:value1 index2:value2

    1 1:176 2:70

    1 1:180 2:80

    2 1:161 2:45

    2 1:163 2:47

       开始训练:使用libsvm的函数svm.svm_train

    2)  测试数据

    如进来了一个数据165 50

    使用libSvm自带的函数svm_predict来预测

    3)  输出结果为

    null

    *

    • optimization finished, #iter = 1

    nu = 3.474876641879213E-5

    • obj = -6.949753283758427E-5, rho = 1.0

    nSV = 2, nBSV = 0

    Total nSV = 2

    2.0

    其中:

    Null表示输入参数正确

    #iter为迭代次数

    nu是你选择的核函数类型的参数

    • obj为SVM文件转换为的二次规划求解得到的最小值

    rho为判决函数的偏置项b

    nSV为标准支持向量个数(0<a[i]<c)

    nBSV为边界上的支持向量个数(a[i]=c)

    Total nSV为支持向量总个数(对于两类来说,因为只有一个分类模型Total nSV = nSV,但是对于多类,这个是各个分类模型的nSV之和)

    2.0表示预测身高165,体重50kg的是女生

  • 相关阅读:
    返回表对象的方法之一--bulk collect into
    coolite 获取新的页面链接到当前页面指定位置Panel的运用
    oracle 当前年到指定年的年度范围求取
    JAVA WEB 过滤器
    Java复习笔记(二):数据类型以及逻辑结构
    Java复习笔记(一):概念解释和运行步骤
    装饰器理解
    Flask大型项目框架结构理解
    JSP内置对象(一)
    Java Web第一个应用搭建
  • 原文地址:https://www.cnblogs.com/caimuqing/p/5463312.html
Copyright © 2011-2022 走看看