def test_redefine_cluster_with_map(self): initial_cluster = Cluster(None,[1,3,4,7,8]) final_cluster_1 = Cluster(None,[0,1,4]) #-> elements [1,3,8] of initial cluster final_cluster_2 = Cluster(None,[2,3]) #-> elements [4,7] of initial cluster self.assertItemsEqual( [1,3,8],Refiner.redefine_cluster_with_map(initial_cluster, final_cluster_1).all_elements) self.assertItemsEqual( [4,7],Refiner.redefine_cluster_with_map(initial_cluster, final_cluster_2).all_elements)
def __kmedoids_compression(self, clustering, matrix_handler): """ """ representatives = [] for cluster in clustering.clusters: # Guess 'correct' number of elements for this cluster cluster_size = cluster.get_size() expected_cluster_elements = cluster_size * (float(self.parameters["final_number_of_frames"]) / clustering.total_number_of_elements) expected_cluster_elements = int(math.ceil(expected_cluster_elements)) remapped_matrix = get_submatrix(matrix_handler.distance_matrix, cluster.all_elements) # Prepare and run kmedoids algorithm kmedoids = KMedoidsAlgorithm(remapped_matrix) # print "KMEDOIDS:: EXPECTED", expected_cluster_elements, cluster_size, clustering.total_number_of_elements, self.parameters["final_number_of_frames"] new_clustering = kmedoids.perform_clustering({ "k": expected_cluster_elements, "seeding_type": "EQUIDISTANT" }) # print "NEW CLUSTERING SIZE clusters: %d elements: %d"%(len(new_clustering.clusters), new_clustering.total_number_of_elements) # reverse the remapping and add it to representatives remapped_representatives = new_clustering.get_medoids(remapped_matrix) fake_cluster = Cluster(None, remapped_representatives) representatives.extend(Refiner.redefine_cluster_with_map(cluster, fake_cluster).all_elements) return representatives
def __kmedoids_compression(self, clustering, matrix_handler): """ """ representatives = [] for cluster in clustering.clusters: # Guess 'correct' number of elements for this cluster cluster_size = cluster.get_size() expected_cluster_elements = cluster_size * ( float(self.parameters["final_number_of_frames"]) / clustering.total_number_of_elements) expected_cluster_elements = int( math.ceil(expected_cluster_elements)) remapped_matrix = get_submatrix(matrix_handler.distance_matrix, cluster.all_elements) # Prepare and run kmedoids algorithm kmedoids = KMedoidsAlgorithm(remapped_matrix) # print "KMEDOIDS:: EXPECTED", expected_cluster_elements, cluster_size, clustering.total_number_of_elements, self.parameters["final_number_of_frames"] new_clustering = kmedoids.perform_clustering({ "k": expected_cluster_elements, "seeding_type": "EQUIDISTANT" }) # print "NEW CLUSTERING SIZE clusters: %d elements: %d"%(len(new_clustering.clusters), new_clustering.total_number_of_elements) # reverse the remapping and add it to representatives remapped_representatives = new_clustering.get_medoids( remapped_matrix) fake_cluster = Cluster(None, remapped_representatives) representatives.extend( Refiner.redefine_cluster_with_map(cluster, fake_cluster).all_elements) return representatives
def test_repartition_with_kmedoids(self): Refiner.KMedoidsAlgorithmClass = KMedoidsAlgorithmStub clustering = Refiner.repartition_with_kmedoids(Cluster(None,[1,3,4,7,8]), 0, None) # We'll suppose that the order is always the same self.assertItemsEqual( [1,3,8],clustering.clusters[0]) self.assertItemsEqual( [4,7],clustering.clusters[1])