一、Libsvm实现决策树
1.Libsvm简述
LIBSVM是台湾大学林智仁(Lin Chih-Jen)教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进、修改以及在其它操作系统上应用;该软件对SVM所涉及的参数调节相对比较少,提供了很多的默认参数,利用这些默认参数可以解决很多问题;并提供了交互检验(Cross Validation)的功能。该软件可以解决C-SVM、ν-SVM、ε-SVR和ν-SVR等问题,包括基于一对一算法的多类模式识别问题。
2.使用手册
LibSVM是以源代码和可执行文件两种方式给出的。如果是Windows系列操作系统,可以直接使用软件包提供的程序,也可以进行修改编译;如果是Unix类系统,必须自己编译,软件包中提供了编译格式文件,我们在SGI工作站(操作系统IRⅨ6.5)上,使用免费编译器GNU C++3.3编译通过。
3.用LibSVM工具分别进行线性、多项式、高斯核这三种分类训练
(1)LibSVM下载
官网地址:https://www.csie.ntu.edu.tw/~cjlin/libsvm/
(2)制作鸢尾花数据集
①将下载的文件解压后在Windows文件夹中找到svm-toy.exe程序点击运行
②手动绘制数据点,点击鼠标左键进行打点,点击Change改变颜色,点击Run增加底色,最后点击Save保存数据为train.txt
同样的步骤和方法完成test.txt文件
(3)实现模型训练并写出决策函数的数学公式
①将如下Java程序合并为一个test文件
②在IDEA中新建java项目SVM,将Libsvm文件中的java文件夹下的libsvm文件夹和test文件夹拷贝到项目src中
③在test包中新建一个Test类,并编写代码
pckage test;
import java.io.IOException;
public class test1 {
public static void main(String args[]) throws IOException {
//存放数据以及保存模型文件路径
String filepath = "D:\\z7z8\\svmtest\\";
/*
* -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+"train.txt",filepath+"line.txt"};
String[] arg1 = {
filepath+"test.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("