--- Algorithm to optimize clusters --- Step 1: Get new centers // Get new center values for(int j=0; j < kMeans; j++) listOfCenters.add(makeCenter(j)); private DataPoint makeCenter(int j){ DataPoint center = new DataPoint("Center"); String currentKey = ""; double scaledSum = 0; double tempHolder = 0; double currentScalar = 0; /* We're going to work the bottom of the fomula first *sum the weights and scale them */ for(int i=0; i < degrees.size(); i++){ tempHolder = Math.pow(degrees.get(i).get(j), scalar); scaledSum += tempHolder; } // end for /* OK - now that we have the "bottom" of the formula we can figure out the top * Apply the weight to each key in the data point */ while(e.hasMoreElements()){ // Get the current key currentKey = e.nextElement().toString(); // Get the value for this key tempHolder = Double.parseDouble(pointList.get(i).getData().get(currentKey).toString()); tempHolder = tempHolder * currentScalar; tempHolder = tempHolder / scaledSum; // Now put that into the hash table for center if(center.getData().containsKey(currentKey)){ // If there is something there - get it back! tempHolder += Double.parseDouble(center.getData().get(currentKey).toString()); center.getData().remove(currentKey); center.getData().put(currentKey, tempHolder); } // end if else center.getData().put(currentKey, tempHolder); } // end while } // end for // We're done return center; } // end makeCenter