def cluster_metrics(self): labels_true, labels_pred_1, labels_pred_2 = self.prepare_labels() metric_funcs = [adjusted_rand_score, adjusted_mutual_info_score, normalized_mutual_info_score, mutual_info_score, homogeneity_score, completeness_score] # ------ Label-based metrics ------ self.file.write("\n\nPred = L2 Milestones Pred= L1 Labels Metric\n\n") for metric in metric_funcs: try: score_1 = utils.nsf(metric(labels_true, labels_pred_1)) score_2 = utils.nsf(metric(labels_true, labels_pred_2)) except ValueError as e: print e print "Pruning error" sys.exit() key = repr(metric).split()[1] self.label_based_scores_1[key] = score_1 self.label_based_scores_2[key] = score_2 self.file.write("%3.3f %3.3f %s\n" % (score_1, score_2, key)) # ------ Precision & Recall ------ try: for ave in ["micro", "macro", "weighted"]: key = "precision_" + ave score_1 = utils.nsf(precision_score(labels_true, labels_pred_1, average = ave)) score_2 = utils.nsf(precision_score(labels_true, labels_pred_2, average = ave)) self.label_based_scores_1[key] = score_1 self.label_based_scores_2[key] = score_2 self.file.write("%3.3f %3.3f %s\n" % (score_1, score_2, key)) key = "recall_" + ave score_1 = utils.nsf(recall_score(labels_true, labels_pred_1, average = ave)) score_2 = utils.nsf(recall_score(labels_true, labels_pred_2, average = ave)) self.label_based_scores_1[key] = score_1 self.label_based_scores_2[key] = score_2 self.file.write("%3.3f %3.3f %s\n" % (score_1, score_2, key)) except ValueError as e: print e print "Pruning error" sys.exit() self.file.write("\nSilhouette Scores Global\n") # ------ Silhouette Scores ------ for layer in sorted(self.silhouette_scores_global): score = self.silhouette_scores_global[layer] self.file.write("%3.3f %s\n" % (round(Decimal(score), 2), layer)) self.file.write("\nSilhouette Scores Weighted\n") # ------ Silhouette Scores ------ for layer in sorted(self.silhouette_scores_weighted): score = self.silhouette_scores_weighted[layer] self.file.write("%3.3f %s\n" % (round(Decimal(score), 2), layer)) self.file.write("\nDunn Scores1\n") # ------ Dunn Scores ------ for layer in sorted(self.dunn_scores_1): score = self.dunn_scores_1[layer] self.file.write("%3.3f %s\n" % (round(Decimal(score), 2), layer)) self.file.write("\nDunn Scores2\n") # ------ Dunn Scores ------ for layer in sorted(self.dunn_scores_2): score = self.dunn_scores_2[layer] self.file.write("%3.3f %s\n" % (round(Decimal(score), 2), layer)) self.file.write("\nDunn Scores3\n") # ------ Dunn Scores ------ for layer in sorted(self.dunn_scores_3): score = self.dunn_scores_3[layer] self.file.write("%3.3f %s\n" % (round(Decimal(score), 2), layer)) # ------ Visualizing changepoints on broken barh ------ viz = {} for cp in self.list_of_cp: cp_all_data = (self.map_cp2frm[cp], self.map_cp2milestones[cp], self.map_cp2level1[cp], self.map_cp2surgemes[cp], self.map_cp2surgemetransitions[cp]) utils.dict_insert_list(self.map_cp2demonstrations[cp], cp_all_data, viz) data = [self.label_based_scores_1, self.label_based_scores_2, self.silhouette_scores_global, self.dunn_scores_1, self.dunn_scores_2, self.dunn_scores_3, self.level2_silhoutte_global, self.level2_dunn_1, self.level2_dunn_2, self.level2_dunn_3, viz, self.silhouette_scores_weighted, self.level2_silhoutte_weighted] pickle.dump(data, open(self.metrics_picklefile, "wb")) return data
def cluster_metrics(self): """ Computes metrics and returns as single dictionary. """ labels_true, labels_pred = self.prepare_labels() metric_funcs = [adjusted_rand_score, adjusted_mutual_info_score, normalized_mutual_info_score, mutual_info_score, homogeneity_score, completeness_score] # ------ Label-based metrics ------ utils.print_and_write("\n\nPred= L1 Labels Metric\n\n", self.log) for metric in metric_funcs: score_1 = round(Decimal(metric(labels_true, labels_pred)), 2) key = repr(metric).split()[1] self.label_based_scores_1[key] = score_1 utils.print_and_write(("%3.3f %s\n" % (score_1, key)), self.log) # ------ Precision & Recall ------ utils.print_and_write("\n Precision & Recall scores \n", self.log) for ave in ["micro", "macro", "weighted"]: key = "precision_" + ave score_1 = utils.nsf(precision_score(labels_true, labels_pred, average = ave)) self.label_based_scores_1[key] = score_1 utils.print_and_write("%3.3f %s\n" % (round(Decimal(score_1), 2), key), self.log) key = "recall_" + ave score_1 = utils.nsf(recall_score(labels_true, labels_pred, average = ave)) self.label_based_scores_1[key] = score_1 utils.print_and_write("%3.3f %s\n" % (round(Decimal(score_1), 2), key), self.log) utils.print_and_write("\nDunn Scores1\n", self.log) # ------ Dunn Scores # 1------ for layer in sorted(self.dunn_scores_1): score = self.dunn_scores_1[layer] utils.print_and_write("%3.3f %s\n" % (round(Decimal(score), 2), layer), self.log) utils.print_and_write("\nDunn Scores2\n", self.log) # ------ Dunn Scores # 2------ for layer in sorted(self.dunn_scores_2): score = self.dunn_scores_2[layer] utils.print_and_write("%3.3f %s\n" % (round(Decimal(score), 2), layer), self.log) utils.print_and_write("\nDunn Scores3\n", self.log) # ------ Dunn Scores #3 ------ for layer in sorted(self.dunn_scores_3): score = self.dunn_scores_3[layer] utils.print_and_write("%3.3f %s\n" % (round(Decimal(score), 2), layer), self.log) # ------ Visualizing changepoints on broken barh ------ viz = {} for cp in self.list_of_cp: cp_all_data = (self.map_cp2frm[cp], self.map_cp2cluster[cp], self.map_cp2surgemetransitions[cp], self.map_cp2surgemes[cp]) utils.dict_insert_list(self.map_cp2demonstrations[cp], cp_all_data, viz) data = [self.label_based_scores_1, self.silhouette_score_global, self.dunn_scores_1, self.dunn_scores_2, self.dunn_scores_3, viz, self.silhouette_score_weighted] return data
def cluster_metrics(self): labels_true, labels_pred_1, labels_pred_2 = self.prepare_labels() metric_funcs = [ adjusted_rand_score, adjusted_mutual_info_score, normalized_mutual_info_score, mutual_info_score, homogeneity_score, completeness_score ] # ------ Label-based metrics ------ self.file.write( "\n\nPred = L2 Milestones Pred= L1 Labels Metric\n\n") for metric in metric_funcs: try: score_1 = utils.nsf(metric(labels_true, labels_pred_1)) score_2 = utils.nsf(metric(labels_true, labels_pred_2)) except ValueError as e: print e print "Pruning error" sys.exit() key = repr(metric).split()[1] self.label_based_scores_1[key] = score_1 self.label_based_scores_2[key] = score_2 self.file.write("%3.3f %3.3f %s\n" % (score_1, score_2, key)) # ------ Precision & Recall ------ try: for ave in ["micro", "macro", "weighted"]: key = "precision_" + ave score_1 = utils.nsf( precision_score(labels_true, labels_pred_1, average=ave)) score_2 = utils.nsf( precision_score(labels_true, labels_pred_2, average=ave)) self.label_based_scores_1[key] = score_1 self.label_based_scores_2[key] = score_2 self.file.write("%3.3f %3.3f %s\n" % (score_1, score_2, key)) key = "recall_" + ave score_1 = utils.nsf( recall_score(labels_true, labels_pred_1, average=ave)) score_2 = utils.nsf( recall_score(labels_true, labels_pred_2, average=ave)) self.label_based_scores_1[key] = score_1 self.label_based_scores_2[key] = score_2 self.file.write("%3.3f %3.3f %s\n" % (score_1, score_2, key)) except ValueError as e: print e print "Pruning error" sys.exit() self.file.write("\nSilhouette Scores Global\n") # ------ Silhouette Scores ------ for layer in sorted(self.silhouette_scores_global): score = self.silhouette_scores_global[layer] self.file.write("%3.3f %s\n" % (round(Decimal(score), 2), layer)) self.file.write("\nSilhouette Scores Weighted\n") # ------ Silhouette Scores ------ for layer in sorted(self.silhouette_scores_weighted): score = self.silhouette_scores_weighted[layer] self.file.write("%3.3f %s\n" % (round(Decimal(score), 2), layer)) self.file.write("\nDunn Scores1\n") # ------ Dunn Scores ------ for layer in sorted(self.dunn_scores_1): score = self.dunn_scores_1[layer] self.file.write("%3.3f %s\n" % (round(Decimal(score), 2), layer)) self.file.write("\nDunn Scores2\n") # ------ Dunn Scores ------ for layer in sorted(self.dunn_scores_2): score = self.dunn_scores_2[layer] self.file.write("%3.3f %s\n" % (round(Decimal(score), 2), layer)) self.file.write("\nDunn Scores3\n") # ------ Dunn Scores ------ for layer in sorted(self.dunn_scores_3): score = self.dunn_scores_3[layer] self.file.write("%3.3f %s\n" % (round(Decimal(score), 2), layer)) # ------ Visualizing changepoints on broken barh ------ viz = {} for cp in self.list_of_cp: cp_all_data = (self.map_cp2frm[cp], self.map_cp2milestones[cp], self.map_cp2level1[cp], self.map_cp2surgemes[cp], self.map_cp2surgemetransitions[cp]) utils.dict_insert_list(self.map_cp2demonstrations[cp], cp_all_data, viz) data = [ self.label_based_scores_1, self.label_based_scores_2, self.silhouette_scores_global, self.dunn_scores_1, self.dunn_scores_2, self.dunn_scores_3, self.level2_silhoutte_global, self.level2_dunn_1, self.level2_dunn_2, self.level2_dunn_3, viz, self.silhouette_scores_weighted, self.level2_silhoutte_weighted ] pickle.dump(data, open(self.metrics_picklefile, "wb")) return data