Пример #1
0
    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))]