Exemplo n.º 1
0
    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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
 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])