あなたが参照した投稿に従ったところ、エラーなしで結果が得られました。私の場合、「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) mex *.c ファイルに変更した make.m を実行します。
4) 1 対 1 の SVM (LibSVM を使用) での 10 倍クロス検証後の受け入れられた回答に続いて、関数、crossvalidation.m
、ごとに 4 つの .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'));