您的位置:首页 > 编程语言 > MATLAB

关于libsvm中matlab入口和c++入口的不同

2016-01-15 14:59 537 查看
前几天一直中疑惑,我在svm-train.c中改了语句,为什么从matlab运行代码后,看不到输出,原来是把这两个入口搞错了呀。

先写上文件夹目录,这样不会搞错:

E:\svm\libsvm-master\svm.cpp  svm.h  svm-predict.c  svm-train.c

E:\svm\libsvm-master\matlab\ libsvmread.c libsvmwrite.c  svm_model_matlab.c  svm_model_matlab.h svmpredict.c  svmtrain.c

而之前,我在matlab中调用的svmtrain和svmpredict函数,是来自于libsvm-master中的matlab文件夹下的这两个函数。

 

因此,要想从matlab中输出自己的东西,可以对这两个文件进行修改。输出语句,例如:

mexPrintf("***************************");

而svmtrain.c文件中,mexFunction函数是对matlab语句输入中的model=svmtrain(Y_train,X_train);

进行解析,然后调用libsvm-master中的svm.cpp进行执行。

 

故,matlab文件夹下的两个函数,是从c++ ----.>matlab输出的一个封装。

而正在进行算法执行的,是调用libsvm-master中的svm.cpp进行执行。

而对于c++开发人员,对数据的输入解析,调用的是svm-train.c 和svm-predict.c这两个文件。因此要从命令行输入训练和测试的语句,进行算法运行。

 

简单的讲,matlab文件夹下的svmtrain和svmpredict函数,和libsvm-master中的svm-train.c 和svm-predict.c这两个函数分别是从matlab和c++两个不同的入口输入数据进行执行的。

 

编译:

(1)若对matlab输出进行修改后,将当前文件路径改到E:\svm\libsvm-master\matlab下,然后用make命令进行编译。

(2)若对从命令行输出进行修改后,则进行以下的编译:

1. 环境变量设置

a) cmd到D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64>

b) 执行vcvars64.bat

2. 编译程序

a) 切换到工作目录,例如E:\svm\libsvm-master>

b) 执行nmake -f Makefile.win clean all

 

执行:

(1)从matlab入口,则执行以下语句:

model=svmtrain(Y_train,X_train);%,,cmd

[predict_label, acc, prob_estimates] = svmpredict(Y_test, X_test,model);

 

(2)从c++入口或运行行入口,则执行以下语句:

1.进入E:\svm\libsvm-master\windows>

2.训练输入    svm-train.exe ../data.txt train.model   其中data.txt在windows的上一层中

3.测试输入    svm-predict.exe ../test.txt train.model result   结果会在result中。Text.txt是 测试数据

 

若有的人的libsvm中没有matlab文件夹,可以在下面下载: http://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html#matlab
其中的,

A simple MATLAB and OCTAVE interfaceLIBSVM authors at National Taiwan University.The latestIncluded inLIBSVMpackage
另外,当中svm.cpp或svmtrain.c svmpredict.c中修改后,注意需要重新编译:

注:修改完svm.cpp文件后,需重新编译,

进入以下并执行:   E:\svm\libsvm-master>nmake -f Makefile.win clean all

同时也要对matlab文件夹中的进行编译,

当前路径进入以下并执行make 命令。    E:\svm\libsvm-master\matlab

这样matlab中输出的才是更改以后的,不然matlab不会输出修改后的程序。

好了,再有什么需要补充的再补充进去吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  libsvm 编译 入口 svm matlab