我在WEKA中完成了一种属性选择(信息增益(。之后,由于信息增益方法中每个属性的重要性,它将返回新数据,并带有新的属性排列。我想删除一个或多个新数据列以在我的数据集中具有信息属性。在这里,您可以看到我的代码:
Instances data = new Instances(new BufferedReader(new FileReader("iris.arff")));
InfoGainAttributeEval eval = new InfoGainAttributeEval();
Ranker search = new Ranker();
AttributeSelection attSelect = new AttributeSelection();
attSelect.setEvaluator(eval);
attSelect.setSearch(search);
attSelect.SelectAttributes(data);
int[] indices = attSelect.selectedAttributes();
data = attSelect.reduceDimensionality(data); //re-arrange attributes but not remove them
预先感谢!
您可以使用Remove
过滤器来完成此操作。具体而言,这些线路应该达到预期的效果:
Remove removeFilter = new Remove();
removeFilter.setAttributeIndicesArray(indices);
removeFilter.setInvertSelection(true);
removeFilter.setInputFormat(data);
Instances newData = Filter.useFilter(data, removeFilter);
这假设indices
包含要保留的属性的索引。如果它包含要删除的属性的索引,请删除调用setInvertSelection
方法。