Randomstate 和 kmeans 问题

数据挖掘 Python k-均值
2022-02-14 13:20:21

我尝试使用 kmeans 算法将 227 行的数据帧聚集在 5 个集群中。每次我运行我的代码时,我都会得到不同的标签和不同的集群,这让我之后的分析有点棘手。

有人告诉我使用参数:randomstate 在我的结果中具有可重复性。我做到了。我有相同的集群,但仍然没有相同的标签。正常吗?有没有办法获得相同的标签?

在我的代码下方:

测试 sur 5 个集群

# Data
X = df.iloc[:,1:]
myseed = 10

# Modèle kmeans à 5 clusters
km = KMeans(n_clusters=5, random_state=myseed, n_init=30) 

# Fitting du modèle aux points 
km = km.fit(X)
y_km = km.predict(X)
1个回答

不幸的是,没有内置选项可以做到这一点。每次运行 K-Means 时,标签都是随机分配的。即使您声明相同的随机种子。但是,基于StackOverFlow 中的这个答案,您可以创建一个查找表并在您的 K-Means 之后运行它。

from sklearn.cluster import KMeans
k = 5
kmeans = KMeans(n_clusters=k, random_state=0).fit(X)

idx = np.argsort(kmeans.cluster_centers_.sum(axis=1))
lut = np.zeros_like(idx)
lut[idx] = np.arange

有了这个,你将永远有相同的输出

In [73]: kmeans.labels_
Out[73]: array([1, 4, 1, ..., 0, 1, 0])

In [74]: lut[kmeans.labels_]
Out[74]: array([3, 0, 3, ..., 2, 4, 2], dtype=int64

lut[kmeans.labels_] = 0,那么你总是拥有最小的集群,而lut[kmeans.labels_] = 4你拥有最大的集群。