package edu.cmu.minorthird.classify; import java.util.Iterator; /** * Abstract ClassifierLearner which instantiates the teacher-learner protocol * so as to implement a standard batch learner. * * @author William Cohen */ public abstract class BatchClassifierLearner implements ClassifierLearner { public Dataset dataset = new BasicDataset(); /** This variable saves the last classifier produced by batchTrain. * If it is non-null, then it will be returned by class to * getClassifier(). Implementations of batchTrain should save the * returned classifier to avoid extra work. */ protected Classifier classifier = null; @Override public ClassifierLearner copy() { BatchClassifierLearner bcl = null;//(ClassifierLearner)(new Object()); try { bcl =(BatchClassifierLearner)(this.clone()); //bcl = this; bcl.dataset = new BasicDataset(); bcl.classifier = null; } catch (Exception e) { System.out.println("Can't CLONE!!"); e.printStackTrace(); } return bcl; } @Override final public void reset() { dataset = new BasicDataset(); classifier = null; } @Override final public void setInstancePool(Iterator<Instance> i) { ; } @Override final public boolean hasNextQuery() { return false; } @Override final public Instance nextQuery() { return null; } @Override final public void addExample(Example answeredQuery) { dataset.add(answeredQuery); classifier=null; } @Override final public void completeTraining() { classifier = batchTrain(dataset); } @Override final public Classifier getClassifier() { if (classifier==null) classifier = batchTrain(dataset); return classifier; } /** subclasses should use this method to implement a batch supervised learning algorithm. */ abstract public Classifier batchTrain(Dataset dataset); }