我在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
提前致谢!
答案 0 :(得分:1)
您可以使用Remove
过滤器来完成此操作。具体来说,沿着这些方向的东西应该达到预期的效果:
Remove removeFilter = new Remove();
removeFilter.setAttributeIndicesArray(indices);
removeFilter.setInvertSelection(true);
removeFilter.setInputFormat(data);
Instances newData = Filter.useFilter(data, removeFilter);
这假定indices
包含您要保留的属性索引。如果它包含您要删除的属性的索引,则删除对setInvertSelection
方法的调用。