/** Returns True if the rule is perfect for the data set. */ public boolean perfectRule(Complejo regla, Dataset train) { ConjDatos datosTrain; datosTrain = new ConjDatos(); datosTrain = creaConjunto(train); boolean perfecta = false; /*Muestra m = datosTrain.getDato(3);//la primera instancia basicamente System.out.println(m.getClase());*/ Muestra m; ConjDatos cubiertas; cubiertas = new ConjDatos(); /*todas las instancias que cubra la regla las metemos en un conjunto*/ for (int i = 0; i < train.getndatos(); i++) { m = datosTrain.getDato(i); if (regla.cubre(m)) { cubiertas.addDato(m); } } /*perfecta sera true si todos los ejemplos del conjunto 'cubiertas' tienen la misma clase que predice la regla*/ for (int i = 0; i < cubiertas.size(); i++) { if (cubiertas.getDato(i).getClase() != regla.getClase()) { perfecta = false; return perfecta; } else perfecta = true; } return perfecta; }
/** * Creates a set of data(attribute/class) * * @param mis_datos Must be a set of data readen from the file (see doc Dataset.java) * @return The set of data created, a list of examples (see ConjDatos.java and Muestra.java) */ private ConjDatos creaConjunto(Dataset mis_datos) { ConjDatos datos = new ConjDatos(); // Creo un nuevo conjunto de datos int tam = mis_datos .getnentradas(); // Pillo el nmero de atributos de entrada (suponemos una sola salida // [clase]) double[] vars = new double [tam]; // Creamos el vector que guardar�los valores de los atributos (aun siendo // enteros o enum) double[][] X; int[] C; int clase = 0; // Variable que contendr�el valor para la clase X = mis_datos.getX(); C = mis_datos.getC(); for (int i = 0; i < mis_datos.getndatos(); i++) { // System.out.print("\n"+i+":"); for (int j = 0; (j < tam); j++) { // System.out.print(" "+X[i][j]); if (mis_datos.isMissing(i, j)) { vars[j] = mis_datos.masComun(j); } else { // CAMBIAR POR OTROS METODOS DE MANEJO DE VALORES PERDIDOS (15-NN). vars[j] = X[i][ j]; // Double.parseDouble(mis_datos.getDatosIndex(i, j)); //pillo el valor del // atributo j para el ejemplo i } } // if (!salir) { clase = C[i]; // Integer.parseInt(mis_datos.getDatosIndex(i, tam)); Muestra m = new Muestra( vars, clase, tam); // Creo un nuevo dato del conjunto con sus variables, su clase y el num // variables m.setPosFile(i); datos.addDato(m); // } } return datos; }