def featureSelection(self): alg_search = ASSearch( classname="weka.attributeSelection.GeneticSearch", options=["-Z", "1024", "-G", "20", "-C", "0.6", "-M", "0.3"]) alg_evaluation = ASEvaluation( classname="weka.attributeSelection.CfsSubsetEval", options=["-P", "1", "-E", "1"]) feature_selection = AttributeSelection() feature_selection.search(alg_search) feature_selection.evaluator(alg_evaluation) feature_selection.select_attributes(self.original_data) self.selected_features = feature_selection.selected_attributes self.num_features = feature_selection.number_attributes_selected self.data_selected = feature_selection.reduce_dimensionality( self.original_data)
cls = Classifier(classname=classifier) evl = Evaluation(data) evl.crossvalidate_model(cls, data, 10, Random(1)) print("%s: %0.0f%%" % (classifier, evl.percent_correct())) # wrapper for classifier in classifiers: aseval = ASEvaluation(classname="weka.attributeSelection.WrapperSubsetEval", options=["-B", classifier]) assearch = ASSearch(classname="weka.attributeSelection.BestFirst", options=[]) attsel = AttributeSelection() attsel.set_evaluator(aseval) attsel.set_search(assearch) attsel.select_attributes(data) reduced = attsel.reduce_dimensionality(data) cls = Classifier(classname=classifier) evl = Evaluation(reduced) evl.crossvalidate_model(cls, reduced, 10, Random(1)) print("%s (reduced): %0.0f%%" % (classifier, evl.percent_correct())) # meta-classifier for wrappercls in classifiers: for basecls in classifiers: meta = SingleClassifierEnhancer(classname="weka.classifiers.meta.AttributeSelectedClassifier") meta.set_options( ["-E", "weka.attributeSelection.WrapperSubsetEval -B " + wrappercls, "-S", "weka.attributeSelection.BestFirst", "-W", basecls]) evl = Evaluation(data)
evl = Evaluation(data) evl.crossvalidate_model(cls, data, 10, Random(1)) print("%s: %0.0f%%" % (classifier, evl.percent_correct)) # wrapper for classifier in classifiers: aseval = ASEvaluation( classname="weka.attributeSelection.WrapperSubsetEval", options=["-B", classifier]) assearch = ASSearch(classname="weka.attributeSelection.BestFirst", options=[]) attsel = AttributeSelection() attsel.evaluator(aseval) attsel.search(assearch) attsel.select_attributes(data) reduced = attsel.reduce_dimensionality(data) cls = Classifier(classname=classifier) evl = Evaluation(reduced) evl.crossvalidate_model(cls, reduced, 10, Random(1)) print("%s (reduced): %0.0f%%" % (classifier, evl.percent_correct)) # meta-classifier for wrappercls in classifiers: for basecls in classifiers: meta = SingleClassifierEnhancer( classname="weka.classifiers.meta.AttributeSelectedClassifier") meta.options = \ ["-E", "weka.attributeSelection.WrapperSubsetEval -B " + wrappercls, "-S", "weka.attributeSelection.BestFirst", "-W", basecls]