/*********************************************************************** This file is part of KEEL-software, the Data Mining tool for regression, classification, clustering, pattern mining and so on. Copyright (C) 2004-2010 F. Herrera (herrera@decsai.ugr.es) L. S�nchez (luciano@uniovi.es) J. Alcal�-Fdez (jalcala@decsai.ugr.es) S. Garc�a (sglopez@ujaen.es) A. Fern�ndez (alberto.fernandez@ujaen.es) J. Luengo (julianlm@decsai.ugr.es) 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 3 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, see http://www.gnu.org/licenses/ **********************************************************************/ package keel.Algorithms.Genetic_Rule_Learning.BioHEL; public class agentPerformance { int numClassifiers; int numClasses; double numInstancesOK; double numInstancesKO; double numInstancesNC; double numInstancesTotal; int[][] statisticsForEachClass; int[][] statisticsConfusionMatrix; int[] classifierActivated; int[] classifierCorrect; int[] classifierWrong; int aliveClassifiers; public double getAccuracy() { return numInstancesOK/numInstancesTotal; } public double getError(){return numInstancesKO/numInstancesTotal;} public double getNC(){return numInstancesNC/numInstancesTotal;} public int getNumError(){return (int)numInstancesKO;} public int getNumNC(){return (int)numInstancesNC;} public int getActivationsOfClassifier(int classifier) { return classifierActivated[classifier]; } int getCorrectPredictionsOfClassifier(int classifier) { return classifierCorrect[classifier]; } double getAccOfClassifier(int classifier) { return (double)classifierCorrect[classifier]/(double)classifierActivated[classifier]; } public int getAliveClassifiers(){return aliveClassifiers;} void disableClassifier(int classifier) { classifierActivated[classifier]=0; } double getLSacc(int classifier) { if(classifierActivated[classifier]==0) return 0; double acc=getAccOfClassifier(classifier); double laplaceAcc=(classifierCorrect[classifier]+1.0) /(classifierActivated[classifier]+numClasses); return (acc<laplaceAcc?acc:laplaceAcc); } int isClassifierWrong(int classifier) { return classifierWrong[classifier]; } public agentPerformance(int pNumClassifiers, int pNumClasses){ numClasses = pNumClasses; numClassifiers = pNumClassifiers; numInstancesOK = 0; numInstancesKO = 0; numInstancesNC = 0; numInstancesTotal = 0; aliveClassifiers = 0; int i, j; statisticsForEachClass = new int [numClasses][]; statisticsConfusionMatrix = new int [numClasses][]; for (i = 0; i < numClasses; i++) { statisticsConfusionMatrix[i] = new int[numClasses]; statisticsForEachClass[i] = new int[3]; } classifierActivated = new int[numClassifiers]; classifierCorrect = new int[numClassifiers]; classifierWrong = new int[numClassifiers]; for (i = 0; i < numClassifiers; i++) { classifierActivated[i] = 0; classifierCorrect[i] = 0; classifierWrong[i] = 0; } for (i = 0; i < numClasses; i++) { for (j = 0; j < numClasses; j++) statisticsConfusionMatrix[i][j] = 0; for (j = 0; j < 3; j++) statisticsForEachClass[i][j] = 0; } } public void addPrediction(int realClass,int predictedClass,int usedClassifier){ numInstancesTotal++; if(usedClassifier!=-1) { if(classifierActivated[usedClassifier] == 0) { aliveClassifiers++; } classifierActivated[usedClassifier]++; statisticsConfusionMatrix[realClass][predictedClass]++; if (predictedClass == realClass) { numInstancesOK++; statisticsForEachClass[realClass][0]++; classifierCorrect[usedClassifier]++; } else { classifierWrong[usedClassifier]++; numInstancesKO++; statisticsForEachClass[realClass][1]++; } } else { numInstancesNC++; statisticsForEachClass[realClass][2]++; } } public double getAverageActivation(){ double actDR=0; if(Parameters.defaultClassOption!=Parameters.DISABLED) actDR=classifierActivated[numClassifiers-1]; return (numInstancesTotal-numInstancesNC-actDR)/numInstancesTotal; } }