def _find_optimal_clustering(self,clusterings):
max_score = float('-inf')
max_clustering = None
for clustering in clusterings:
labeled_vectors = [(node.vector,cluster_idx) for cluster_idx in range(len(clustering)) for node in _get_cluster_nodes(clustering[cluster_idx][1]) ]
vectors,labels = [np.array(x) for x in zip(*labeled_vectors)]
if np.in1d([1],labels)[0]:
score = silhouette_score(vectors,labels,metric='cosine')
else:
continue # silhouette doesn't work with just one cluster
if score > max_score:
max_score = score
max_clustering = clustering
return zip(*max_clustering)[1] if max_clustering else zip(*clusterings[0])[1]
评论列表
文章目录