def test_cohesion(self): distances = CondensedMatrix( [ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]) clusters = [Cluster(None, elements=[0,1,2]), Cluster(None, elements=[3,4])] clustering = Clustering(clusters) calculator = CohesionCalculator() # cohesion of cluster 1: 1/3 * 8 # cohesion of cluster 2: 1/2 * 10 # max_cohesion = 11 (1/5 * 55) # final cohesion = 0.696945 self.assertAlmostEqual(1-0.696945,calculator.evaluate(clustering, distances),places = 4)
def test_cohesion(self): distances = CondensedMatrix([1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]) clusters = [ Cluster(None, elements=[0, 1, 2]), Cluster(None, elements=[3, 4]) ] clustering = Clustering(clusters) calculator = CohesionCalculator() # cohesion of cluster 1: 1/3 * 8 # cohesion of cluster 2: 1/2 * 10 # max_cohesion = 11 (1/5 * 55) # final cohesion = 0.696945 self.assertAlmostEqual(1 - 0.696945, calculator.evaluate(clustering, distances), places=4)
def test_cohesion_with_noise(self): # Element 2 is treated as noise distances = CondensedMatrix([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]) clusters = [Cluster(None, elements=[0,1]), Cluster(None, elements=[3,4])] clustering = Clustering(clusters) calculator = CohesionCalculator() #[ 1. 3. 4. # 6. 7. # 10.] # cohesion of cluster 1: 1/2 # cohesion of cluster 2: 1/2 * 10 # max_cohesion: 7.75 = (1/4 * 31) # final cohesion: 0.7096774193548387 self.assertAlmostEqual(1-0.7096774193548387, calculator.evaluate(clustering, distances), places = 4)
def evaluate(self, clustering, condensed_distance_matrix, cohesions = None): all_clusters = clustering.clusters my_cohesions_dic = {} if (cohesions is None): #Calculate_cohesions if not given cohesion_calctor = CohesionCalculator() for cluster in all_clusters: my_cohesions_dic[cluster] = cohesion_calctor.evaluate_cluster(cluster, condensed_distance_matrix) else: for i, cluster in enumerate(all_clusters): my_cohesions_dic[cluster] = cohesions[i] total_separation = 0 for i, cluster in enumerate(all_clusters): separation = self.cluster_separation(cluster, clustering, my_cohesions_dic[cluster], condensed_distance_matrix) total_separation = total_separation + separation return total_separation
def test_cohesion_with_noise(self): # Element 2 is treated as noise distances = CondensedMatrix([1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]) clusters = [ Cluster(None, elements=[0, 1]), Cluster(None, elements=[3, 4]) ] clustering = Clustering(clusters) calculator = CohesionCalculator() #[ 1. 3. 4. # 6. 7. # 10.] # cohesion of cluster 1: 1/2 # cohesion of cluster 2: 1/2 * 10 # max_cohesion: 7.75 = (1/4 * 31) # final cohesion: 0.7096774193548387 self.assertAlmostEqual(1 - 0.7096774193548387, calculator.evaluate(clustering, distances), places=4)