Пример #1
0
 public boolean actualizaCentros(int indice, Muestra m) {
   boolean converge = false;
   float[] aux;
   int claseAux;
   float[] nuevoCentro = new float[this.atributos];
   float[] antCentro = vectorCentros.elementAt(indice).getContent();
   for (int i = 0; i < atributos; i++) {
     double r = Math.abs(m.getContent()[i] - antCentro[i]);
     r = r * razon;
     nuevoCentro[i] = antCentro[i] + (float) r;
   }
   claseAux = vectorCentros.elementAt(indice).getClase();
   aux = cPrev[claseAux];
   // Convergencia
   for (int i = 0; i < atributos && !converge; i++) {
     double abs = Math.abs(antCentro[i] - nuevoCentro[i]);
     converge = (abs < epsilon);
   }
   cPrev[vectorCentros.elementAt(indice).getClase()] = nuevoCentro;
   Muestra m2 = new Muestra(nuevoCentro);
   m2.setClase(vectorCentros.elementAt(indice).getClase());
   vectorCentros.remove(indice);
   vectorCentros.add(indice, m2);
   return converge;
 }
Пример #2
0
 private void ejecuta() {
   boolean termina = true;
   while (termina) {
     for (Iterator iter = vectorMuestras.iterator(); iter.hasNext(); ) {
       Muestra muestra = (Muestra) iter.next();
       int jMin = 0;
       double distanciaMin = java.lang.Integer.MAX_VALUE;
       for (int i = 0; i < this.clases; i++) {
         double distancia = distance(muestra, vectorCentros.elementAt(i));
         if (distancia < distanciaMin) {
           distanciaMin = distancia;
           jMin = i;
         }
       }
       muestra.setClase(jMin);
       termina = termina && !actualizaCentros(jMin, muestra);
     }
   }
 }
Пример #3
0
 /**
  * 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;
 }
Пример #4
0
 public static double distance(Muestra m1, Muestra m2) {
   return distance(m1.getContent(), m2.getContent());
 }