Matlab Weka 接口 AdaBoost 问题:越界异常



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

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

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

如果你传递一个 D-by-N 训练矩阵和一个 D-by-M 测试矩阵,那么我希望它只有在 M

最新更新