Я делаю перекрестную проверку, используя интерфейс Matlab Weka, который я получил от обмена файлами. Моя структура цикла, кажется, отлично работает для логистического классификатора 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);
С помощью некоторых тестов я определил, что это происходит только тогда, когда количество экземпляров в обучающем наборе больше, чем количество экземпляров в тестовом наборе. Я уверен, вы понимаете, почему это проблема для меня, поскольку в большинстве случаев обучающая выборка больше, чем тестовая.
Есть ли что-то другое в том, как я должен форматировать свои входные данные при использовании Adaboost, а не Logistic? Любая информация, которую вы можете дать по этой проблеме, будет очень полезной.
Я скачал этот код с этой страницы: 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);