/** uses the filter */
 protected static void useFilter(Instances data) throws Exception {
   System.out.println("\n2. Filter");
   weka.filters.supervised.attribute.AttributeSelection filter =
       new weka.filters.supervised.attribute.AttributeSelection();
   CfsSubsetEval eval = new CfsSubsetEval();
   GreedyStepwise search = new GreedyStepwise();
   search.setSearchBackwards(true);
   filter.setEvaluator(eval);
   filter.setSearch(search);
   filter.setInputFormat(data);
   Instances newData = Filter.useFilter(data, filter);
   System.out.println(newData);
 }
 /** uses the low level approach */
 protected static void useLowLevel(Instances data) throws Exception {
   System.out.println("\n3. Low-level");
   AttributeSelection attsel = new AttributeSelection();
   CfsSubsetEval eval = new CfsSubsetEval();
   GreedyStepwise search = new GreedyStepwise();
   search.setSearchBackwards(true);
   attsel.setEvaluator(eval);
   attsel.setSearch(search);
   attsel.SelectAttributes(data);
   int[] indices = attsel.selectedAttributes();
   System.out.println(
       "selected attribute indices (starting with 0):\n" + Utils.arrayToString(indices));
 }
 /** uses the meta-classifier */
 protected static void useClassifier(Instances data) throws Exception {
   System.out.println("\n1. Meta-classfier");
   AttributeSelectedClassifier classifier = new AttributeSelectedClassifier();
   CfsSubsetEval eval = new CfsSubsetEval();
   GreedyStepwise search = new GreedyStepwise();
   search.setSearchBackwards(true);
   J48 base = new J48();
   classifier.setClassifier(base);
   classifier.setEvaluator(eval);
   classifier.setSearch(search);
   Evaluation evaluation = new Evaluation(data);
   evaluation.crossValidateModel(classifier, data, 10, new Random(1));
   System.out.println(evaluation.toSummaryString());
 }