使用java调用libsvm

1.首先,从林智仁教授那里下载使用包libsvm。这里有很多版本的libsvm,这里我们找到java版本的。如下图:

2.进入这个文件我们可以看到如下文件结构:
红色圈住的文件是一会要引入到java项目里的文件,先复制好,一会ctrl+v。
3.在Myeclipse里面创建一个普通的java项目,并在src文件下ctrl+v,为了文件结构好看些,再创建一个service文件夹,专门放svm_predict.java,svm_scale.java等4个散落在根目录下的java文件。comMain是一个调用的主方法,trainfile主要存放测试与训练的数据,lib文件夹不用管。
 
4.准备训练数据。libsvm需要按照自己的格式准备数据,才可以执行。格式要求如下:
 label1 index1:value1 index2:value2 ...
 label2 index1:value1 index2:value2 ...
 ...
label 就是标签 index是标号,value就是这个标号下的值。举个例子,班里有4个同学,两男两女。两个男生身高体重分别为171cm,65kg,173cm,66kg,两个女生的升高体重分别为156cm,45kg,157,46kg。男生用标签1代替,女生用-1来代替。这样我们可以建立如下格式的数据:
1 1:171 2:65
1 1:173 2:66
2 1:156 2:45
2 1:157 2:46
保存到trainfile文件下命名为train1.txt
有人肯定会质疑第一列是身高,第二列是体重,还干嘛要标志1和2呢?其实,在实际的预测分类中,每一行数据不是所有的属性都有值的,可能只有一部分,这样就需要一个标号来告诉程序,这个属性值是哪一列。
5.预测数据同样按照训练数据那样准备,由于我们是预测,所以标号可以全部用1或者别的来代替。保存到trainfile文件下命名为train2.txt
6.在main函数中编写代码
 
package com.LibSVMTest.main;

import java.io.IOException;
import service.svm_predict;
import service.svm_train;

public class comMain {

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		String[] arg = { "trainfile\\train1.txt", // 存放SVM训练模型用的数据的路径
				"trainfile\\model_r.txt" }; // 存放SVM通过训练数据训/ //练出来的模型的路径

		String[] parg = { "trainfile\\train2.txt", // 这个是存放测试数据
				"trainfile\\model_r.txt", // 调用的是训练以后的模型
				"trainfile\\out_r.txt" }; // 生成的结果的文件的路径
		System.out.println("........SVM运行开始..........");
		// 创建一个训练对象
		svm_train t = new svm_train();
		// 创建一个预测或者分类的对象
		svm_predict p = new svm_predict();
		t.main(arg); // 调用
		p.main(parg); // 调用
	}

}
7.运行,得到预测的结果,结果存放在out_r.txt,里面存放的是1行N列的矩阵,N对应的是预测的个数,每一个列值就是对于每一个带预测的分类。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值