/*********************************************************************** 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/ **********************************************************************/ /** * <p> * @author Written by Jaume Bacardit (La Salle, Ram�n Llull University - Barcelona) 28/03/2004 * @author Modified by Xavi Sol� (La Salle, Ram�n Llull University - Barcelona) 23/12/2008 * @version 1.1 * @since JDK1.2 * </p> */ package keel.Algorithms.Genetic_Rule_Learning.MPLCS; import keel.Dataset.*; import java.util.*; import keel.Algorithms.Genetic_Rule_Learning.MPLCS.Assistant.Globals.*; public class Globals_DefaultC { static int defaultClassPolicy; static int defaultClass; static boolean enabled; static int numClasses; static boolean nichingEnabled; static int numNiches; static ArrayList[] accDefaultRules; public final static int DISABLED = 1; public final static int MINOR = 2; public final static int MAJOR = 3; public final static int AUTO = 4; public static void init(boolean hasDefaultClass) { nichingEnabled = false; if (!hasDefaultClass) { defaultClassPolicy = DISABLED; enabled = false; numClasses = Parameters.numClasses; return; } if (Parameters.defaultClass == null) { defaultClassPolicy = DISABLED; enabled = false; numClasses = Parameters.numClasses; return; } if (Parameters.defaultClass.equalsIgnoreCase("disabled")) { defaultClassPolicy = DISABLED; enabled = false; numClasses = Parameters.numClasses; } else if (Parameters.defaultClass.equalsIgnoreCase("major")) { defaultClassPolicy = MAJOR; //Attributes.getOutputAttribute(0).getMostFrequentValue(0); defaultClass = majorityClass(); numClasses = Parameters.numClasses - 1; enabled = true; } else if (Parameters.defaultClass.equalsIgnoreCase("minor")) { defaultClassPolicy = MINOR; defaultClass = minorityClass(); numClasses = Parameters.numClasses - 1; enabled = true; } else if (Parameters.defaultClass.equalsIgnoreCase("auto")) { defaultClassPolicy = AUTO; numClasses = Parameters.numClasses - 1; enabled = true; nichingEnabled = true; numNiches = Parameters.numClasses; accDefaultRules = new ArrayList[numNiches]; for (int i = 0; i < numNiches; i++) { accDefaultRules[i] = new ArrayList(); } } else { System.err.println("Unknown default class option " + Parameters.defaultClass); System.exit(1); } } static void checkNichingStatus(int iteration, Classifier[] population) { if (nichingEnabled) { int i; int[] counters = new int[numNiches]; double[] nicheFit = new double[numNiches]; for (i = 0; i < numNiches; i++) { counters[i] = 0; nicheFit[i] = 0; } for (i = 0; i < population.length; i++) { int niche = population[i].getNiche(); counters[niche]++; double indAcc = population[i].getAccuracy(); if (indAcc > nicheFit[niche]) { nicheFit[niche] = indAcc; } } if (accDefaultRules[0].size() == 15) { for (i = 0; i < numNiches; i++) { accDefaultRules[i].remove(0); } } for (i = 0; i < numNiches; i++) { accDefaultRules[i].add(new Double(nicheFit[i])); } if (accDefaultRules[0].size() == 15) { ArrayList aves = new ArrayList(); for (i = 0; i < numNiches; i++) { double aveN = Utils.getAverage( accDefaultRules[i]); aves.add(new Double(aveN)); } double dev = Utils.getDeviation(aves); if (dev < 0.005) { LogManager.println("Iteration " + iteration + ",niching disabled"); nichingEnabled = false; } } } } static int majorityClass() { int [] counts = new int[Parameters.numClasses]; Instance [] inst = PopulationWrapper.is.getInstances(); for (int i = 0; i < inst.length; i++){ counts[inst[i].getOutputNominalValuesInt(0)]++; } int maxClass = 0; for (int i = 1; i < Parameters.numClasses; i++){ if (counts[i] > counts[maxClass]){ maxClass = i; } } return maxClass; } static int minorityClass() { int [] counts = new int[Parameters.numClasses]; Instance [] inst = PopulationWrapper.is.getInstances(); for (int i = 0; i < inst.length; i++){ counts[inst[i].getOutputNominalValuesInt(0)]++; } int minClass = 0; for (int i = 1; i < Parameters.numClasses; i++){ if (counts[i] < counts[minClass]){ minClass = i; } } return minClass; } }