r - kmeans : Quick-TRANSfer stage steps exceeded maximum

标签 r cluster-analysis k-means

我正在使用标准 stats 在具有 636,688 行和 7 列的数据集上运行 R 中的 k-means 聚类。包裹:kmeans(dataset, centers = 100, nstart = 25, iter.max = 20) .

我收到以下错误:Quick-TRANSfer stage steps exceeded maximum (= 31834400) ,虽然可以在 http://svn.r-project.org/R/trunk/src/library/stats/R/kmeans.R 查看代码- 我不确定出了什么问题。我认为我的问题与我的数据集的大小有关,但如果有人能一劳永逸地澄清我可以做些什么来缓解这个问题,我将不胜感激。

最佳答案

我只是有同样的问题。

通过 ?kmeans 查看 R 中的 kmeans 文档:

The Hartigan-Wong algorithm generally does a better job than either of those, but trying several random starts (‘nstart’> 1) is often recommended. In rare cases, when some of the points (rows of ‘x’) are extremely close, the algorithm may not converge in the “Quick-Transfer” stage, signalling a warning (and returning ‘ifault = 4’). Slight rounding of the data may be advisable in that case.



在这些情况下,您可能需要切换到 Lloyd 或 MacQueen 算法。

R 在这里令人讨厌的事情是它继续发出可能被忽视的警告。出于我的基准测试目的,我认为这是一次失败的运行,因此我使用:
if (kms$ifault==4) { stop("Failed in Quick-Transfer"); }

根据您的用例,您可能想要做类似的事情
if (kms$ifault==4) { kms = kmeans(X, kms$centers, algorithm="MacQueen"); }

相反,继续使用不同的算法。

如果您对 K 均值进行基准测试,请注意 R 使用 iter.max=10默认情况下。可能需要超过 10 次迭代才能收敛。

关于r - kmeans : Quick-TRANSfer stage steps exceeded maximum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21382681/

相关文章:

r - 使用 group_by 并从 dplyr 中汇总不包含 group_by 变量的所有行

r - 将数据帧列表合并为一个保留行名

r - 单个社区的单独着色

r - R中具有相同数据的相同操作的不可预测的内存使用情况

machine-learning - 分类和检测之间的区别

scikit-learn - sklearn kmeans 方法中的 precompute_distances 做什么?

r - 如何在R中对大型数据库进行采样并实现K-means和K-nn?

r - 通过引用删除整个 data.table

ruby - R 中 CAS 注册表到 Pubchem cid 标识符的转换

c# - 聚类非矩阵字符串数组