在Weka中创建兼容的训练和测试实例

我正在尝试创建测试和训练的Instances对象。训练集中有一些属性在测试集中不存在。尽管如此,我在正确的过滤方法上遇到了麻烦。我尝试了两种过滤器。以下是代码以及它们产生的错误。

Instances rawTraining = new Instances(arffFile);Instances rawTesting = new Instances(arffFile);System.out.println("Raw Training Attributes: "+rawTraining.numAttributes());//Raw Training Attributes: 2446System.out.println("Raw Testing Attributes: "+rawTesting.numAttributes());//Raw Testing Attributes: 2381rawTraining.setClassIndex(rawTraining.numAttributes()-1);

数值转名义过滤器

NumericToNominal filter = new NumericToNominal();filter.setAttributeIndicesArray(new int[] {rawTraining.classAttribute().index()});filter.setInputFormat(rawTraining);Instances finalTraining = Filter.useFilter(rawTraining, filter);Instances finalTesting = Filter.useFilter(rawTesting, filter);

产生以下错误:

java.lang.IllegalArgumentException: Src and Dest differ in # of attributes: 2381 != 2446    at weka.core.RelationalLocator.copyRelationalValues(RelationalLocator.java:87)    at weka.filters.Filter.copyValues(Filter.java:371)    at weka.filters.Filter.bufferInput(Filter.java:313)    at weka.filters.SimpleBatchFilter.input(SimpleBatchFilter.java:199)    at weka.filters.Filter.useFilter(Filter.java:680)

标准化过滤器

Standardize filter = new Standardize();filter.setInputFormat(rawTraining);Instances finalTraining = Filter.useFilter(rawTraining, filter);Instances finalTesting = Filter.useFilter(rawTesting, filter);

产生以下错误:

java.lang.IndexOutOfBoundsException: Index: 2381, Size: 2381    at java.util.ArrayList.rangeCheck(ArrayList.java:653)    at java.util.ArrayList.get(ArrayList.java:429)    at weka.core.Instances.attribute(Instances.java:341)    at weka.core.AbstractInstance.attribute(AbstractInstance.java:72)    at weka.filters.unsupervised.attribute.Standardize.convertInstance(Standardize.java:240)    at weka.filters.unsupervised.attribute.Standardize.input(Standardize.java:142)    at weka.filters.Filter.useFilter(Filter.java:680)

如何使这两个Instances对象兼容?


回答:

这里提供的答案将有助于解决您的一些疑虑:Weka中的测试文件是否需要与训练文件相同或更少的特征

简而言之,您首先需要确保您的训练和测试实例具有相同的属性(您应该能够在任何类属性中插入’?’)。您提供的代码片段看起来不错,所以我建议先处理这个问题,然后看看会发生什么。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注