我按照你提到的帖子,我得到了没有错误的结果。对我来说,“fisheriris”数据集的交叉验证准确率为 96.6667%。对你来说,我认为错误是正如第一条评论所说的那样,错误来自“svmtrain”。下面,我将展示我是如何运行代码的。
1) 从http://www.csie.ntu.edu.tw/~cjlin/libsvm/下载 libsvm并解压。
2) 将文件名svmtrain.c
和svmpredict.c
in\libsvm-3.16\matlab\
更改为libsvmtrain.c
and libsvmpredict.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)在一对一 SVM(使用 LibSVM)中接受 10 折交叉验证后的接受答案后,您为每个函数创建四个 .m 文件,, ,crossvalidation.m
并libsvmcrossval_ova.m
运行该应答器提供的主函数,其中如下:libsvmpredict_ova.m
libsvmtrain_ova.m
clear;clc;
%# laod dataset
S = load('fisheriris');
data = zscore(S.meas);
labels = grp2idx(S.species);
%# cross-validate using one-vs-all approach
opts = '-s 0 -t 2 -c 1 -g 0.25'; %# libsvm training options
nfold = 10;
acc = libsvmcrossval_ova(labels, data, opts, nfold);
fprintf('Cross Validation Accuracy = %.4f%%\n', 100*mean(acc));
%# compute final model over the entire dataset
mdl = libsvmtrain_ova(labels, data, opts);
acc = libsvmtrain(labels, data, sprintf('%s -v %d -q',opts,nfold));
model = libsvmtrain(labels, data, strcat(opts,' -q'));