`
renhongchao
  • 浏览: 120923 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java libsvm使用说明

阅读更多
  其他关于svm和libsvm的东西这里不再赘述,本文主要介绍下我在用libsvm过程中遇到的问题进行一下说明,网上资料大多数都是关于libsvm参数的一些说明,这里简单介绍下如何用java代码运行一个小例子。

    首先我们要下载libsvm jar包,然后我把svm_train,svm_scale,svm_predict三个类文件复制了出来,主要是了解一下内部实现。接着准备好训练数据集合测试数据集。数据文件格式如下,label是类别,index是feature即特征或者维,value是对应特征值。
[label] [index1]:[value1] [index2]:[value2] ...
[label] [index1]:[value1] [index2]:[value2] ...


   接下来就要开始对数据进行归一化处理,用到svm_scale类。
Usage: svm-scale [options] data_filename

options:

-l lower : x scaling lower limit (default -1)

-u upper : x scaling upper limit (default +1)

-y y_lower y_upper : y scaling limits (default: no y scaling)

-s save_filename : save scaling parameters to save_filename

-r restore_filename : restore scaling parameters from restore_filename

    这里特别解释下-s -r参数,-s参数指定保存svm_scale扫描过后的归一化scale标准,-r表示读入的标准。我们因为同时要考虑训练集和测试集,所以这里需要两个参数。libsvm这里采用的是最大最小值归一化,默认的归一化范围是[-1,1],可以用参数-l和-u分别调整上界和下界,java代码如下。
String[] testArgs = {"-l","0", "-u","1","-s","chao-test-scale","UCI-breast-cancer-tra"};
        svm_scale.main(testArgs);
        String[] argvScaleTest ={"-r","chao-test-scale","UCI-breast-cancer-test"};
        svm_scale.main(testArgs);

   执行完之后生成的chao-test-scale文件里面就是最后的scale标准,文件内容如下:
x
0.000000000000000 1.000000000000000
1 63375.00000000000 13454352.00000000
2 1.000000000000000 10.00000000000000
3 1.000000000000000 10.00000000000000
4 1.000000000000000 10.00000000000000
5 1.000000000000000 10.00000000000000
6 1.000000000000000 10.00000000000000
7 1.000000000000000 10.00000000000000
8 1.000000000000000 10.00000000000000
9 1.000000000000000 10.00000000000000
10 1.000000000000000 10.00000000000000

    文件里面列出了归一化的区间0-1,每个feature的最大最小值,便于后面对整个集合做scale处理。有的遗憾的是svm_scale类没有直接提供参数指定生成scale的文件,不过它在执行过程中会输出整个scale后的文件,我们可以通过控制台直接重定向到新文件里面。
   
java svm_scale -s chao-test-scale train>train.scale
java svm_scale -s chao-test-scale test>test.scale

这样就将train训练集和test测试集全部scale成功,我们就可以开始训练和检测了,分别使用svm_train和svm_predict。
String[] trainArgs = {"train.scale"};
		String modelFile = svm_train.main(trainArgs);
		String[] testArgs = {"test.scale", modelFile, "result"};
		Double accuracy = svm_predict.main(testArgs);
		System.out.println("SVM Classification is done! The accuracy is " + accuracy);


    另外从网上看到的使用libsvm的步骤如下:
1)按照LIBSVM软件包所要求的格式准备数据集; 
2)对数据进行简单的缩放操作; 
3)首要考虑选用RBF 核函数;
4)采用交叉验证选择最佳参数C与g ;
5)采用最佳参数C与g 对整个训练集进行训练获取支持向量机模型;
6)利用获取的模型进行测试与预测。

    对应第4和5步,目前正在研究阶段,了解到的只能使用grid.py来查找最佳参数,这里偷懒贴个链接LibSVM学习(六)——easy.py和grid.py的使用http://blog.csdn.net/flydreamgg/article/details/4470477需要重点说明的是,用grid.py找到的

最佳参数c和g是使得训练集在交叉验证思想下达到最高准确率的,不能保证使用这个参数训练之后的模型就能让测试集也能达到对应的正确率。我经过测试找到的0.5 0.125代入之后训练,准确率没有发生变化,依然是0.8974358974358975。


    归一化处理可以加快运算速度,提高预测准确率==(这里加个疑问:有说法是看具体情况,有的情况归一化之后反而正确率下降。)。下面贴一下数据归一化之前的运行结果。
optimization finished, #iter = 1223
nu = 0.6996186233933985
obj = -271.992875483972, rho = 0.4257786283326366
nSV = 639, nBSV = 222
Total nSV = 639
Accuracy = 69.23076923076923% (27/39) (classification)
SVM Classification is done! The accuracy is 0.6923076923076923


   归一之后的运行结果
optimization finished, #iter = 68
nu = 0.08154427324315143
obj = -44.22486456942005, rho = -0.8163705353889562
nSV = 61, nBSV = 48
Total nSV = 61
Accuracy = 89.74358974358975% (35/39) (classification)
SVM Classification is done! The accuracy is 0.8974358974358975



  后续:
        后面接着实践,发现了所谓的归一化之后文件增大,运算速度和准确率下降的情况,但是这个情况最后可以通过修改归一化的方式或者参数来解决,其实就是归一化的方式不正确导致的正确率下降的问题。
  • 大小: 3 KB
  • 大小: 3.5 KB
分享到:
评论
1 楼 sanjiaozhou135 2016-06-04  
请问我在训练时为什么一直出现Exception in thread "main" java.lang.NumberFormatException: For input string: "x0.000000000000000"这种错误呢

相关推荐

    libsvm java实用说明

    在这个文档中,我们将重点讨论如何在Java环境下使用LibSVM进行二次开发。 首先,你需要从官方网站(http://www.csie.ntu.edu.tw/~cjlin/libsvm/)下载LibSVM的源代码包。解压后,找到`java`文件夹,并将其导入到...

    libsvm-mat-2.89-3 和 LibSvm 使用说明 学习心得

    该库不仅提供了C/C++接口,还支持其他编程语言如Python、Java等,而在MATLAB环境中的libsvm-mat-2.89-3则是专为MATLAB用户设计的版本,让SVM模型的构建和训练更为便捷。 一、libsvm-mat-2.89-3简介 libsvm-mat-2.89...

    libsvm-介绍及使用说明(教程),内附中英文两版

    提供的" SVM使用教程 "包含了中英文两版的详细说明,对于初学者来说是非常宝贵的资源。中文版教程更符合国人的阅读习惯,帮助理解SVM的基本概念和LibSVM的使用方法;英文版则可以帮助读者接触原汁原味的学术语言,...

    libsvm.zip_LibSVM_libsvm 说明

    这个压缩包“libsvm.zip”包含了LibSVM的详细说明和编程方法,是研究和使用LibSVM的重要资源。 LibSVM的核心在于支持向量机(Support Vector Machine,SVM),这是一种二分类模型,通过寻找最大边距超平面来划分...

    libsvm使用说明

    **libsvm 使用说明** **一、libsvm 概述** libsvm(Library for Support Vector Machines)是由台湾大学的林智仁教授开发的一款开源的支持向量机(SVM)库,适用于各种分类和回归任务。SVM是一种强大的机器学习...

    java LivSVM使用的说明文档

    **Java LibSVM 使用指南** LibSVM,全称Library for Support Vector Machines,是由台湾大学的Chih-Chung Chang和Chih-Jen Lin开发的一款强大的机器学习库,主要用于支持向量机(SVM)的训练和预测。在Java环境下,...

    LibSVM(求解SVM的软件)

    7. **库的扩展性**:LibSVM不仅支持MATLAB,还有Python、Java、C++等多种语言的接口,方便不同编程背景的用户使用。 在提供的压缩包“libsvm-mat-2.91-1”中,可能包含了MATLAB接口的源代码、文档、示例数据和预...

    weka中使用libsvm需要的包

    这通常涉及到将Libsvm的Java类库(jar文件)添加到Weka的工作流程中。在这个案例中,我们有两个关键的jar文件:libsvm.jar和wlsvm.jar。 1. libsvm.jar:这是Libsvm的核心库,包含了SVM的实现,包括训练模型、预测...

    支持向量机资料,libsvm使用帮助,源码注释

    在libsvm的使用说明中,通常会涵盖以下几个方面: 1. 数据预处理:SVM需要将原始数据转化为适合模型训练的格式,例如,libsvm要求数据以特定的文本格式输入,每一行代表一个样本,每个特征由空格或制表符分隔,最后...

    libsvm安装(说明书/VC6.0/heart_scale.mat)

    在命令行窗口中,切换到LibSVM的根目录,使用`svm-train`训练模型,用`svm-predict`进行预测,使用`heart_scale.data`作为输入。 **9. 集成到项目** 最后,你可以将编译生成的LibSVM库文件(`.lib`)和头文件(`.h`...

    libsvm_src_note.rar_libsvm 说明_上海交通大学

    他们的libsvm说明文档很可能涵盖了深入的技术细节、实用案例以及最佳实践,对于学习和应用libsvm具有极高的参考价值。 总结,libsvm是一个强大的工具,广泛应用于各种机器学习任务,而上海交通大学提供的说明文档则...

    libsvm-3.24_LibSVM_SVM_

    5. **库接口**:LibSVM提供了C、Java、Python等多种语言的接口,方便不同平台和语言的用户使用。 **SVM参数调优** 在使用LibSVM时,参数调优是提升模型性能的关键步骤。主要关注两个关键参数: - **C**:惩罚参数...

    libsvm3.14

    6. **集成在其他编程环境**:libsvm可以方便地与Python、Java、MATLAB等语言接口,方便科研人员和工程师使用。 **libsvm3.14的使用** 在libsvm-3.14的压缩包中,通常包含以下组件: 1. **源代码**:供开发者编译...

    libsvm-2.9(最新版)

    7. **语言支持**:libsvm提供了C++和Java两种语言的实现,同时有Python、MATLAB、Perl等语言的接口,方便不同平台和环境下的使用。 8. **文档与示例**:libsvm附带详细的用户指南和示例代码,帮助用户快速上手。 *...

    libsvm-2.9.tar.zip

    在libsvm-2.9.tar.gz解压后的文件中,"Readme-说明.htm"是一个重要的文档,它通常包含了库的安装指南、使用方法、更新日志以及常见问题解答等关键信息。对于初学者而言,这是了解和使用libsvm的第一步,务必仔细阅读...

    libsvm3.11

    在**描述**中提到,这个版本是“最新版”的libsvm,意味着它包含了最新的算法优化和功能改进,用户只需参考使用说明即可快速上手。 1. **支持向量机(SVM)基础**: - SVM是一种监督学习模型,用于分类和回归分析...

    weka 集成LibSVMm所需的jar(wlsvm.zip),另附libsvm.zip和liblinear.zip

    而`libsvm.jar`就是将LibSVM库转换为Java可直接使用的形式,使得我们可以在Weka中直接调用SVM模型。 `wlsvm.zip`中的`wlsvm.jar`则是一个特定的Weka扩展,它提供了一个接口来集成LibSVM,使得用户可以在Weka的工作...

Global site tag (gtag.js) - Google Analytics