我正在使用Weka Java API,我有一段代码。在代码中,我正在尝试执行以下操作:
for (each instance i in the training/test set)
if (condition == TRUE)
remove instance (i) from training/test set;
[编辑]例如,我有1000个实例,我试图查看每个实例,如果满足特定条件。如果条件为真,那么我将从训练/测试集中删除该实例。
我认为Weka没有以这种方式直接删除实例的选项。任何建议,专业人士?
答案 0 :(得分: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实例过滤器之一(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);