package keel.Algorithms.Fuzzy_Rule_Learning.Genetic.ClassifierSLAVE2;
import java.io.*;
import java.util.Random;
import org.core.Randomize;
public class example_set {
/**
* <p>
* It contains the methods for handling the set of examples
* </p>
*/
static final double MISSING = -999999999;
//final double LAMBDA = 0.8;
final double LAMBDA = Parameters.Lambda;
int n_example;
int n_variable;
double[][] data;
boolean[] covered;
double[] gpcovered;
double[] gncovered;
int n_partition;
int[] partition;
example_set (){
n_example = 0;
n_variable = 0;
data = null;
covered = null;
gpcovered = null;
gncovered = null;
n_partition = 0;
partition = null;
}
example_set (int ejemplos, int variables){
if ((ejemplos<=0) || (variables<=0))
System.out.println ("Negative values are not allowed\n");
else{
n_example = ejemplos;
n_variable = variables;
n_partition = 1;
covered = new boolean[n_example];
gpcovered = new double[n_example];
gncovered = new double[n_example];
data = new double[n_example][];
partition = new int[n_example];
for (int i=0; i<n_example; i++){
data[i] = new double[variables];
covered[i] = false;
gpcovered[i] = 0;
gncovered[i] = 0;
partition[i] = 0;
}
}
}
example_set (example_set x){
n_example = x.n_example;
n_variable = x.n_variable;
n_partition = x.n_partition;
covered = new boolean[n_example];
gpcovered = new double[n_example];
gncovered = new double[n_example];
data = new double[n_example][];
partition = new int[n_example];
for (int i=0; i<n_example; i++){
data[i] = new double[n_variable];
covered[i] = x.covered[i];
gpcovered[i] = x.gpcovered[i];
gncovered[i] = x.gncovered[i];
partition[i] = x.partition[i];
}
for (int i=0; i<n_example; i++){
for (int j=0; j<n_variable; j++)
data[i][j] = x.data[i][j];
}
}
example_set (char[] nom_fich) throws IOException{
FileInputStream fich;
try {
fich = new FileInputStream(String.valueOf(nom_fich));
} catch(FileNotFoundException e) {
System.out.println("El fichero no existe.");
return;
}
n_example = (int) fich.read();
n_variable = (int) fich.read();
n_partition = 1;
partition = new int[n_example];
data = new double[n_example][];
covered = new boolean[n_example];
gpcovered = new double[n_example];
gncovered = new double[n_example];
for (int i=0; i<n_example; i++){
data[i] = new double[n_variable];
covered[i] = false;
gpcovered[i] = 0;
gncovered[i] = 0;
partition[i] = 0;
}
for (int i=0; i<n_example; i++){
for (int j=0; j<n_variable; j++)
data[i][j] = (double) fich.read();
}
}
example_set (myDataset dataset){
this.n_example = dataset.getnData();
this.n_variable = dataset.getnVars();
this.n_partition = 1;
this.partition = new int[this.n_example];
this.data = new double[this.n_example][];
this.covered = new boolean[this.n_example];
this.gpcovered = new double[n_example];
this.gncovered = new double[n_example];
for (int i = 0; i < this.n_example; i++) {
this.data[i] = new double[this.n_variable];
this.covered[i] = false;
this.partition[i] = 0;
this.gpcovered[i] = 0;
this.gncovered[i] = 0;
}
double[] aux = new double[this.n_variable];
for (int i = 0; i < this.n_example; i++) {
aux = dataset.getExample(i);
for (int j = 0; j < this.n_variable - 1; j++) {
this.data[i][j] = aux[j];
}
this.data[i][(this.n_variable - 1)] = dataset.getOutputAsInteger(i);
}
}
private void Realloc (int new_examples){
int final_n_examples = n_example + new_examples;
int[] aux_partition = new int[final_n_examples];
double[][] aux_data = new double[final_n_examples][];
boolean[] aux_covered = new boolean[final_n_examples];
double[] aux_gpcovered = new double[final_n_examples];
double[] aux_gncovered = new double[final_n_examples];
for (int i=0; i<n_example; i++){
aux_data[i] = data[i];
aux_covered[i] = covered[i];
aux_gpcovered[i] = gpcovered[i];
aux_gncovered[i] = gncovered[i];
aux_partition[i] = partition[i];
}
partition = aux_partition;
data = aux_data;
covered = aux_covered;
gpcovered = aux_gpcovered;
gncovered = aux_gncovered;
n_example = final_n_examples;
}
// - oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
// - oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
public double Data (int ejemplo, int variable){
return (data[ejemplo][variable]);
}
public vectordouble Data (int ejemplo){
vectordouble x = new vectordouble ();
x.Put (data[ejemplo], n_variable);
return x;
}
public int N_Examples (){
return n_example;
}
public int N_Partitions (){
return n_partition;
}
public boolean Is_Training_Example (int ejemplo, int particion){
return (partition[ejemplo]!=particion);
}
public boolean Is_Test_Example (int ejemplo, int particion){
return (partition[ejemplo]==particion);
}
public int Training_Example (int particion){
int sum = 0;
for (int i=0; i<n_example; i++){
if (partition[i]!=particion)
sum++;
}
return sum;
}
public int Test_Example (int particion){
int sum = 0;
for (int i=0; i<n_example; i++){
if (partition[i]==particion)
sum++;
}
return sum;
}
public int Not_Covered_Training_Example (int particion){
int sum = 0;
for (int i=0; i<n_example; i++){
if ((partition[i]!=particion) && (!covered[i]))
sum++;
}
return sum;
}
/**
* <p>
* It counts the number of not covered examples
* </p>
* @return int The number of not covered examples
*/
public int Not_Covered_Examples (){
int numero = 0;
for (int i=0; i<n_example; i++){
if (gpcovered[i]==0 || gpcovered[i]<gncovered[i])
numero++;
}
return numero;
}
/**
* <p>
* For each class, it counts the number of examples
* </p>
* @param VarClass int The class variable
* @param particion int The partition used
* @param nclasses int The total number of classes
* @param n_examples_in_class int[] Vector containing the number of examples per class
*/
public void Examples_per_Class (int VarClass, int particion, int nclasses, int[] n_examples_in_class){
int k;
for (int i=0; i<nclasses; i++)
n_examples_in_class[i] = 0;
for (int i=0; i<n_example; i++){
if (gpcovered[i]<LAMBDA){
k = (int) (data[i][VarClass]);
n_examples_in_class[k]++;
}
}
}
/**
* <p>
* For each class, it counts the number of examples
* </p>
* @param VarClass int The class variable
* @param nclasses int The total number of classes
* @param n_examples_in_class int[] Vector containing the number of examples per class
*/
public void Examples_per_Class (int VarClass, int nclasses, int[] n_examples_in_class){
int k;
for (int i=0; i<nclasses; i++)
n_examples_in_class[i] = 0;
for (int i=0; i<n_example; i++){
if (gpcovered[i]<LAMBDA){
k = (int) (data[i][VarClass]);
n_examples_in_class[k]++;
}
}
}
public int N_Variables (){
return n_variable;
}
public void Remove (int[] v, int tama){
int n = n_example;
for (int i=0; i<tama; i++){
if (data[v[i]]!=null){
data[v[i]] = null;
n--;
}
}
int j = n;
for (int i=0; i<n; i++){
if (data[i] == null){
while ((j<n_example) && (data[j]==null))
j++;
data[i] = data[j];
data[j] = null;
}
}
n_example = n;
}
public void MarkClase (double[] grado){
for (int i=0; i<n_example; i++){
if (grado[i]>=LAMBDA && grado[i]>=gncovered[i])
covered[i] = true;
if (grado[i]>0 && grado[i]>gpcovered[i])
gpcovered[i] = grado[i];
else{
if (grado[i]<0 && -grado[i]>gncovered[i])
gncovered[i] = -grado[i];
}
}
}
/**
* <p>
* Set all positions (referred to examples) of vector "covered" to false (not covered)
* Set all positions (referred to examples) of vector "gcovered" (degree of coverage) to 0
* </p>
*/
public void UnMarkAll (){
for (int i=0; i<n_example; i++){
covered[i] = false;
gpcovered[i] = 0;
}
}
/**
* <p>
* Returns whether the individual "i" is covered or not
* </p>
* @param i int The individual
*/
public boolean Is_Covered (int i){
return covered[i];
}
public double Grade_Is_Covered (int i){
if (gpcovered[i]>0 && gpcovered[i]>=gncovered[i])
return gpcovered[i];
else
return gncovered[i];
}
public double Grade_Is_Positive_Covered (int i){
return gpcovered[i];
}
double Grade_Is_Negative_Covered (int i){
return gncovered[i];
}
public example_set Extract_Training_Set (int particion){
int sum = 0;
for (int i=0; i<n_example; i++){
if (partition[i]!=particion)
sum++;
}
System.out.println ("examples: "+sum+" variables: "+n_variable+"\n");
example_set E1 = new example_set (sum, n_variable);
int l=0;
for (int i=0; i<n_example; i++){
if (partition[i]!=particion){
for (int j=0; j<n_variable; j++)
E1.data[l][j] = data[i][j];
l++;
}
}
return E1;
}
public example_set Extract_Test_Set (int particion){
int sum = 0;
for (int i=0; i<n_example; i++){
if (partition[i]==particion)
sum++;
}
example_set E1 = new example_set (sum, n_variable);
int l=0;
for (int i=0; i<n_example; i++){
if (partition[i]==particion){
for (int j=0; j<n_variable; j++)
E1.data[l][j] = data[i][j];
l++;
}
}
return E1;
}
}