📄 simplecriterion.java
字号:
/*
* YALE - Yet Another Learning Environment
* Copyright (C) 2001-2004
* Simon Fischer, Ralf Klinkenberg, Ingo Mierswa,
* Katharina Morik, Oliver Ritthoff
* Artificial Intelligence Unit
* Computer Science Department
* University of Dortmund
* 44221 Dortmund, Germany
* email: yale-team@lists.sourceforge.net
* web: http://yale.cs.uni-dortmund.de/
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA.
*/
package edu.udo.cs.yale.operator.performance;
import edu.udo.cs.yale.tools.math.Averagable;
import edu.udo.cs.yale.example.Example;
import edu.udo.cs.yale.example.ExampleSet;
import edu.udo.cs.yale.operator.OperatorException;
/** Simple criteria are those which error can be counted for each example and can be
* averaged by the number of examples.
* The fitness has a reciprocal value of the error.
*
* @author Ingo, Simon
* @version $Id: SimpleCriterion.java,v 2.11 2004/08/27 11:57:43 ingomierswa Exp $
*/
public abstract class SimpleCriterion extends MeasuredPerformance {
private double sum = 0.0;
private double squaresSum = 0.0;
private int exampleCount = 0;
/** Invokes <code>countExample(double, double)</code> and uses 0 as predicted label if it not a number (NaN). */
public void countExample(Example example) {
double plabel = example.getPredictedLabel();
if (Double.isNaN(plabel)) plabel = 0;
double deviation = countExample(example.getLabel(), plabel);
if (!Double.isNaN(deviation)) {
countExample(deviation);
}
}
/** Subclasses must count the example and return the value to sum up. */
protected abstract double countExample(double label, double predictedLabel);
protected void countExample(double deviation) {
if (!Double.isNaN(deviation)) {
sum += deviation;
squaresSum += deviation*deviation;
exampleCount++;
}
}
public double getValue() {
return sum / exampleCount;
}
public double getVariance() {
double mean = getValue();
double meanSquares = squaresSum / exampleCount;
return meanSquares - mean*mean;
}
public void startCounting(ExampleSet eset) throws OperatorException {
super.startCounting(eset);
exampleCount = 0;
sum = squaresSum = 0;
}
public double getFitness() {
if (getValue() == 0.0) return Double.POSITIVE_INFINITY;
return 1/getValue();
}
protected void cloneAveragable(Averagable newAvg) {
//super.cloneAveragable(newAvg);
SimpleCriterion sc = (SimpleCriterion)newAvg;
this.sum = sc.sum;
this.squaresSum = sc.squaresSum;
this.exampleCount = sc.exampleCount;
}
public void buildAverage(Averagable performance) {
super.buildAverage(performance);
SimpleCriterion other = (SimpleCriterion)performance;
this.sum += other.sum;
this.squaresSum += other.squaresSum;
this.exampleCount += other.exampleCount;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -