2013-08-24 110 views
2

我在Weka Java API中使用了一段代码。在代码中,我试图做一些事情如下:删除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); 
    } 
} 

筛选方法的实例的Weka过滤

使用一个(supervisedunsupervised)或自己编写。

例如,你可以使用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

谢谢。我尝试了一种天真的方法,它工作。 –