matlab中addpath libsvm库之后的问题

时间:2013-03-22 11:17:47

标签: matlab classification libsvm

我想知道libsvm是如何工作的。我在此链接中尝试了此代码[1]:10 fold cross-validation in one-against-all SVM (using LibSVM)。它正在工作(我没有在matlab中添加路径libsvm库)但是在我添加了libsvm库之后。它不起作用。我不知道如何解决它。有一个错误:

Error using svmtrain (line 233)
Y must be a vector or a character array.

Error in libsvmtrain_ova (line 11)
        models{k} = svmtrain(double(y==labels(k)), X, strcat(opts,' -b 1 -q'));

Error in libsvmcrossval_ova (line 10)
        mdl = libsvmtrain_ova(y(trainIdx), X(trainIdx,:), opts);

Error in main (line 9)
acc = libsvmcrossval_ova(labels, data, opts, nfold);

有没有人帮我解决这个问题?谢谢

2 个答案:

答案 0 :(得分:8)

我按照你提到的帖子,我得到的结果没有错误。对我来说,'fisheriris'数据集的交叉验证准确率为96.6667%。对你而言,我认为错误是错误来自'svmtrain',就像第一条评论所说的那样。在下文中,我将展示如何运行代码。

1)从http://www.csie.ntu.edu.tw/~cjlin/libsvm/下载libsvm并解压缩。

2)将svmtrain.c中的文件svmpredict.c\libsvm-3.16\matlab\的名称更改为libsvmtrain.clibsvmpredict.c。然后在同一文件夹中找到make.m,并将第16行和第17行更改为

mex CFLAGS="\$CFLAGS -std=c99" -largeArrayDims libsvmtrain.c ../svm.cpp svm_model_matlab.c
mex CFLAGS="\$CFLAGS -std=c99" -largeArrayDims libsvmpredict.c ../svm.cpp svm_model_matlab.c

3)运行make.m你刚才改为mex * .c文件。

4)根据帖子10 fold cross-validation in one-against-all SVM (using LibSVM)的接受回答,您为每个功能创建了四个.m文件,crossvalidation.mlibsvmcrossval_ova.mlibsvmpredict_ova.m,{{1}并运行该回答者提供的主要功能,如下所示:

libsvmtrain_ova.m

答案 1 :(得分:3)

有一种非常简单的方法。将libsvm文件夹设置为matlab中“设置路径”按钮的优先级路径。