Python 为什么scikit学习剪影_分数为1个群集返回错误?

Python 为什么scikit学习剪影_分数为1个群集返回错误?,python,scikit-learn,Python,Scikit Learn,对于K-均值聚类中的不同K值,一个聚类(K=1)可能是有效的最佳拟合。 scikit学习(V0.23.1)中的“剪影_分数”似乎不适用于一个集群,并给出了一个意外错误 下面是要复制的代码: import numpy as np from sklearn.metrics import silhouette_samples, silhouette_score X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]]) kmea

对于K-均值聚类中的不同K值,一个聚类(K=1)可能是有效的最佳拟合。 scikit学习(V0.23.1)中的“剪影_分数”似乎不适用于一个集群,并给出了一个意外错误

下面是要复制的代码:

import numpy as np
from sklearn.metrics import silhouette_samples, silhouette_score

X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]])
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
labels = kmeans.predict(X)
print(labels)
print(silhouette_score(X, labels)) # 2 clusters works

kmeans = KMeans(n_clusters=1, random_state=0).fit(X)
labels = kmeans.predict(X)
print(labels)
print(silhouette_score(X, labels)) # 1 cluster gives ValueError: Number of labels is 1. Valid values are 2 to n_samples - 1 (inclusive)
根据标准,1个簇的轮廓分数的正确值应为零


我在这里做错了什么吗?

轮廓图评分
文档中,评分是按照
轮廓图系数
以以下方式定义的:

计算所有样本的平均轮廓系数

轮廓系数是使用簇内平均值计算的 距离(a)和每个的平均最近簇距离(b) 样品样本的轮廓系数为(b-a)/max(a, b) 。为了澄清,b是样本和最近的样本之间的距离 样本不属于的群集。注意这个轮廓
仅当标签数量为2时,才定义系数“为什么您首先要计算它?”——因为这是无人参与的学习。我可以手动添加它,考虑到(wiki)定义和scikit learn中的K-Means实现支持1个集群,这似乎是一个遗漏。这回答了我的问题(我认为RTFM)。是的,这是有道理的,我想知道为什么他们没有自己构建这个。