我正在使用从文件交换中获得的 Matlab Weka 接口进行一些交叉验证。我的循环结构似乎适用于 Weka 的 Logistic 分类器。但是,当我尝试对 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);