如何在k-means中记录每次迭代的质心?

Posted

技术标签:

【中文标题】如何在k-means中记录每次迭代的质心?【英文标题】:How to keep record of centroids of every iteration in k-means? 【发布时间】:2020-04-09 17:26:02 【问题描述】:

通过使用“kmeans.cluster_centers_”,我得到了每个集群的最终质心,但是如果我想跟踪所有迭代的所有质心并将结果存储到一个列表中该怎么办。

【问题讨论】:

【参考方案1】:

Scikit-learn 不会为您提供中间结果,也无法通过标准 API 来做到这一点。 获取它们的一种巧妙方法是使用以下方法:

k_means = KMeans(max_iter=1)
for i in range(300):
  k_means.fit(X)
  intermediate_centers = k_means.cluster_centers_
  k_means = KMeans(max_iter=1, init=intermediate_centers)

这不是一个快速的方法,我不建议在生产环境中运行它。

【讨论】:

另一种方法是使用 sklearn.cluster.MiniBatchKMeanspartial_fit 方法,其中 X 一次是一个样本。它将避免重新创建 KMeans 的实例并初始化质心。

以上是关于如何在k-means中记录每次迭代的质心?的主要内容,如果未能解决你的问题,请参考以下文章

机器学习K-Means

在 python / pyspark 中获取 k-means 质心和异常值

K-Means

如何为 k-means 聚类选择初始质心

k-means聚类算法

Mahout Java API 用于查找使用 k-means 生成的集群的质心