作者:手机用户2502904767_602 | 来源:互联网 | 2022-12-10 13:49
如何解决《ValueError:标签数为1。使用Silhouette_score时,有效值为2到n_samples-1(包括1)》经验,为你挑选了1个好方法。
1> makis..:
产生该错误是因为您有一个循环,用于不同数量的群集n
。在第一次迭代中,n_clusters
is1
,这导致all(km.labels_ == 0)
be True
。
换句话说,您只有一个标签为0的群集(因此,np.unique(km.labels_)
prints array([0], dtype=int32)
)。
silhouette_score
需要超过1个群集标签。这会导致错误。错误消息是明确的。
例:
from sklearn import datasets
from sklearn.cluster import KMeans
import numpy as np
iris = datasets.load_iris()
X = iris.data
y = iris.target
km = KMeans(n_clusters=3)
km.fit(X,y)
# check how many unique labels do you have
np.unique(km.labels_)
#array([0, 1, 2], dtype=int32)
我们有3个不同的集群/集群标签。
silhouette_score(X, km.labels_, metric='euclidean')
0.38788915189699597
该功能工作正常。
现在,让我们引起错误:
km2 = KMeans(n_clusters=1)
km2.fit(X,y)
silhouette_score(X, km2.labels_, metric='euclidean')
ValueError: Number of labels is 1. Valid values are 2 to n_samples - 1 (inclusive)