如何在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 的因变量的数据框,对吗? 确保 X 和 clusterlabels 变量是 numpy 数组,而不是数据帧。使用示例 iris 数据集运行代码时,您收到 IndexError 了吗?以上是关于如何在python中分别计算每个集群的剪影分数的主要内容,如果未能解决你的问题,请参考以下文章
sklearn Clustering:在大型数据集上确定最佳集群数量的最快方法