0

私はプロジェクトの親指の認識に取り組んでいます。以下は、42 X 25のオーダーの118枚の画像を読み取り、トレーニングマトリックスに保存しているコードです。

training=zeros(118, 1050);

imagefiles = dir('*.png');      
nfiles = length(imagefiles);    
for ii=1:nfiles
    currentfilename = imagefiles(ii).name;
    I = imread(currentfilename);

    BW=im2bw(I,graythresh(I));    

    temp = reshape(BW,1,1050);
    training(ii,:)=temp;
end

ここで、画像にラベルを割り当てるためのlabelDataのマトリックスを作成しています。

labelData = zeros(118,1);
labelData(1:50,:) = 0; 
labelData(51:83,:) = 1;
labelData(84:118,:) = 2;

ここでは、トレーニングデータとラベルデータを提供してシステムをトレーニングしています。

options=optimset('MaxIter',5000);
SVMStruct =  svmtrain(training,labelData,'Kernel_Function','linear','QuadProg_Opts',options);

しかし、このコードを実行すると、次のようなエラーが発生します

Error 1 : SVMTRAIN only supports classification into two groups. GROUP contains 3 groups.
Error 2 : SVMStruct = svmtrain(training,labelData,'Kernel_Function','linear','QuadProg_Opts',options);

正常に動作する前に使用した問題を教えてください。しかし、今は何が起こっているのかわかりません。前もって感謝します。

4

3 に答える 3

3

エラー 1 は、問題の内容を示しています。MATLAB の組み込み SVM は、バイナリ分類のみをサポートしています。あなたは3つのクラスを割り当てています。

オプションは次のとおりです。

  1. 0 対 1,2、1 対 0,2、2 対 0,1 の 3 つの分類子を作成し、それぞれの出力を調べます。
  2. 0 対 0 以外を構築し、次に 1 対 2 を構築します。
  3. LIBSVM や svmlight などのパッケージのマルチクラス SVM トレーナーを使用します。
于 2012-05-29T18:56:34.487 に答える
1

エラーメッセージはかなり明確です。MATLAB の svmtrain はマルチクラス分類をサポートしていません。つまり、2 つのクラスのみが許可されています。

したがって、2 つのオプションがあります。1) 独自のマルチクラス分類器を svmtrain のラッパーとして記述します。1 対すべてまたは 1 対 1 の戦略を実装できます。2) libsvmなどのマルチクラス分類を既にサポートしている svm 実装を使用します。

于 2012-05-29T18:56:57.793 に答える
0

問題は labelData ベクトルにあります。それをチェックして、エラーを見つけてください。クラスの数が .

于 2012-07-16T19:30:31.770 に答える