R returns 中的 k 模式聚类每个 运行 不同的簇大小
k-mode clustering in R returns different cluster sizes with each run
我正在使用 K-Mode 聚类对分类数据进行聚类,但是当我使用相同数量的聚类对数据进行聚类时,每次 return 不同的聚类大小
如果我 运行 使用相同的数据和相同数量的簇
,我希望簇大小将始终固定
我是不是做错了什么?
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
见https://stats.stackexchange.com/questions/58238/how-random-are-the-results-of-the-kmeans-algorithm
k-means 算法不止一种。
您可能参考了 Lloyds 算法,该算法仅依赖于初始聚类中心。但也有 MacQueen's,它取决于顺序,即点的排序。然后是Hartigan, Wong, Forgy,
各种实现可能存在实现和优化差异。他们对待领带的方式也可能不同!例如,许多天真的实现总是将元素分配给第一个或最后一个集群。
此外,在完成 k-means 后,集群可能最终会按内存地址重新排序,因此即使 k-means 在第一次迭代后收敛,您也不能安全地假设集群 1 仍然是集群 1。其他人将按簇大小重新排序簇(这实际上对 k-means 有意义,因为这更有可能 return 在不同的随机初始化时得到相同的结果)
这真的取决于你有什么样的数据。如果它很好地分成球形簇,那么您通常会得到非常相似的簇。如果不是,那么您每次都可能会得到相当随机的簇。
set.seed(1)
每次K-Means初始化质心都是随机生成的,需要种子来生成随机值。
Kmodes 就像 kmeans 从 random 初始设置开始,然后优化直到收敛到 local 最优值。
- 随机种子是 "part of the input" 算法。使用相同的随机种子,你应该得到相同的结果。
- 如果不同随机种子的结果差异很大,很可能 none 个是好的。有一篇论文讨论了如果有一个好的最优值,那么它一定很容易达到。所以如果你每次都达到不同的最优值,它们就不会很好。
我正在使用 K-Mode 聚类对分类数据进行聚类,但是当我使用相同数量的聚类对数据进行聚类时,每次 return 不同的聚类大小
如果我 运行 使用相同的数据和相同数量的簇
,我希望簇大小将始终固定我是不是做错了什么?
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
见https://stats.stackexchange.com/questions/58238/how-random-are-the-results-of-the-kmeans-algorithm
k-means 算法不止一种。
您可能参考了 Lloyds 算法,该算法仅依赖于初始聚类中心。但也有 MacQueen's,它取决于顺序,即点的排序。然后是Hartigan, Wong, Forgy,
各种实现可能存在实现和优化差异。他们对待领带的方式也可能不同!例如,许多天真的实现总是将元素分配给第一个或最后一个集群。
此外,在完成 k-means 后,集群可能最终会按内存地址重新排序,因此即使 k-means 在第一次迭代后收敛,您也不能安全地假设集群 1 仍然是集群 1。其他人将按簇大小重新排序簇(这实际上对 k-means 有意义,因为这更有可能 return 在不同的随机初始化时得到相同的结果)
这真的取决于你有什么样的数据。如果它很好地分成球形簇,那么您通常会得到非常相似的簇。如果不是,那么您每次都可能会得到相当随机的簇。
set.seed(1)
每次K-Means初始化质心都是随机生成的,需要种子来生成随机值。
Kmodes 就像 kmeans 从 random 初始设置开始,然后优化直到收敛到 local 最优值。
- 随机种子是 "part of the input" 算法。使用相同的随机种子,你应该得到相同的结果。
- 如果不同随机种子的结果差异很大,很可能 none 个是好的。有一篇论文讨论了如果有一个好的最优值,那么它一定很容易达到。所以如果你每次都达到不同的最优值,它们就不会很好。