libsvm java 情感分类_eclipse + libsvm-3.12 用SVM实现简单线性分类

一、新建JAVA工程,导入libsvm包及其源码。

1. 新建JAVA工程及主函数main后,右键工程=>build path=>configure build path,Java Build Path>Libraries>Add External JARs,导入libsvm.jar。

f6dcb358c6de4e05342060ee2d2b22bc.png

2. 关联libsvm源码(方便以后查看源码):点开libsvm.jar=>Source attachment:(None)=>Edit,External location=>External Folder

9e3a0afab73281141c305e55b8177d80.png

选择libsvm-3.12下java目录,一路OK。

379d8c830496b8db7ad128bfb2aa4e97.png

二. 编写测试代码,使用libsvm函数进行分类预测

测试代码如下:

1 importlibsvm.svm;2 importlibsvm.svm_model;3 importlibsvm.svm_node;4 importlibsvm.svm_parameter;5 importlibsvm.svm_problem;6

7 public classjmain {8

9 /**

10 *@paramargs11 */

12 public static voidmain(String[] args) {13 //定义训练集点a{10.0, 10.0} 和 点b{-10.0, -10.0},对应lable为{1.0, -1.0}

14 svm_node pa0 = newsvm_node();15 pa0.index = 0;16 pa0.value = 10.0;17 svm_node pa1 = newsvm_node();18 pa1.index = -1;19 pa1.value = 10.0;20 svm_node pb0 = newsvm_node();21 pb0.index = 0;22 pb0.value = -10.0;23 svm_node pb1 = newsvm_node();24 pb1.index = 0;25 pb1.value = -10.0;26 svm_node[] pa = {pa0, pa1}; //点a

27 svm_node[] pb = {pb0, pb1}; //点b

28 svm_node[][] datas = {pa, pb}; //训练集的向量表

29 double[] lables = {1.0, -1.0}; //a,b 对应的lable30

31 //定义svm_problem对象

32 svm_problem problem = newsvm_problem();33 problem.l = 2; //向量个数

34 problem.x = datas; //训练集向量表

35 problem.y = lables; //对应的lable数组36

37 //定义svm_parameter对象

38 svm_parameter param = newsvm_parameter();39 param.svm_type =svm_parameter.C_SVC;40 param.kernel_type =svm_parameter.LINEAR;41 param.cache_size = 100;42 param.eps = 0.00001;43 param.C = 1;44

45 //训练SVM分类模型

46 System.out.println(svm.svm_check_parameter(problem, param)); //如果参数没有问题,则svm.svm_check_parameter()函数返回null,否则返回error描述。

47 svm_model model = svm.svm_train(problem, param); //svm.svm_train()训练出SVM分类模型48

49 //定义测试数据点c

50 svm_node pc0 = newsvm_node();51 pc0.index = 0;52 pc0.value = -0.1;53 svm_node pc1 = newsvm_node();54 pc1.index = -1;55 pc1.value = 0.0;56 svm_node[] pc ={pc0, pc1};57

58 //预测测试数据的lable

59 System.out.println(svm.svm_predict(model, pc));60 }61 }

运行结果为:

null

*

optimization finished, #iter = 1nu= 0.0033333333333333335obj= -0.0033333333333333335, rho = 0.0nSV= 2, nBSV = 0Total nSV= 2-1.0

第一行null是svm.svm_check_parameter(problem, param)的输出,表示参数设置无误;最后一行的-1.0表示对c点的预测lable是-1.0。

要注意的几点是:

1. 主要用了svm.svm_train()做训练,用svm.svm_predict()做预测,其中用到了svm_problem、svm_parameter、svm_model、svm_node几种“结构体”对象。

2. svm_node表示的是{向量的分量序号,向量的分量值},很多稀疏矩阵均用此方法存储数据,可以节约空间;svm_node[]则表示一个向量,一个向量的最后一个分量的svm_node.index用-1表示;svm_node[][]则表示一组向量,也就是训练集。

参考贴:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值