Ich folgte dem Beitrag, auf den Sie verwiesen, und ich habe die Ergebnisse ohne Fehler erhalten. Für mich ist die Genauigkeit der Kreuzvalidierung für den Datensatz "fisheriris" 96,6667%. Für Sie, ich denke der Fehler ist, dass der Fehler von 'svmtrain' ist, wie der erste Kommentar sagte. Im Folgenden werde ich zeigen, wie ich den Code ausgeführt habe.
1) Laden Sie die libsvm von http://www.csie.ntu.edu.tw/~cjlin/libsvm/ herunter und entpacken Sie sie.
2) ändern die Namen der Dateien svmtrain.c
und svmpredict.c
in \libsvm-3.16\matlab\
libsvmtrain.c
und libsvmpredict.c
zu sein. Und suchen Sie dann make.m
im selben Ordner und Änderungslinie 16 und Linie 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) laufen make.m werden Sie gerade geändert mex * .c Dateien.
4) im Anschluss an die akzeptierte Antwort der Post 10 fold cross-validation in one-against-all SVM (using LibSVM), erstellen Sie vier .m-Dateien für jede Funktion, crossvalidation.m
, libsvmcrossval_ova.m
, libsvmpredict_ova.m
, libsvmtrain_ova.m
und die Hauptfunktion laufen von diesem Beantworter vorgesehen, die wie folgt lautet:
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'));
Namenskonflikt mit der Bioinformatik 'svmtrain' und der libsvm' svmtrain'? [LIBSVM FAQ] (http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#/Q9:_MATLAB_interface) – AGS
Ich ändere dieses eine CXX = g ++ im Makefile mit CXX = g ++ -XY. aber immer noch Fehler – user2157806
Das ist nicht was ich vorschlage. Verwenden Sie den vollständigen Pfadnamen, wenn Sie libsmv 'svmtrain' ausführen. – AGS