如何使用scikit-learn的轮廓分数计算scipy的fcluster的轮廓分数?

5
我正在使用scipy.cluster.hierarchy.linkage作为聚类算法,并将结果链接矩阵传递给 scipy.cluster.hierarchy.fcluster,以获取各种阈值的扁平化聚类。
我想计算结果的Silhouette分数并将它们与其他结果进行比较,以选择最佳的阈值。我希望不用自己实现,而是使用scikit-learn的 sklearn.metrics.silhouette_score
如何重新排列我的聚类结果以作为sklearn.metrics.silhouette_score的输入?
1个回答

7
您不必这样做。 fcluster的结果可以直接输入到silhouette_score中。
distmatrix1 = scipy.spatial.distance.squareform(distmatrix + distmatrix.T)
ddgm = scipy.cluster.hierarchy.linkage(distmatrix1, method="average")
nodes = scipy.cluster.hierarchy.fcluster(ddgm, 4, criterion="maxclust")
metrics.silhouette_score(distmatrix + distmatrix.T , nodes, metric='euclidean')

只是为了给那些像我一样遇到这个问题的人添加一些细节,对于这个答案中所进行的加法有些困惑:distmatrix + distmatrix.T 部分只是你的 X(用于生成列的特征),而 nodes 则是你的 y(聚类的标签)。你可以直接从你的数据框中引用它们,而不是作为单独的对象。 - WJTownsend

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接