sklearn:同一聚类的轮廓得分不同

sklearn: silhouette score different for same clustering

我修改了聚类输出的Cluster comparison script to compute silhouette_score

我添加了这一行:

sil = silhouette_score(X, y_pred, metric='euclidean') if len(np.unique(y_pred)) > 1 else float('NaN')

并修改了 plt.text() 行以在子图中显示 sil 值:

txt = 'sil={:.3f}\n{:.2f}s'.format(sil,(t1 - t0))
plt.text(.99, .01, txt, transform=plt.gca().transAxes, size=15, horizontalalignment='right')

这是我得到的:

查看第 3 行的 MeanShoft 和 DBSCAN 列。聚类是相同的,但 DBSCAN 的剪影得分明显较低。怎么会?

既然这个问题不是关于编程错误,是否应该将其移至统计信息?

简而言之,集群是不一样的。如果您 非常 仔细查看 DBSCAN 图,您会发现蓝色集群左下方有一个未分配给任何集群的异常值——它显示为黑点.

请注意,剪影分数假定所有点都分配给一个集群,因此它可能不会给出您期望的答案。在这种情况下,未分配给任何聚类的单个点足以使轮廓分数产生显着差异。