Exemplo n.º 1
0
 def kmeans_centroids(self, clusters):
     '''Calculate centroids based on clusters by doing a mean between
     all states within the same cluster.
     '''
     Helper.verbose_print('Centroids: ' + str(self.get_centroids_count(clusters)))
     new_centroids = [0 for _ in range(self.k)]
     for i in range(self.k):
         state_sum = tuple([(0,0) for _ in range(self.coord_nr)])
         nr = 0.0
         for state,cluster in clusters.iteritems():
             if cluster == i:
                 nr += 1
                 state_sum = self.add_states(state_sum, state)
         # At least one representat for a cluster should exist.
         if nr > 0:
             # Now divide by the number of members in a cluster every coordinate.
             new_centroids[i] = map(lambda coord: self.__divide_coord(coord, nr),
                                    state_sum)
         # Treat the case of finding no member in cluster by making it be
         # infinity everywhere.
         else:
             new_centroids[i] = map(lambda coord: tuple([Preprocess.INFINITY
                                                         for c in coord]),
                                    state_sum)
     return new_centroids