ファイル交換から取得したMatlab Weka Interfaceを使用して、相互検証を行っています。私のループ構造は、Weka のロジスティック分類器でうまく機能しているようです。ただし、AdaBoostM1 に対してまったく同じことを実行しようとすると、次のエラーがスローされます。
??? Java exception occurred: java.lang.ArrayIndexOutOfBoundsException
Error in ==> wekaClassify at 24 classProbs(t+1,:) = (classifier.distributionForInstance(testData.instance(t)))';
Error in ==> classifier_search at 225 [pred ~] = wekaClassify(matlab2weka('instance', featurelabels, tester), classifier);
いくつかのテストを通じて、これはトレーニング セット内のインスタンスの数がテスト セット内のインスタンスの数よりも多い場合にのみ発生することがわかりました。ほとんどの場合、トレーニング セットのサイズはテスト セットのサイズよりも大きいため、これが私にとって問題である理由がわかると思います。
Logistic ではなく Adaboost を使用する場合、入力のフォーマット方法に違いはありますか? この問題に関してあなたが提供できる情報はとても役に立ちます。
このコードをこのページからダウンロードしました: http://www.mathworks.com/matlabcentral/fileexchange/21204-matlab-weka-interface
メールは作成者のアカウントから戻ってきますが、ページのコメントに返信していないようです。
編集:分類子のトレーニングとテストに使用するコードは次のとおりです。
classifier = trainWekaClassifier(matlab2weka('training', featurelabels, train), 'meta.AdaBoostM1', { strcat('-P 100 -S 1 -I ', num2str(r), '-W weka.classifiers.trees.DecisionStump')});
[pred ~] = wekaClassify(matlab2weka('instance', featurelabels, tester), classifier);