libsvm java版本使用心得
来源:互联网 发布:淘宝网户外家具 编辑:程序博客网 时间:2024/06/14 09:36
项目中要用到svm分类器,自己实现的话太费时间,于是寻找开源实现,找到了libsvm。
java版本是一个jar包,引入到工程中即可使用。
需要注意的是,java版本充满了c++风格(类名小写,命名使用下划线_分隔等等),使用者需要稍微适应一下。
核心类是svm类,最常用的几个方法如下(都是static方法):
svm.svm_load_model(String),望文生义即可知是加载已训练好的svm模型,参数是模型文件名。
svm.svm_save_model(String,svm_model),按指定的名称保存模型。
svm.svm_train(svm_problem,svm_parameter),训练模型,该方法有两个参数svm_problem,保存了训练数据,包括数据数,特征数组,类别数组。参数svm_parameter用户设置svm的一些参数,例如svm_type设置svm类型,kernel_type设置核函数类型等。训练时需要注意的是,如果你的训练数据比较多,训练时间可能很长。
svm.svm_predict(svm_model,svm_node[])和svm.svm_p
redict_probability(svm_model,svm_node[],double[]),都用于预测类别,不同的是后一个方法同时包含了预测类别的概率。
下面给出完整的demo:
public class Test_svm_predict {public static void main(String[] args) { svm_problem sp = new svm_problem(); svm_node[][] x = new svm_node[4][2]; for (int i = 0; i < 4; i++) { for (int j = 0; j < 2; j++) { x[i][j] = new svm_node(); } } x[0][0].index = 1; x[0][0].value = 0; x[0][1].index = 2; x[0][1].value = 0; x[1][0].index = 1; x[1][0].value = 1; x[1][1].index = 2; x[1][1].value = 1; x[2][0].index = 1; x[2][0].value = 0; x[2][1].index = 2; x[2][1].value = 1; x[3][0].index = 1; x[3][0].value = 1; x[3][1].value = 0; x[3][1].index = 2; double[] labels = new double[]{-1,-1,1,1}; sp.x = x; sp.y = labels; sp.l = 4; svm_parameter prm = new svm_parameter(); prm.svm_type = svm_parameter.C_SVC; prm.kernel_type = svm_parameter.RBF; prm.C = 1000; prm.eps = 0.0000001; prm.gamma = 10; prm.probability = 1; prm.cache_size=1024; /* * svm_check_parameter * 参数可行返回null,否则返回错误信息 */ System.out.println("Param Check " + (svm.svm_check_parameter(sp, prm)==null)); svm_model model = svm.svm_train(sp, prm); //训练分类 try {svm.svm_save_model("svm_model_file", model);} catch (IOException e) {e.printStackTrace();} try {svm.svm_load_model("svm_model_file");} catch (IOException e) {e.printStackTrace();} svm_node[] test = new svm_node[]{new svm_node(), new svm_node()}; test[0].index = 1; test[0].value = 0; test[1].index = 2; test[1].value = 0; double[] l = new double[2]; double result_prob = svm.svm_predict_probability(model, test,l);//测试1,带预测概率的分类测试 double result_normal = svm.svm_predict(model, test); //测试2 不带概率的分类测试 System.out.println("Result with prob " + result_prob); System.out.println("Result normal " + result_normal); System.out.println("Probability " + l[0] + "\t" + l[1]);}}
0 0
- libsvm java版本使用心得
- libsvm使用心得
- libsvm使用心得
- libsvm liblinear 使用心得
- Libsvm使用心得
- libSVM使用心得
- libsvm使用心得
- Libsvm使用心得
- libsvm使用心得
- libsvm使用心得
- libsvm 使用心得
- Libsvm使用心得及验证
- libsvm使用心得(转)
- 使用libsvm进行分类之python和java版本
- 使用java调用libsvm
- 使用java调用libsvm
- java中使用libsvm
- Libsvm使用方法cmd版本&&Java版本
- DB2中的数据移动(三)
- 选择迭代长度时考虑的因素
- 兼容ie 谷歌 火狐的获取焦点失去焦点方法
- UIImagePickerController的用法
- Java开发中的23种设计模式详解
- libsvm java版本使用心得
- linux主机644、755、777权限详解
- 分治算法-选手赛程安排
- 聚聚索引 和非聚集索引
- myeclipse和eclipse插件checkstyle
- CodePage简介(转)
- Android中添加USB键盘的CapsLock键
- OTDR简介
- P2P原理的解释与实现