文章目录
一、原理
svm算法可以参考博客基于Sklearn实现SVM算法
二、代码
1.下载LIbSVm
2.解压
解压后文件如图
3.选择对应语言代码
我使用的是Java,故把java文件下的文件都引入到项目当中。
Idea中如图
4.准备数据
-
打开libsvm文件下的windows文件里面的svm-toy程序
-
在程序中进行手工绘制数据并保存数据
5.进行训练
新建个Test类用于训练
代码如下
package test;
import java.io.IOException;
import java.sql.SQLOutput;
public class Test {
public static void main(String args[]) throws IOException {
//存放数据以及保存模型文件路径
String filepath = "G:\\IDEAProject\\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+"data.txt",filepath+"line.txt"};
System.out.println("----------------线性-----------------");
//训练函数
svm_train.main(arg);
arg[5]="1";
arg[7]=filepath+"poly.txt";//输出文件路径
System.out.println("---------------多项式-----------------");
svm_train.main(arg);
arg[5]="2";
arg[7]=filepath+"RBF.txt";
System.out.println("---------------高斯核-----------------");
svm_train.main(arg);
}
}
运行代码进行训练
三、结果
1.代码运行结果
2.输出文件
- data.txt训练数据
- line.txt线性模型
- poly多项式模型
- RBF高斯核模型
3.模型数据
数据说明
- svm_type //所选择的svm类型,默认为c_svc
- kernel_type //训练采用的核函数类型,此处为RBF核
- gamma //RBF核的参数γ
- nr_class //类别数
- total_sv //支持向量总个数
- rho //判决函数的偏置项b
- label //原始文件中的类别标识
- nr_sv //每个类的支持向量机的个数
- SV //各个类的权系数及相应的支持向量
线性模型
多项式模型
高斯核模型
4.决策函数
根据公式f(x)=wT*x+b以及模型数据可以求得最终的决策函数。
- wT为向量的转置矩阵,即为模型数据中的SV
- b为偏置常数,即为数据模型中的rho
四、总结
可以使用libSVM处理决策函数