def reset(self, **kwargs): IterativeAlgorithm.reset(self) # memberships = [self.normalize([random() for j in range(self.n_clusters)]) for i in range(len(self.sample))] # self.model = FuzzyCMeansClusterer(self.sample, memberships) if self.initializer: self.n_clusters = len(self.initializer) centroids = self.initializer data = array([elem.pattern for elem in self.sample]) memberships = [self.normalize([random() for j in range(self.n_clusters)]) for i in range(len(self.sample))] for j in range(len(centroids)): for i in range(len(data)): den = sum([(linalg.norm(data[i] - centroids[j])/ linalg.norm(data[i]-centroids[k]))**(2/(self.m-1)) for k in range(self.n_clusters)]) memberships[i][j] = 1/den else: memberships = [self.normalize([random() for j in range(self.n_clusters)]) for i in range(len(self.sample))] self.model = FuzzyCMeansClusterer(self.sample, memberships) # 10 means simply a big value, so that we don't run the risk of erronously stop # if we check convergence before first iteration self.memberships_old = [[10 for j in range(self.n_clusters)] for i in range(len(self.sample))]