K-means 性能

Posted

技术标签:

【中文标题】K-means 性能【英文标题】:K-means performance 【发布时间】:2021-01-27 19:05:56 【问题描述】:

我有一个大型数据集,每个样本都有一个从 0 到 8 的特定类号。我使用了 sklearn python 包中的 K-means 算法。当我多次运行代码时,K-means 的输出是不同的。例如,第 246 个样本在第一次运行中属于集群 3,在第二次运行中属于集群 0。我还附上了一张图片供您参考。

我认为这是因为集群中心的随机初始化,但我需要在多次运行中获得恒定的结果。我该如何解决?

【问题讨论】:

你确定cluster_number 3和0不一样吗? kmeans.cluster_centers_ 绝对是一样的。但我想通过比较正确的集群 ID 和 k-means 集群 ID 来计算 k-means 性能,因此我需要为我的其余代码提供一个稳定的结果。 好吧,它们永远不会或只是偶然,因为算法从随机放置质心开始,然后优化它们的位置。 【参考方案1】:

簇的个数不是真实的数据,它是一个随机数来区分一个簇。 那就不是稳定数字了。

要知道类的真实类型,需要将已知的类和助记符关联起来。

您的样本:

1 : 246 是 #3

2 : 246 是 #0

您需要为 [246] 命名

【讨论】:

是的,我在帖子中也提到了你的观点。但是我需要通过每个样本的正确标签来计算 k-means 的性能,并且我需要一个稳定的结果。您知道如何通过为每个样本设置正确的类 ID 来计算 k-means 性能吗? 其实无论是哪个标签,只要0和3对应的id在两次运行中都相同即可。衡量性能是另一个问题,因为它是无人监督的,所以要棘手得多。你可以检查 silhoutte 分数。但在现实生活中,主要是基于您的业务。dzone.com/articles/…. 稳定的结果是分类和助记符。您的问题是如何获取类的名称(类型)。它可能会将从当前拟合中获取的数字与已知样本相关联。是分类与教学相结合 关联:您的样本:246 是#3 246 是#0。 - 是你的答案

以上是关于K-means 性能的主要内容,如果未能解决你的问题,请参考以下文章

k-means性能测试

改进 k-means 聚类

K-Means 聚类算法原理分析与代码实现

k-means 聚类的评估

4. K-Means和K-Means++实现

03-01 K-Means聚类算法