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

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

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

【问题讨论】:

标签: python python-3.x scikit-learn cluster-analysis k-means


【解决方案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 了吗?
猜你喜欢
  • 2023-04-05
  • 2016-09-07
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 2017-06-20
  • 2021-10-28
  • 2020-12-01
相关资源
最近更新 更多