package keel.Algorithms.RE_SL_Methods.mogulIRL; /** * <p>Title: </p> * * <p>Description: </p> * * <p>Copyright: Copyright (c) 2007</p> * * <p>Company: </p> * * @author not attributable * @version 1.0 */ import java.io.*; import org.core.*; import keel.Dataset.*; import java.util.*; public class MiDataset{ public TTABLA [] datos; public int n_variables, n_var_estado, n_var_control, long_tabla; public int no_cubiertos; public TipoIntervalo [] extremos; public String fichero; public InstanceSet IS; public boolean noOutputs; public boolean salir; /** Stores in memory the contents of the data file "f" */ public MiDataset(String f, boolean train) { fichero = f; IS = new InstanceSet(); try { processModelDataset(f, train); } catch (Exception e) { System.out.println("DBG: Exception in readSet"); e.printStackTrace(); } } public void processModelDataset(String nfejemplos, boolean train) throws IOException { int i, j, k; try { // Load in memory a dataset that contains a regression problem IS.readSet(nfejemplos,train); // We read the number of instances and variables long_tabla = IS.getNumInstances(); n_var_estado = Attributes.getInputNumAttributes(); n_var_control = Attributes.getOutputNumAttributes(); no_cubiertos = long_tabla; // Check that there is only one output variable and // it is nominal if (n_var_control>1) { System.out.println("This algorithm can not process MIMO datasets"); System.out.println("All outputs but the first one will be removed"); } boolean noOutputs=false; if (n_var_control<1) { System.out.println("This algorithm can not process datasets without outputs"); System.out.println("Zero-valued output generated"); noOutputs=true; } n_var_control = 1; n_variables = n_var_estado + n_var_control; // Initialice and fill our own tables datos = new TTABLA[long_tabla]; // Maximum and minimum of inputs/output data extremos = new TipoIntervalo[n_variables]; for (i=0; i<n_variables; i++) extremos[i] = new TipoIntervalo(); /*check if there aren't continous attributes*/ if(Attributes.hasNominalAttributes()) { System.err.println("Mam-IRLSC can only handle real attributes." ); salir = true; } else { salir = false; // All values are casted into double/integer for (i=0, k=0; i<long_tabla; i++) { Instance inst = IS.getInstance(i); if (inst.existsAnyMissingValue()==true) { System.out.println ("This algorithm can not process missing values"); System.out.println ("This algorithm don't use the instance " + (i+1) + ". You have to apply before a preprocess method"); } else { datos[k] = new TTABLA(n_variables); for (j=0; j<n_var_estado; j++) { datos[k].ejemplo[j] = IS.getInputNumericValue(i,j); if (datos[k].ejemplo[j]>extremos[j].max || k==0) extremos[j].max = datos[k].ejemplo[j]; if (datos[k].ejemplo[j]<extremos[j].min || k==0) extremos[j].min = datos[k].ejemplo[j]; } if (noOutputs) datos[k].ejemplo[j] = 0; else datos[k].ejemplo[j] = IS.getOutputNumericValue(i,0); if (datos[k].ejemplo[j] > extremos[j].max || k==0) extremos[j].max = datos[k].ejemplo[j]; if (datos[k].ejemplo[j] < extremos[j].min || k==0) extremos[j].min = datos[k].ejemplo[j]; k++; } } long_tabla = k; } } catch (Exception e) { System.out.println("DBG: Exception in readSet"); e.printStackTrace(); } } /** It returns the header */ public String getCabecera () { return (IS.getHeader()); } public void nuevaTabla(){ // Initialice and fill our own tables datos = new TTABLA[long_tabla]; // All values are casted into double/integer for (int i=0, k=0, j = 0; i<long_tabla; i++) { Instance inst = IS.getInstance(i); datos[k] = new TTABLA(n_variables); for (j=0; j<n_var_estado; j++) { datos[k].ejemplo[j] = IS.getInputNumericValue(i,j); if (datos[k].ejemplo[j]>extremos[j].max || k==0) extremos[j].max = datos[k].ejemplo[j]; if (datos[k].ejemplo[j]<extremos[j].min || k==0) extremos[j].min = datos[k].ejemplo[j]; } if (noOutputs) datos[k].ejemplo[j] = 0; else datos[k].ejemplo[j] = IS.getOutputNumericValue(i,0); if (datos[k].ejemplo[j]>extremos[j].max) extremos[j].max = datos[k].ejemplo[j]; if (datos[k].ejemplo[j]<extremos[j].min) extremos[j].min = datos[k].ejemplo[j]; k++; } } }