一、下载LibSVM
百度网盘下载:
链接:https://pan.baidu.com/s/171JAO7nhlsGRsXenbs8-uA
提取码:762w
二、使用LibSVM手动创建Iris数据集
1.解压后打开文件
如下:
2.打开windows–>svm-toy.exe
3.可以手动在该程序上标点,点击change可以改变颜色
4.数据设置完成后,点击Run得到如下
5.点击Save保存文件,输入文件名为test_1.txt,一定要输入.txt,打开该文件可以看到如下
6.按照上面的基础再在数据集里添加一些,保存得到test_2
三、模型训练得出决策函数的数学公式
(1)创建项目
1.打开IDEA,新建java项目,创建两个包test和libsvm
2…将java里的如下文件拷贝到src的test里
3.将压缩文件下java文件夹下的libsvm文件夹所有内容拷贝到项目src的libsvm包中
4.在test里创建一个test_1的类后,放入下面代码
package test;
import java.io.IOException;
public class test_1 {
public static void main(String args[]) throws IOException, IOException {
//存放数据以及保存模型文件路径
String filepath = "E:\\BaiduNetdiskDownload\\libsvm-3.25\\test\\";
/*
* -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+"test_1.txt",filepath+"line.txt"};
String[] arg1 = {filepath+"test_2.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);
}
}
项目就创建完成了!
(2)运行
1.点击运行,得到结果
2.分析结果
optimization finished, #iter = 63//63表示迭代次数
nu = 0.1791558744396585//核函数的参数
obj = -77.86640933916739, rho = -5.916723540830204
//obj是SVM转换为的二次规划求解得到的最小值对偶题的最优目标值,rho是决策函数
//sgn(w^x-rho)中的偏差项(也是b,wx+b)
nSV = 14, nBSV = 11 //nSV是支持向量的个数,nBSV是边界上支持向量的个数
Total nSV = 14//支持向量的总的个数
Accuracy = 98.01980198019803% (99/101) (classification)//精度
3.发现文件夹test里得到了6个txt文件其中3个是训练的数据文件(线性,多项式,高斯核),其中有上述输出参数以及所有支持向量的数据
例如line.txt
四、总结
使用libsvm可以手动操作数据集的输入,通过工具的代码可以创建模型得出相关系数。