为什么 KMeans 的 silhouette_score 在 Google Colab 中重新启动运行时后会发生变化?

Why does KMeans' silhouette_score change after restarting runtime in Google Colab?

我试图在 Google Colab 笔记本上从 sklearn 的 KMeans 运行ning 获得可重现的结果。 Kmeans 算法适用于由主成分分析 (PCA) 生成的数组。 每次重启notebook的运行时间,拟合,预测,生成一个K-means算法的silhouette_score,silhouette_score就变了!

这是我 运行 使用 Kmeans 拟合和预测并生成 silhouette_score 的代码:

for n_clusters in range(3,9):
    kmeans = KMeans(init= 'k-means++', n_clusters = n_clusters, n_init= 25, random_state = 0)
    kmeans.fit(pca_mat_products)
    clusters = kmeans.predict(pca_mat_products)
    silhouette_avg = silhouette_score(mp_matrix, clusters, random_state= 0)
    print("For n_clusters =", n_clusters, "The average silhouette_score is :", silhouette_avg)

这是生成的 silhouette_score 的示例:

For n_clusters = 3 The average silhouette_score is : 0.08689747798228342
For n_clusters = 4 The average silhouette_score is : 0.11513524544540599
For n_clusters = 5 The average silhouette_score is : 0.13225896257848024
For n_clusters = 6 The average silhouette_score is : 0.13390795741576195
For n_clusters = 7 The average silhouette_score is : 0.11262045164741093
For n_clusters = 8 The average silhouette_score is : 0.12179451798486395

当我重启笔记本的运行时间同时保持笔记本上的一切不变(包括random_state=0),以及运行 从头开始​​的单元格,每次重新启动笔记本时都会出现新的 silhouette_scores。

这是相同代码在不同 运行 中生成的 silhouette_score:

For n_clusters = 3 The average silhouette_score is : 0.09181951382862036
For n_clusters = 4 The average silhouette_score is : 0.11539863985647045
For n_clusters = 5 The average silhouette_score is : 0.13363229313208771
For n_clusters = 6 The average silhouette_score is : 0.13428788881085452
For n_clusters = 7 The average silhouette_score is : 0.13187306014661757
For n_clusters = 8 The average silhouette_score is : 0.13252806332855294

在接下来的 运行 次中,silhouette_score 不断变化。

mp_matrix是one-hot编码数组,如下所示:

array([[0, 0, 0, ..., 0, 1, 0],
       [0, 0, 0, ..., 0, 1, 0],
       [0, 0, 0, ..., 0, 1, 0],
       ...,
       [0, 0, 0, ..., 0, 0, 0],
       [1, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0]])

在 Google Colab 中重启 运行time 后 silhouette_scores 发生变化是否正常? 有没有办法获得可重现的 silhouette_scores?

我在这里和网上的其他地方搜索过,没有发现有人在讨论这个问题。

谢谢!

感谢您的帮助。

根据您的代码,您似乎正在根据 PCA 的结果进行聚类:

  kmeans.fit(pca_mat_products)
  clusters = kmeans.predict(pca_mat_products)

如果您需要 PCA 的可重现结果,请在那里设置 random_state。

这里是文档:https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html