コード例 #1
0
 def process(self):
     """!
     @brief Performs cluster analysis in line with rules of K-Means algorithm.
     
     @remark Results of clustering can be obtained using corresponding get methods.
     
     @see get_clusters()
     @see get_centers()
     
     """
     
     if (self.__ccore is True):
         self.__clusters = wrapper.kmeans(self.__pointer_data, self.__centers, self.__tolerance);
         self.__centers = self.__update_centers();
     else: 
         changes = float('inf');
          
         stop_condition = self.__tolerance * self.__tolerance;   # Fast solution
         #stop_condition = self.__tolerance;              # Slow solution
          
         # Check for dimension
         if (len(self.__pointer_data[0]) != len(self.__centers[0])):
             raise NameError('Dimension of the input data and dimension of the initial cluster centers must be equal.');
          
         while (changes > stop_condition):
             self.__clusters = self.__update_clusters();
             updated_centers = self.__update_centers();  # changes should be calculated before asignment
          
             #changes = max([euclidean_distance(self.__centers[index], updated_centers[index]) for index in range(len(self.__centers))]);        # Slow solution
             changes = max([euclidean_distance_sqrt(self.__centers[index], updated_centers[index]) for index in range(len(updated_centers))]);    # Fast solution
              
             self.__centers = updated_centers;
コード例 #2
0
ファイル: kmeans.py プロジェクト: xdwwb/pyclustering
    def __process_by_ccore(self):
        """!
        @brief Performs cluster analysis using CCORE (C/C++ part of pyclustering library).

        """
        results = wrapper.kmeans(self.__pointer_data, self.__centers,
                                 self.__tolerance,
                                 (self.__observer is not None))
        self.__clusters = results[0]
        self.__centers = results[1]

        if self.__observer is not None:
            self.__observer.set_evolution_clusters(results[2])
            self.__observer.set_evolution_centers(results[3])
コード例 #3
0
ファイル: kmeans.py プロジェクト: annoviko/pyclustering
    def __process_by_ccore(self):
        """!
        @brief Performs cluster analysis using CCORE (C/C++ part of pyclustering library).

        """
        ccore_metric = metric_wrapper.create_instance(self.__metric)

        results = wrapper.kmeans(self.__pointer_data, self.__centers, self.__tolerance, self.__itermax, (self.__observer is not None), ccore_metric.get_pointer())
        self.__clusters = results[0]
        self.__centers = results[1]

        if self.__observer is not None:
            self.__observer.set_evolution_clusters(results[2])
            self.__observer.set_evolution_centers(results[3])

        self.__total_wce = results[4][0]
コード例 #4
0
    def __process_by_ccore(self):
        """!
        @brief Performs cluster analysis using CCORE (C/C++ part of pyclustering library).

        """
        ccore_metric = metric_wrapper.create_instance(self.__metric)

        results = wrapper.kmeans(self.__pointer_data, self.__centers, self.__tolerance, self.__itermax, (self.__observer is not None), ccore_metric.get_pointer())
        self.__clusters = results[0]
        self.__centers = results[1]

        if self.__observer is not None:
            self.__observer.set_evolution_clusters(results[2])
            self.__observer.set_evolution_centers(results[3])

        self.__total_wce = results[4][0]
コード例 #5
0
    def process(self):
        """!
        @brief Performs cluster analysis in line with rules of K-Means algorithm.
        
        @remark Results of clustering can be obtained using corresponding get methods.
        
        @see get_clusters()
        @see get_centers()
        
        """

        if (self.__ccore is True):
            self.__clusters = wrapper.kmeans(self.__pointer_data,
                                             self.__centers, self.__tolerance)
            self.__centers = self.__update_centers()
        else:
            maximum_change = float('inf')

            stop_condition = self.__tolerance * self.__tolerance
            # Fast solution
            #stop_condition = self.__tolerance;              # Slow solution

            # Check for dimension
            if (len(self.__pointer_data[0]) != len(self.__centers[0])):
                raise NameError(
                    'Dimension of the input data and dimension of the initial cluster centers must be equal.'
                )

            while (maximum_change > stop_condition):
                self.__clusters = self.__update_clusters()
                updated_centers = self.__update_centers()
                # changes should be calculated before asignment

                if (len(self.__centers) != len(updated_centers)):
                    maximum_change = float('inf')

                else:
                    changes = numpy.sum(numpy.square(self.__centers -
                                                     updated_centers),
                                        axis=1)
                    maximum_change = numpy.max(changes)

                self.__centers = updated_centers