【问题标题】:k-mode clustering in R returns different cluster sizes with each runR 中的 k 模式聚类每次运行都会返回不同的集群大小
【发布时间】:2017-12-23 05:54:28
【问题描述】:

我正在使用 K-Mode 聚类对分类数据进行聚类,但是当我使用相同数量的聚类对数据进行聚类时,每次都会返回不同的聚类大小

如果我在相同的数据和相同数量的集群上运行集群,我希望集群大小始终是固定的

我做错了吗?

library(klaR)
mysample=read.csv("sample_to_cluster.csv")
results1 <-kmodes(mysample[,2:ncol(mysample)],3 , iter.max = 50, weighted = FALSE )
results2 <-kmodes(mysample[,2:ncol(mysample)],3 , iter.max = 50, weighted = FALSE )
print(results1$size)
print(results2$size)
#why results1 & results2 don't have the same sizes

这是我正在使用的 CSV 文件 CSV

【问题讨论】:

  • 既然 sample 也是一个函数,能否请您更改数据框的名称以避免得出结论
  • 谢谢@AjayOhri,我改了,但还是有同样的问题

标签: r machine-learning cluster-analysis unsupervised-learning


【解决方案1】:

https://stats.stackexchange.com/questions/58238/how-random-are-the-results-of-the-kmeans-algorithm

k-means 算法不止一种。

您可能参考了 Lloyds 算法,该算法仅依赖于初始聚类中心。但也有 MacQueen 的,它取决于顺序,即点的顺序。然后是 Hartigan、Wong、Forgy,

不同的实现可能会有实现和优化的差异。他们也可能以不同的方式对待关系!例如,许多幼稚的实现总是在绑定时将元素分配给第一个或最后一个集群。

此外,在完成 k-means 后,集群最终可能会按内存地址重新排序,因此即使 k-means 在第一次迭代后收敛,您也不能安全地假设集群 1 仍然是集群 1。其他人将按集群大小重新排序集群(这实际上对 k-means 有意义,因为这更有可能在不同的随机初始化时返回相同的结果)

这实际上取决于您拥有什么样的数据。如果它被很好地分成球形簇,那么您通常会得到非常相似的簇。如果没有,那么您可能每次都会得到相当随机的集群。

set.seed(1)

K-Means 每次初始化质心时,都是随机生成的,需要种子来生成随机值。

【讨论】:

【解决方案2】:

Kmodes 就像 kmeans 一样,以 random 初始设置开始,然后进行优化,直到收敛到 local 最优值。

  1. 随机种子是算法的“输入的一部分”。使用相同的随机种子,您应该会得到相同的结果。
  2. 如果不同随机种子的结果差异很大,很可能没有一个是好的。有一篇论文讨论了如果有一个很好的最优值,那么它一定很容易达到。因此,如果您每次都达到不同的最优值,它们就不会非常好。

【讨论】:

  • 您是否参考了(2)中提到的一篇论文?
  • 冯·卢克斯堡,美国(2010 年)。聚类稳定性:概述。机器学习的基础和趋势,2(3),235-274。但请注意,他们还讨论了稳定性。不同的子样本,没有不同的初始化。
猜你喜欢
  • 2011-08-07
  • 2011-11-21
  • 2020-03-20
  • 2019-11-03
  • 2020-09-27
  • 2017-10-29
  • 2011-02-12
  • 1970-01-01
  • 2014-09-15
相关资源
最近更新 更多