LibSVM与鸢尾花Iris数据集(决策树)

下载 LibSVM。
了解LibSVM 工具的训练数据集的格式和训练获得的决策函数模型(model)的格式。以鸢尾花Iris数据集为例,手工制作一个 两个特征的二分类的Iris数据集(类似之前作业鸢尾花数据集),用LibSVM工具分别进行线性、多项式、高斯核这三种分类训练,计算预测精度;根据训练获得的决策函数模型,写出决策函数的数学公式。

一、下载LibSVM压缩包

请添加图片描述

  • 解压文件。

二、鸢尾花Iris数据集

2.1 手工制作一个 两个特征的二分类的Iris数据集

  • 打开解压的文件:LibSVM-3.25 → windows → svm-toy.exe

在这里插入图片描述

  • 在界面上点上几十个点,以下一些解释:
    Change:改变画点画笔的颜色
    Run:运行,画出边界线
    Clear:清除界面上所有的点
    Save:保存为文件
  • 下面是笔主画好点的界面,然后点击run:

在这里插入图片描述

  • run后的界面

在这里插入图片描述

  • Save保存为名为iris1.txt文件。
  • 增加一些点数后,重新保存为iris2.txt文件。

2.2 实现

利用上述 iris鸢尾花数据集 实现模型训练并写出决策函数的数学公式。

2.2.1 构建项目

  1. 在IDEA中新建一个项目

在这里插入图片描述

  1. 然后后面一直next,然后拷贝文件:(此处是直接复制 libsvm(libsvm-3.25\java\libsvm) 到新建好的项目的src中粘贴)

在这里插入图片描述

  1. 在src下新建一个名为 text 的包,libsvm-3.25\java 中部分文件复制到 java 项目 src文件下 test文件中,如下:

请添加图片描述

  1. 在text包下,新建一个Test.java文件。
  2. 最终IDEA项目结构如下:

在这里插入图片描述

2.2.2 实验代码

  • 将代码写入Text.java中:
package text;

import java.io.IOException;

public class Text {
    
    
    public static void main(String args[]) throws IOException {
    
    
        //存放数据以及保存模型文件路径,此处为自己保存的数据集的路径
        String filepath = "D:\\ProgramData\\wenjian\\iris\\";
        /*
         * -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+"iris1.txt",filepath+"line.txt"};
        String[] arg1 = {
    
    filepath+"iris2.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);

    }
}

注意:String filepath 的路径是自己存放数据集文件的路径。

2.2.3 运行结果

在这里插入图片描述

  • 输出模型参数说明:
    optimization finished, #iter = 90 //90表示迭代次数,
    nu = 0.2787748550615065 //核函数的参数
    obj = -244.6307121544692, rho = -8.092554406036138
    //obj是SVM转换为的二次规划求解得到的最小值对偶题的最优目标值,rho是决策函数 //sgn(w^x-rho)中的偏差项(也是b,wx+b)。
    nSV = 33, nBSV = 30 //nSV是支持向量的个数,nBSV是边界上支持向量的个数
    Total nSV = 33 //支持向量的总的个数
    Accuracy = 91.01796407185628% (152/167) (classification) //精度

分析结果可知多项式和高斯核训练的模型精度略高于线性。

决策函数:

公式:f(x)=SV*x+rho
SV的值在生成的txt文件内。

在路径下可以看到生成了如下文件:

在这里插入图片描述

它们分别是使用LibSVM工具进行线性,多项式,高斯核这三种分类训练后得到的数据文件,任意打开一个文件如下:

在这里插入图片描述

可以看见文件中除了有上述输出参数,还有所有支持向量的数据。

小小的总结

在用IDEA做此实验之前,笔主一直尝试用Acaconda3 的 Jupyter Notebook 来做,但一直出现很多问题,于是改用IDEA。

使用LibSVM工具,特别是构建数据集的时候特别方便;
在进行决策树训练,不仅能够直观地以图形界面显示,也能利用工具中的代码灵活地在项目中使用,并得到相关系数的输出。

参考文献

  1. libsvm获得决策函数模型(python+手工iris数据集)
  2. LibSVM工具实现决策树训练

猜你喜欢

转载自blog.csdn.net/YouthBlood9/article/details/121413923