2015-01-29 13 views
0

Я пытаюсь создать тест и поезд Instances объектов. В поезде есть некоторые атрибуты, которые не тестируются. Однако у меня проблемы с правильной методологией фильтрации. Я попробовал два фильтра. Ниже приведен код с ошибками, которые они создают.Создание совместимых тренировочных и тестовых экземпляров в Weka

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

NumericToNominal Фильтр

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` совместимы?

ответ

1

Ответ на этот вопрос поможет решить некоторые из ваших проблем: Does test file in WEKA require or less number of features as train.

Короче говоря, сначала вам нужно убедиться, что у вас есть те же атрибуты для учебных и тестовых экземпляров (вы должны вставить «?» В любые атрибуты класса). Фрагменты кода, которые вы предоставили, выглядят отлично, поэтому я бы справился с этим первым, а затем посмотрел, что произойдет.

+0

Yu, это сделал. Я обрезал тестирование с тренировки, а затем наоборот, и код работал. –

Смежные вопросы