我正在使用我从文件交换中获得的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);
答案 0 :(得分:0)
我没有使用过这种软件组合,所以我只能猜测可能导致这种情况的原因。
您的训练/测试数据矩阵是否正确?它们应该是N-by-D(N个实例,D个特征)。
如果您正在通过D-by-N训练矩阵和D-by-M测试矩阵,那么我希望它仅在M <0时才起作用。 N - 这就是你所描述的 - 即便如此,它也不会给出有意义的结果。