示例#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);
     }
   }
 }