"weka.classifiers.bayes.NaiveBayes", "weka.classifiers.lazy.IBk", "weka.classifiers.trees.J48" ] # cross-validate classifiers for classifier in classifiers: # classifier itself cls = Classifier(classname=classifier) evl = Evaluation(data) evl.crossvalidate_model(cls, data, 10, Random(1)) print("%s: %0.0f%%" % (classifier, evl.percent_correct)) # meta with cfssubseteval meta = SingleClassifierEnhancer(classname="weka.classifiers.meta.AttributeSelectedClassifier") meta.options = \ ["-E", "weka.attributeSelection.CfsSubsetEval", "-S", "weka.attributeSelection.BestFirst", "-W", classifier] evl = Evaluation(data) evl.crossvalidate_model(meta, data, 10, Random(1)) print("%s (cfs): %0.0f%%" % (classifier, evl.percent_correct)) # meta with wrapper meta = SingleClassifierEnhancer(classname="weka.classifiers.meta.AttributeSelectedClassifier") meta.options = \ ["-E", "weka.attributeSelection.WrapperSubsetEval -B " + classifier, "-S", "weka.attributeSelection.BestFirst", "-W", classifier] evl = Evaluation(data) evl.crossvalidate_model(meta, data, 10, Random(1)) print("%s (wrapper): %0.0f%%" % (classifier, evl.percent_correct)) jvm.stop()
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] evl = Evaluation(data) evl.crossvalidate_model(meta, data, 10, Random(1)) print("%s/%s: %0.0f%%" % (wrappercls, basecls, evl.percent_correct)) jvm.stop()