def internal_silhouette(self, idea_id, base_labels=None):
labels = self.labels_for_idea(idea_id, True, False, base_labels)
self.remove_singletons(labels, idea_id)
idea_post_ids = self.get_posts_of_idea(idea_id)
if base_labels:
idea_post_ids = set(idea_post_ids)
idea_post_ids.update(list(base_labels.keys()))
idea_post_ids = np.array(list(idea_post_ids))
idea_post_ids.sort()
idea_post_ids = np.array(idea_post_ids)
idea_post_nums = self.post_ids.searchsorted(idea_post_ids)
# slicing one axis of a time
# because simultaneous slice interpreted as diagonal
distances = self.distance_matrix
sub_distance = distances[idea_post_nums][:, idea_post_nums]
sub_labels = labels[idea_post_nums]
if len(set(sub_labels)) < 2:
return 0
return metrics.silhouette_score(sub_distance, sub_labels, 'precomputed')
评论列表
文章目录