如何在python中分别计算每个集群的剪影分数

Posted

技术标签:

【中文标题】如何在python中分别计算每个集群的剪影分数【英文标题】:How to calculate the Silhouette Score for each cluster separately in python 【发布时间】:2020-05-12 03:35:06 【问题描述】:

您可以使用 1 行代码轻松提取剪影分数,该代码对所有集群的分数进行平均,但是如何从剪影分数的 scikit learn 实现中提取每个中间分数?我希望能够为每个集群单独提取相同的分数,而不仅仅是获得总分。

metrics.silhouette_score(x, y, metric='euclidean')

【问题讨论】:

相关:stats.stackexchange.com/questions/498268/… 【参考方案1】:

如果您的数据如下所示:

num_clusters = 3
X, y = datasets.load_iris(return_X_y=True)
kmeans_model = KMeans(n_clusters=num_clusters, random_state=1).fit(X)
cluster_labels = kmeans_model.labels_

您可以使用metrics.silhouette_samples 计算每个样本的轮廓系数,然后取每个聚类的平均值:

sample_silhouette_values = metrics.silhouette_samples(X, cluster_labels)

means_lst = []
for label in range(num_clusters):
    means_lst.append(sample_silhouette_values[cluster_labels == label].mean())

print(means_lst)                                                                             
[0.4173199215409322, 0.7981404884286224, 0.45110506043401194] # 1 mean for each of the 3 clusters

【讨论】:

当我尝试运行您提供的代码时,我得到 IndexError: too many indices for array,不知道为什么? X 和 cluster_labels 只是包含 X 的所有自变量和 cluster_labels 的因变量的数据框,对吗? 确保 Xclusterlabels 变量是 numpy 数组,而不是数据帧。使用示例 iris 数据集运行代码时,您收到 IndexError 了吗?

以上是关于如何在python中分别计算每个集群的剪影分数的主要内容,如果未能解决你的问题,请参考以下文章

剪影分数怎么可能是负数?

sklearn Clustering:在大型数据集上确定最佳集群数量的最快方法

如何使用 Python (scikit-learn) 计算 FactorAnalysis 分数?

带有熊猫的剪影分数的正确数据格式

python中如何计算百分数

如何在 python 中使用 libSVM 计算精度、召回率和 F 分数