java svm toy_支持向量机libsvm实战入门

本文介绍了如何使用JAVA版本的libsvm库进行支持向量机(SVM)的训练和预测。首先,简述了libsvm的特性,接着详细讲述了数据准备、数据缩放、模型训练和预测的步骤。通过实例演示了如何使用svm_scale、svm_train和svm_predict工具处理usps数据集,并展示了训练生成的模型和预测结果。
摘要由CSDN通过智能技术生成

一、libsvm介绍

SVM支持向量机是目前比较流行的一种数据挖掘方法,能够处理较高维度,具体介绍可参考这篇博文:

LIBSVM是台湾大学林智仁(Lin Chih-Jen)教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进、修改以及在其它操作系统上应用;该软件对SVM所涉及的参数调节相对比较少,提供了很多的默认参数,利用这些默认参数可以解决很多问题;并提供了交互检验(Cross Validation)的功能。

1d5be7c6ddba23e161e78a225c5254c6.png

这里我们使用JAVA版本的,主要就是svm_scale,svm_train,svm_predict这三个程序,只要安装了JDK就可以使用如下命令运行java -classpath libsvm.jar svm_scale +参数

java -classpath libsvm.jar svm_train +参数

java -classpath libsvm.jar svm_predict +参数

e4e0da82812b4617d332a8ab27cb6fb8.png

二、数据准备

LibSVM使用的数据格式为 :: …,label表示分类,index表示第几个变量/特征,软件官网已提供了大量符合数据格式要求的数据集供我们下载:

dc05367d902e9d94e39c08d06928eb3b.png

下载其中名为usps的数据集,如图所示,该数据集分成了10类,训练样本7291,测试样本2007,属性(变量)256个

9ba6906d79be20ec52540ff6c8136704.png

三、数据缩放(归一化)

svm-scale帮助提示

eac1423a983786a66c3aca9ca0d7d306.png

归一化后的数据默认显示在控制台上所以我们要重定向到文件里保存

java -classpath libsvm.jar svm_scale -s   1.txt   usps  > scale

表示将usps训练集进行缩放(默认的规则),将缩放后的数据结果重定向输出到scale,并将这个缩放规则存储在1.txt中以便后面继续使用。

四、 训练并生成模型

svm-train帮助提示

0adfc41353ce4de1702317b1df5a77ef.png

java -classpath libsvm.jar svm_train  scale  model

将归一化后的数据文件scale训练成模型保存在model文件中,训练过程如下

10c92a0d91549c8a94765fa45a020d72.png

生成的模型文件如下所示:

f2468935f5c4d27e0f1104ba2e6d7ad2.png

五、利用模型进行预测

svm_predict帮助提示

c14b10dd1538fb9c41df125ee7f5ed13.png

java -classpath libsvm.jar svm_predict  usps.t model output

利用第三步生成的模型对测试数据usps.t进行预测,预测结果保存在output文件中。

0547a3c30da306f228c244ea26bea2f8.png

生成的预测结果文件output中直接是测试集中每个样本的分类。

454cb20213380ebf75b17fa3f3f493b3.png

注:

svm_toy小程序java -classpath libsvm.jar svm_toy

550ee98dee90ddf95a56be158fa9dd3f.png

弹出一个图形窗口自己可以在上面绘制不同颜色的点进行测试

156be4f9d9b4fab5f1c081a3688221f9.png

注:

One Class SVM是指你的training data 只有一类positive (或者negative)的data, 而没有另外的一类。在这时,你需要learn的实际上你training data 的boundary。而这时不能使用 maximum margin 了,因为你没有两类的data。 所以呢,在这边文章中,“Estimating the support of a high-dimensional distribution”, Schlkopf 假设最好的boundary要远离feature space 中的原点。

左边是在original space中的boundary,可以看到有很多的boundary 都符合要求,但是比较靠谱的是找一个比较 紧(closeness) 的boundary (红色的)。这个目标转换到feature space 就是找一个离原点比较远的boundary,同样是红色的直线。当然这些约束条件都是人为加上去的,你可以按照你自己的需要采取相应的约束条件,比如让你data的中心离原点最远。

410f40628e15deced515ac36978091a6.png

参考文章:

别人翻译的README里面命令参数详解

libsvm 参数说明【中英文双语版本】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值