Matlab Weka 接口 AdaBoost 问题:越界异常
Posted
技术标签:
【中文标题】Matlab Weka 接口 AdaBoost 问题:越界异常【英文标题】:Matlab Weka Interface AdaBoost Issues: Out of Bounds Exception 【发布时间】:2012-05-02 20:06:54 【问题描述】:我正在使用从文件交换中获得的 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
电子邮件从发送邮件的人的帐户中退回,并且他似乎没有回复页面上的 cmets - 我希望也许这里有人使用过这个。
编辑:这是我用来训练和测试分类器的代码:
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);
【问题讨论】:
【参考方案1】:我没有使用过这种软件组合,所以我只能猜测可能导致这种情况的原因。
您的训练/测试数据矩阵是否正确?它们应该是 N-by-D(N 个实例,D 个特征)。
如果您传入一个 D-by-N 训练矩阵和一个 D-by-M 测试矩阵,那么我希望它仅在 M
【讨论】:
感谢您的回答!但是,矩阵的方向正确。我在另一个程序中使用了完全相同的代码,但使用了不同的分类器,它在那里工作。此外,为了确定起见,我尝试转置矩阵并导致它中断,因为标签不是字符串类型。 你能展示你用来训练和测试你的分类器的代码吗? 我为我的缓慢回复道歉 - 我没有收到您的评论通知。我已经在我的帖子中进行了您要求的编辑。非常感谢!以上是关于Matlab Weka 接口 AdaBoost 问题:越界异常的主要内容,如果未能解决你的问题,请参考以下文章