6

libsvmがどのように機能するか知りたいです。私はこのリンクでこのコードを試しました[1]:すべてに対して1つのSVMでの10倍の相互検証(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);

誰かがそれを解決する方法を私に助けてくれますか?ありがとうございました

4

2 に答える 2

8

あなたが参照した投稿に従ったところ、エラーなしで結果が得られました。私の場合、「fisheriris」データセットの相互検証精度は 96.6667% です。あなたにとって、最初のコメントが言ったように、エラーは「svmtrain」からのものであると思います。以下では、どのようにコードを実行したかを示します。

1) http://www.csie.ntu.edu.tw/~cjlin/libsvm/から libsvm をダウンロードし、解凍します。

2) ファイル名svmtrain.csvmpredict.cin\libsvm-3.16\matlab\libsvmtrain.candに変更します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.mlibsvmpredict_ova.mlibsvmtrain_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'));
于 2013-03-22T17:54:32.580 に答える
3

とても簡単な方法があります。matlab の [パスの設定] ボタンで libsvm フォルダーを優先パスとして設定します。

于 2013-05-06T18:27:42.030 に答える