关于Libsvm的使用的一点体会(在C++中调用)

1 篇文章 0 订阅
1 篇文章 0 订阅

LibSVM的工具包对于想快速入手分类来说确实很实用,在使用过程中在命令行敲入几行简单的命令就能完成大量的运算过程,总体来说上手比较快。

在自己使用的过程中,感觉最不容易操作的地方就在于,对svm中各个工具的环境变量的配置,其中包括gnuplot画图、用python程序调用grid.py来进行参数寻优,以及libsvm\windows文件夹下面svm-scale.exe、svm-train.exe、svm-predict.exe。针对这三个项工具加入环境变量的方法网上比较多,在此不再赘言。

我针对自己的经历,谈一下如何在VC++程序中用system()函数来循环调用DOS命令行,来实现对大量的数据文件进行SVM中的寻优以及建模和预测。

首先,要介绍sprintf()这个C++中的函数,它可以在循环语句中实现将循环的变量赋值给另外的一个字符型的变量,然后这个字符型的变量可以作为system()这个函数的参数,直接传给DOS命令行,来实现对多个有规律的数据文件的SVM操作。如下例,

for(q=5;q<=100;q=q+5)

                   for(a=1;a<=10;a=a++)

                   {

sprintf(ch,"C:\\libsvm\\windows\\svm-scale.exe L%d-w%d.txt> L%d-w%d.scale",q,a,q,a);⑴

system(ch);⑵

}

语句⑴的功能是实现将循环中的变量q,a分别赋给“L%d-w%d.txt”两个%号后面的变量,即生成一系列的有规律的数据文件名,以便让system()调用。

以上小程序需要特别注意的地方在于,你要操作的那一系列文件应该放在你写的C++程序所在的文件夹中,这是默认的情况。当然你也可以修改程序,让程序识别你指定的特定的文件夹中的文件。

Svm-scale.exe的调用比较简单,下面一步进行grid参数寻优时会稍微麻烦一点。麻烦的原因在于大多数人的python程序和C++程序不在同一个文件夹中,下面一条语句的功能是实现告诉系统用C:\\Python24下面的python程序,来调用C:\\libsvm\\windows下面的gridmy.py脚本程序,来对你的C++程序所在文件夹中的各种后缀名为scale文件进行参数寻优。在这里,需要修改gridmy.py中svm-train.exe的路径,这里应该修改成绝对路径,否则程序会在c++程序所在的目录开始寻找相对路径,此时就会输入”svm-trainexecutable file can’t find”之类的错误。

sprintf(ch,"C:\\Python24\\pythonC:\\libsvm\\windows\\gridmy.py L%d-w%d.scale",q,a);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值