package edu.cmu.minorthird.classify; import edu.cmu.minorthird.classify.relational.*; import java.util.*; /** * Implements the teacher's side of the learner-teacher protocol for SGM. * * @author Zhenzhen Kou * */ public abstract class StackedClassifierTeacher extends ClassifierTeacher{ /** Train a StackedGraphicalLearner and return the learned Classifier, using * some unspecified source of information to get labels. */ final public Classifier trainStacked(StackedBatchClassifierLearner learner){ // initialize the learner for a new problem learner.reset(); // tell learner the schema of examples learner.setSchema(schema()); // I am commenting out the two lines below because they don't do anything - frank // learner.RelDataset.setAggregators(this.getAggregators()); // learner.RelDataset.setLinksMap(this.getLinksMap()); // provide unlabeled examples to the learner, for unsupervised // training, semi-supervised training, or active learner learner.setInstancePool(instancePool()); // passive learning from already-available labeled data for(Iterator<Example> i=examplePool();i.hasNext();){ learner.addExample(i.next()); } // active learning while(learner.hasNextQuery()&&hasAnswers()){ Instance query=learner.nextQuery(); Example answeredQuery=labelInstance(query); if(answeredQuery!=null){ learner.addExample(answeredQuery); } } // signal that there's no more data available learner.completeTraining(); // final result return learner.getClassifier(); } /** The linkMaps for stacked graphical learning */ abstract protected Map<String,Map<String,Set<String>>> getLinksMap(); /** The Aggregators for stacked graphical learning */ abstract protected Map<String,Set<String>> getAggregators(); }