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; }
public static double distance(Muestra m1, Muestra m2) { return distance(m1.getContent(), m2.getContent()); }