0

我正在使用从文件交换中获得的 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);
4

1 回答 1

0

我没有使用过这种软件组合,所以我只能猜测可能导致这种情况的原因。

您的训练/测试数据矩阵是否正确?它们应该是 N-by-D(N 个实例,D 个特征)。

如果您传入一个 D-by-N 训练矩阵和一个 D-by-M 测试矩阵,那么我希望它仅在 M < N 时才有效 - 这就是您所描述的 - 即使那样,它也不会给出有意义的结果。

于 2012-04-21T14:52:08.140 回答