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;
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])
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]
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]
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