2013-08-24 5 views
2

Я использую API Weka Java, где у меня есть фрагмент кода. В коде я пытаюсь сделать что-то выглядит следующим образом:Удаление экземпляров в Weka

for (each instance i in the training/test set) 
     if (condition == TRUE) 
      remove instance (i) from training/test set; 

[править] Например, у меня есть 1000 экземпляров, и я пытаюсь увидеть в каждом конкретном случае, если конкретное условие. Если условие истинно, я удалю экземпляр из набора обучения/теста.

Я считаю, что у Weka нет возможности прямого удаления экземпляров таким образом. Любые предложения, профи?

+0

Ваш текущий вопрос безнадежно расплывчатым, не могли бы вы предоставить некоторые детали? –

+0

Я отредактировал вопрос @JoshM –

ответ

7

Я не вижу проблемы здесь.

Наивный метод

перебрать все экземпляры в наборе данных и удалить те, которые соответствуют Вашему условию.

Instances data; 
... 

// it's important to iterate from last to first, because when we remove 
// an instance, the rest shifts by one position. 
for (int i = data.numInstances - 1; i >= 0; i--) { 
    Instance inst = data.getInstance(i); 
    if (condition(inst)) { 
     data.delete(i); 
    } 
} 

метод фильтра

Используйте один из экземпляров фильтров ВЕКА (supervised или unsupervised) или написать свой собственный.

Например, вы можете использовать RemoveWithValues filter и применять Batch filtering

Instances data; 
RemoveWithValues filter = new RemoveWithValues(); 

String[] options = new String[4]; 
options[0] = "-C"; // attribute index 
options[1] = "5"; // 5 
options[2] = "-S"; // match if value is smaller than 
options[3] = "10"; // 10 
filter.setOptions(options); 

filter.setInputFormat(data); 
Instances newData = Filter.useFilter(data, filter); 
+0

Спасибо. Я пробовал наивный подход, и это сработало. –

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