/*
* Created on 08-feb-2004
*
*/
/**
* @author Jesus Alcala Fernandez
*/
package keel.Algorithms.RE_SL_Methods.MamWM;
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("MamWM 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());
}
}