package com.yahoo.labs.samoa.evaluation;

/*
 * #%L
 * SAMOA
 * %%
 * Copyright (C) 2013 Yahoo! Inc.
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */

import com.yahoo.labs.samoa.moa.MOAObject;
import com.yahoo.labs.samoa.moa.core.Measurement;

import com.yahoo.labs.samoa.instances.Instance;

/**
 * Interface implemented by learner evaluators to monitor the results of the
 * learning process.
 * 
 * @author Richard Kirkby (rkirkby@cs.waikato.ac.nz)
 * @version $Revision: 7 $
 */
public interface PerformanceEvaluator extends MOAObject {

  /**
   * Resets this evaluator. It must be similar to starting a new evaluator from
   * scratch.
   * 
   */
  public void reset();

  /**
   * Adds a learning result to this evaluator.
   * 
   * @param inst
   *          the instance to be classified
   * @param classVotes
   *          an array containing the estimated membership probabilities of the
   *          test instance in each class
   * @return an array of measurements monitored in this evaluator
   */
  public void addResult(Instance inst, double[] classVotes);

  /**
   * Gets the current measurements monitored by this evaluator.
   * 
   * @return an array of measurements monitored by this evaluator
   */
  public Measurement[] getPerformanceMeasurements();
}
