package chap4.java.science.data; import java.util.Random; import weka.attributeSelection.AttributeSelection; import weka.attributeSelection.BestFirst; import weka.attributeSelection.CfsSubsetEval; import weka.classifiers.Evaluation; import weka.classifiers.bayes.NaiveBayes; import weka.classifiers.meta.AttributeSelectedClassifier; import weka.core.Instances; import weka.core.Utils; import weka.core.converters.ConverterUtils.DataSource; import weka.filters.Filter; public class WekaFeatureSelectionTest { Instances iris = null; NaiveBayes nb; public void loadArff(String arffInput){ DataSource source = null; try { source = new DataSource(arffInput); iris = source.getDataSet(); iris.setClassIndex(iris.numAttributes() - 1); } catch (Exception e1) { } } public void selectFeatures(){ AttributeSelection attSelection = new AttributeSelection(); CfsSubsetEval eval = new CfsSubsetEval(); BestFirst search = new BestFirst(); attSelection.setEvaluator(eval); attSelection.setSearch(search); try { attSelection.SelectAttributes(iris); int[] attIndex = attSelection.selectedAttributes(); System.out.println(Utils.arrayToString(attIndex)); } catch (Exception e) { } } public void selectFeaturesWithFilter(){ weka.filters.supervised.attribute.AttributeSelection filter = new weka.filters.supervised.attribute.AttributeSelection(); CfsSubsetEval eval = new CfsSubsetEval(); BestFirst search = new BestFirst(); filter.setEvaluator(eval); filter.setSearch(search); try { filter.setInputFormat(iris); Instances newData = Filter.useFilter(iris, filter); System.out.println(newData); } catch (Exception e) { } } public void selectFeaturesWithClassifiers(){ AttributeSelectedClassifier classifier = new AttributeSelectedClassifier(); CfsSubsetEval eval = new CfsSubsetEval(); BestFirst search = new BestFirst(); nb = new NaiveBayes(); classifier.setClassifier(nb); classifier.setEvaluator(eval); classifier.setSearch(search); Evaluation evaluation; try { evaluation = new Evaluation(iris); evaluation.crossValidateModel(classifier, iris, 10, new Random(1)); System.out.println(evaluation.toSummaryString()); } catch (Exception e) { } } public static void main(String[] args){ WekaFeatureSelectionTest test = new WekaFeatureSelectionTest(); test.loadArff("C:/Program Files/Weka-3-6/data/iris.arff"); test.selectFeatures(); test.selectFeaturesWithFilter(); test.selectFeaturesWithClassifiers(); } }