/* * RapidMiner * * Copyright (C) 2001-2008 by Rapid-I and the contributors * * Complete list of developers available at our web site: * * http://rapid-i.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.tools; import java.util.HashMap; import java.util.Map; /** * Registers all Weka core operators. * * @author Ingo Mierswa * @version $Id: WekaOperatorFactory.java,v 2.8 2006/03/21 15:35:53 ingomierswa * Exp $ */ public class WekaOperatorFactory implements GenericOperatorFactory { private static final String[] SKIPPED_META_CLASSIFIERS = new String[] { "weka.classifiers.meta.AttributeSelectedClassifier", "weka.classifiers.meta.CVParameterSelection", "weka.classifiers.meta.ClassificationViaRegression", "weka.classifiers.meta.FilteredClassifier", "weka.classifiers.meta.MultiScheme", "weka.classifiers.meta.Vote", "weka.classifiers.meta.Grading", "weka.classifiers.meta.Stacking", "weka.classifiers.meta.StackingC" }; private static final String[] SKIPPED_CLASSIFIERS = new String[] { ".meta.", "weka.classifiers.functions.LibSVM", "MISVM", "UserClassifier", "LMTNode", "PreConstructedLinearModel", "RuleNode", "FTInnerNode", "FTLeavesNode", "FTNode" }; private static final String[] SKIPPED_ASSOCIATORS = new String[] { "FilteredAssociator" }; private static final String[] ENSEMBLE_CLASSIFIERS = new String[] { "weka.classifiers.meta.MultiScheme", "weka.classifiers.meta.Vote", "weka.classifiers.meta.Grading", "weka.classifiers.meta.Stacking", "weka.classifiers.meta.StackingC" }; private static final Map<String,String> DEPRECATED_CLASSIFIER_INFOS = new HashMap<String,String>(); static { DEPRECATED_CLASSIFIER_INFOS.put("weka.classifiers.bayes.NaiveBayesSimple", "Deprecated: please use Y-Naive Bayes instead."); DEPRECATED_CLASSIFIER_INFOS.put("weka.classifiers.bayes.NaiveBayesUpdateable", "Deprecated: please use Y-Naive Bayes instead."); DEPRECATED_CLASSIFIER_INFOS.put("weka.classifiers.bayes.NaiveBayes", "Deprecated: please use Y-Naive Bayes instead."); DEPRECATED_CLASSIFIER_INFOS.put("weka.classifiers.functions.LibSVM", "Deprecated: please use the operator LibSVMLearner instead."); } public void registerOperators(ClassLoader classLoader) { // learning schemes try { WekaTools.registerWekaOperators(classLoader, WekaTools.getWekaClasses(weka.classifiers.Classifier.class, null, SKIPPED_CLASSIFIERS), DEPRECATED_CLASSIFIER_INFOS, "com.rapidminer.operator.learner.weka.GenericWekaLearner", "The weka learner", "Learner.Supervised.Weka.", null); } catch (Throwable e) { LogService.getGlobal().log("Cannot register Weka learners: " + e, LogService.WARNING); } // meta learning schemes try { WekaTools.registerWekaOperators(classLoader, WekaTools.getWekaClasses(weka.classifiers.Classifier.class, new String[] { ".meta." } , SKIPPED_META_CLASSIFIERS), "com.rapidminer.operator.learner.weka.GenericWekaMetaLearner", "The weka meta learner", "Learner.Supervised.Weka.", null); } catch (Throwable e) { LogService.getGlobal().log("Cannot register Weka meta learners: " + e, LogService.WARNING); } // ensemble learning schemes try { WekaTools.registerWekaOperators(classLoader, WekaTools.getWekaClasses(weka.classifiers.Classifier.class, ENSEMBLE_CLASSIFIERS , null), "com.rapidminer.operator.learner.weka.GenericWekaEnsembleLearner", "The weka ensemble learner", "Learner.Supervised.Weka.", null); } catch (Throwable e) { LogService.getGlobal().log("Cannot register Weka ensemble learners: " + e, LogService.WARNING); } // association rule learners try { WekaTools.registerWekaOperators(classLoader, WekaTools.getWekaClasses(weka.associations.Associator.class, null, SKIPPED_ASSOCIATORS), "com.rapidminer.operator.learner.weka.GenericWekaAssociationLearner", "The weka associator", "Learner.Unsupervised.Itemsets.Weka", null); } catch (Throwable e) { LogService.getGlobal().log("Cannot register Weka association rule learners: " + e, LogService.WARNING); } // feature weighting try { WekaTools.registerWekaOperators(classLoader, WekaTools.getWekaClasses(weka.attributeSelection.AttributeEvaluator.class), "com.rapidminer.operator.features.weighting.GenericWekaAttributeWeighting", "The weka attribute evaluator", "Preprocessing.Attributes.Weighting.Weka", null); } catch (Throwable e) { LogService.getGlobal().log("Cannot register Weka feature weighting schemes: " + e, LogService.WARNING); } // clusterers try { WekaTools.registerWekaOperators(classLoader, WekaTools.getWekaClasses(weka.clusterers.Clusterer.class, new String[] { "weka.clusterers.OPTICS", "weka.clusterers.DBScan", "weka.clusterers.MakeDensityBasedClusterer" }, false), "com.rapidminer.operator.learner.clustering.clusterer.GenericWekaClusteringAdaptor", "The weka clusterer", "Learner.Unsupervised.Clustering.Weka", null); } catch (Throwable e) { LogService.getGlobal().log("Cannot register Weka clusterers: " + e, LogService.WARNING); } } }