利用LibSVM工具进行决策树训练

一、LibSVM概述

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

  • SVM用于模式识别或回归时,SVM方法及其参数、核函数及其参数的选择,也就是说最优SVM算法参数选择还只能是凭借经验、实验对比、大范围的搜寻或者利用软件包提供的交互检验功能进行寻优。
  • LIBSVM拥有C、Java、Matlab、C#、Ruby、Python、R、Perl、CommonLISP、Labview、php等数十种语言版本。最常使用的是C、Matlab、Java和命令行(c语言编译的工具)的版本。

二、用LibSVM制作数据集

  • 打开制作数据集的工具
    在这里插入图片描述

  • 制作数据集
    在这里插入图片描述

  • 在上一步的基础上添加一些点生成新的数据集

三、用IDEA建立项目进行训练

  • 在IDEA中新建一个项目,然后将下图所示文件全部复制到scr文件目录下
    在这里插入图片描述

  • 在项目之下新建一个名为test的package,将如下图的文件添加进去
    在这里插入图片描述

  • 在test package中新建一个Test类,并在其中添加如下代码:

package test;
import java.io.IOException;

public class Test {
    public static void main(String args[]) throws IOException {
        //存放数据以及保存模型文件路径
        String filepath = "F:\\SVM\\";
        /*
         * -s 设置svm类型:默认值为0
         *          0– C-SVC
         *          1 – v-SVC
         *          2 – one-class-SVM
         *          3 –ε-SVR
         *          4 – n - SVR
         *
         * -t 设置核函数类型,默认值为2
         *          0 --线性核
         *          1 --多项式核
         *          2 -- RBF核
         *          3 -- sigmoid核
         *
         * -d degree:设置多项式核中degree的值,默认为3
         *
         * -c cost:设置C-SVC、ε-SVR、n - SVR中从惩罚系数C,默认值为1;
         */
        String[] arg = {"-s","0","-c","10","-t","0",filepath+"first.txt",filepath+"line.txt"};
        String[] arg1 = {filepath+"second.txt",filepath+"line.txt",filepath+"predict1.txt"};
        System.out.println("----------------线性-----------------");
        //训练函数
        svm_train.main(arg);
        svm_predict.main(arg1);


        arg[5]="1";
        arg[7]=filepath+"poly.txt";//输出文件路径
        arg1[1]=filepath+"poly.txt";
        arg1[2]=filepath+"predict2.txt";
        System.out.println("---------------多项式-----------------");
        svm_train.main(arg);
        svm_predict.main(arg1);

        arg[5]="2";
        arg[7]=filepath+"RBF.txt";
        arg1[1]=filepath+"RBF.txt";
        arg1[2]=filepath+"predict3.txt";
        System.out.println("---------------高斯核-----------------");
        svm_train.main(arg);
        svm_predict.main(arg1);

    }

}
  • 得到的项目结构图如下
    在这里插入图片描述

  • 运行程序得到结果如下:
    在这里插入图片描述

在这里插入图片描述

  • 结果分析
    optimization finished, #iter = 20 //20表示迭代次数,
    nu = 0.06324266557131494 //核函数的参数
    obj = -26.661864412550123, rho = -4.156694422061656
    //obj是SVM转换为的二次规划求解得到的最小值对偶题的最优目标值,rho是决策函数
    //sgn(w^x-rho)中的偏差项(也是b,wx+b)。
    nSV = 6, nBSV = 3 //nSV是支持向量的个数,nBSV是边界上支持向量的个数
    Total nSV = 6 //支持向量的总的个数
    Accuracy = 89.20454545454545% (157/176) (classification) //精度
  • 使用LibSVM工具进行线性,多项式,高斯核这三种分类训练后得到的数据文件:
    线性核:
    在这里插入图片描述

多项式:
在这里插入图片描述

高斯核:
在这里插入图片描述
对结果进行对比可以很容易看出来多项式和高斯核的精度高于线性。

决策树的数学公式: f(x)=SV*x+rho

四、总结

本次实验用LibSVM进行决策树训练,相比之前最大的区别是可以自己建立数据集,调整不同的参数。然后结果更加清晰,一目了然。

五、参考资料

LibSVM制作鸢尾花数据集
LibSVM
IntelliJ IDEA安装操作步骤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值