/* Copyright 2003, Carnegie Mellon, All Rights Reserved */ package edu.cmu.minorthird.classify; import java.util.Iterator; import edu.cmu.minorthird.classify.algorithms.linear.VotedPerceptron; import edu.cmu.minorthird.util.ProgressCounter; /** * Batch version of an OnlineClassifierLearner. * * @author William Cohen */ public class BatchVersion extends BatchClassifierLearner { private OnlineClassifierLearner innerLearner; private int numberOfEpochs = 1; //private List<Example> exampleList = new ArrayList<Example>(); public BatchVersion(OnlineClassifierLearner innerLearner,int numberOfEpochs) { this.innerLearner = innerLearner; this.numberOfEpochs = numberOfEpochs; } public BatchVersion(OnlineClassifierLearner innerLearner) { this(innerLearner,1); } public BatchVersion() { this(new VotedPerceptron(),5); } public int getNumberOfEpochs() { return numberOfEpochs; } public void setNumberOfEpochs(int n) { numberOfEpochs=n; } public OnlineClassifierLearner getInnerLearner() { return innerLearner; } public void setInnerLearner(OnlineClassifierLearner learner) { this.innerLearner=learner; } @Override final public void setSchema(ExampleSchema schema) { innerLearner.setSchema(schema); } @Override final public ExampleSchema getSchema(){return innerLearner.getSchema();} @Override public Classifier batchTrain(Dataset dataset) { Dataset copy = dataset.shallowCopy(); copy.shuffle(); innerLearner.reset(); ProgressCounter pc1 = new ProgressCounter("training "+innerLearner.getClass(), "epoch", numberOfEpochs); for (int i=0; i<numberOfEpochs; i++) { ProgressCounter pc2 = new ProgressCounter("training "+innerLearner.getClass(), "example", copy.size()); for (Iterator<Example> j=copy.iterator(); j.hasNext(); ) { innerLearner.addExample( j.next() ); pc2.progress(); } pc2.finished(); pc1.progress(); } pc1.finished(); innerLearner.completeTraining(); classifier = innerLearner.getClassifier(); return classifier; } }