【问题标题】:How to remove particular attributes from arff file and produce modified arff?如何从 arff 文件中删除特定属性并生成修改后的 arff?
【发布时间】:2016-09-02 08:01:33
【问题描述】:

(非手动)我有 96 个功能,想从 arff 中删除大约 20 个功能并生成修改后的 arff。使用 weka 进行特征选择现在想要删除那些较少的 imp 特征。任何人都可以为此建议代码

【问题讨论】:

标签: feature-extraction feature-selection arff


【解决方案1】:

这里有更多的简短答案,请查看https://stackoverflow.com/a/43972890/7588668

BufferedReader datafile = new BufferedReader(new FileReader("bbcsport.arff")); 
BufferedReader attrfile = new BufferedReader(new FileReader("attributes.txt"));


Instances data = new Instances(datafile); 
List<Integer> myList = new ArrayList<Integer>();
String line;

while ((line = attrfile.readLine()) != null) {
  for (n = 0; n < data.numAttributes(); n++) {
    if (data.attribute(n).name().equalsIgnoreCase(line)) {
      if(!myList.contains(n)) 
        myList.add(n); 
    } 
  }
}

int[] attrs = myList.stream().mapToInt(i -> i).toArray();
Remove remove = new Remove();
remove.setAttributeIndicesArray(attrs);
remove.setInvertSelection(false);
remove.setInputFormat(data); // init filter

Instances filtered = Filter.useFilter(data, remove);

【讨论】:

    【解决方案2】:

    在这里你去...只是改变源和目标文件路径...

    import java.io.File;
    import weka.core.Instances;
    import weka.core.converters.ArffLoader;
    import weka.core.converters.ArffSaver;
    import weka.filters.Filter;
    import weka.filters.unsupervised.attribute.Remove;
    
    
    public class Convert4 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            try
            {
                ArffLoader loader2= new ArffLoader();
                loader2.setSource(new File("C:/Users/RAHUL/Desktop/stack.arff"));
                Instances data2= loader2.getDataSet();
                //Load Arff
                 String[] options = new String[2];
                 options[0] = "-R";                                    // "range"
                 options[1] = "1";                                     // first attribute
                 Remove remove = new Remove();                         // new instance of filter
                 remove.setOptions(options);                           // set options
                 remove.setInputFormat(data2);                          // inform filter about dataset **AFTER** setting options
                 Instances newData2 = Filter.useFilter(data2, remove);   // apply filter
                 ArffSaver saver = new ArffSaver();
                 saver.setInstances(newData2);
                 saver.setFile(new File("C:/Users/RAHUL/Desktop/stack2.arff"));
                 saver.writeBatch();
    }
    catch (Exception e)
    {}
    }
    }
    

    干杯:)

    【讨论】:

    • 我是新的威克,非常感谢你。我理解输入和输出ARFF。但是,您可以给予一些例如提及范围并删除特定属性,例如15个属性。提前致谢。
    • 您可以使用选项[1] =“1-2”;如果要删除1和2.所以如果要从1-15使用选项[1] =“1-15”; span>
    • 也勾选答案。如果它回答你的问题。欢迎:) span>
    • 我能够从“1-15”中删除属性范围,但在我的ARFF文件中,我要删除不在范围内的属性。例如,从98个属性,我想删除15个属性,它们就像10,15,96,44等 span>
    • @ kumar只看文档。您必须使用逗号分隔索引:weka.sourceforge.io/doc.dev/weka/filters/unsupervised/attribute/… span>
    猜你喜欢
    • 1970-01-01
    • 2019-05-19
    • 2016-08-21
    • 2014-06-13
    • 2015-04-30
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多