/* Copyright 2003, Carnegie Mellon, All Rights Reserved */ package edu.cmu.minorthird.classify; import edu.cmu.minorthird.classify.algorithms.knn.*; /** * A wrapper around on OnlineClassifierLearner that counts the number * of mistakes if makes. * * @author William Cohen */ public class MistakeCountingOnlineLearner extends OnlineClassifierLearner { private OnlineClassifierLearner innerLearner; private int numMistakes, numExamples; private boolean reportMistakes; public MistakeCountingOnlineLearner() { //this(new VotedPerceptron(),true); this(new KnnLearner(),true); } public MistakeCountingOnlineLearner(OnlineClassifierLearner innerLearner) { this(innerLearner,true); } public MistakeCountingOnlineLearner(OnlineClassifierLearner innerLearner,boolean reportMistakes) { this.innerLearner = innerLearner; this.reportMistakes = reportMistakes; numMistakes = numExamples = 0; } @Override public ClassifierLearner copy() { return new MistakeCountingOnlineLearner((OnlineClassifierLearner)innerLearner.copy(),reportMistakes); } @Override public void completeTraining() { innerLearner.completeTraining(); if (reportMistakes) { System.out.println(numMistakes+" mistakes in "+numExamples+" examples for "+innerLearner); } } @Override public void addExample(Example answeredQuery) { ClassLabel predicted = innerLearner.getClassifier().classification(answeredQuery.asInstance()); if (!answeredQuery.getLabel().isCorrect(predicted)) numMistakes++; numExamples++; innerLearner.addExample(answeredQuery); } @Override public Classifier getClassifier() { return innerLearner.getClassifier(); } @Override public void setSchema(ExampleSchema schema) { innerLearner.setSchema(schema); } @Override public ExampleSchema getSchema(){ return innerLearner.getSchema(); } @Override public void reset() { innerLearner.reset(); numMistakes = numExamples = 0; } /** Report the number of mistakes made by the inner learner. */ public int getNumberOfMistakes() { return numMistakes; } /** Report the number of examples sent to the inner learner. */ public int getTotalNumberOfExamples() { return numExamples; } @Override public String toString() { return "[MistakeCountingOnlineLearner: "+ numMistakes+"/"+numExamples+" mistakes for "+innerLearner+"]"; } }