/*********************************************************************** 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; import java.util.Arrays; import org.core.Randomize; import keel.Dataset.Instance; public class windowingGWS extends windowing{ Instance[] set; Instance[][] instancesOfClass; Instance[] sample; int sampleSize; double[] classQuota; int[] classSizes; int howMuch; int numStrata; int numClasses; int stratum; int currentIteration; public boolean needReEval() { return true; } public int numVersions() { return numStrata; } public int getCurrentVersion() { return stratum; } public void setInstances(Instance[] pSet, int pHowMuch){ int i; set=pSet; howMuch=pHowMuch; int[] numInstC = computeNumInstC(); numClasses = Parameters.numClasses; numStrata = Parameters.numStrataWindowing; instancesOfClass= new Instance [numClasses][]; classSizes = new int[numClasses]; classQuota = new double[numClasses]; int capacity=0; for(i=0;i<numClasses;i++) { int num = numInstC[i]; instancesOfClass[i] = new Instance[num]; classSizes[i]=0; classQuota[i]=(double)num/(double)numStrata; capacity+=(int)Math.ceil(classQuota[i]); } sample = new Instance[capacity]; for(i=0;i<howMuch;i++) { int cls=set[i].getOutputNominalValuesInt(0); System.out.println("caca de vaca = " + classSizes[cls]); instancesOfClass[cls][classSizes[cls]++]=set[i]; } currentIteration=0; } public Object[] newIteration(){ int i,j; stratum=currentIteration%numStrata; currentIteration++; sampleSize=0; for(i=0;i<numClasses;i++) { int fixQ=(int)classQuota[i]; for(j=0;j<fixQ;j++) { int pos=Randomize.Randint(0,classSizes[i]); sample[sampleSize++]=instancesOfClass[i][pos]; } double prob=classQuota[i]-fixQ; if(Randomize.Rand()<prob) { int pos=Randomize.Randint(0,classSizes[i]); sample[sampleSize++]=instancesOfClass[i][pos]; } } Object[] res = new Object[2]; res[0] = (Integer) sampleSize; res[1] = (Instance[]) sample; return res; } public int[] computeNumInstC(){ int[] countClass = new int[Parameters.numClasses]; Arrays.fill(countClass, 0); for(int i = 0 ; i < howMuch ; ++i) countClass[set[i].getOutputNominalValuesInt(0)]++; return countClass; } }