我跟着你提到的帖子,我得到的結果沒有錯誤。對我而言,'fisheriris'數據集的交叉驗證準確率爲96.6667%。對你而言,我認爲錯誤在於錯誤來自'svmtrain',就像第一條評論所說的那樣。在下面,我將展示我如何運行代碼。
1)從http://www.csie.ntu.edu.tw/~cjlin/libsvm/下載libsvm並解壓縮。
2)更改文件svmtrain.c
和svmpredict.c
的名字在\libsvm-3.16\matlab\
是libsvmtrain.c
和libsvmpredict.c
。然後在同一個文件夾,並改變線16和第17行找到make.m
是你只是改變MEX * .c文件
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。
4)後10 fold cross-validation in one-against-all SVM (using LibSVM)的接受的答案之後,您創建四個.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'));
命名與生物信息學'svmtrain'和libsvm'svmtrain'衝突嗎? [LIBSVM常見問題](http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#/Q9:_MATLAB_interface) – AGS 2013-03-22 11:31:22
我在Makefile中將此CXX = g ++ 更改爲 CXX = g ++ -XY。但仍然錯誤 – user2157806 2013-03-22 11:39:29
這不是我所建議的。在運行libsmv'svmtrain'時,嘗試使用完整路徑名稱。 – AGS 2013-03-22 11:45:25