kmeans:快速转换阶段步骤超出最大值

时间:2014-01-27 13:55:11

标签: r cluster-analysis k-means

我正在使用标准stats包{6}包在636,688行和7列的数据集中的R中运行k-means聚类。

我收到以下错误:kmeans(dataset, centers = 100, nstart = 25, iter.max = 20),虽然可以在http://svn.r-project.org/R/trunk/src/library/stats/R/kmeans.R查看代码 - 但我不确定出了什么问题。我认为我的问题与我的数据集的大小有关,但如果有人能够一劳永逸地澄清我可以采取哪些措施来缓解这个问题,我将不胜感激。

4 个答案:

答案 0 :(得分:20)

我遇到了同样的问题。

通过?kmeans

查看R中的kmeans文档
  

Hartigan-Wong算法        通常做得比其中任何一个好,但尝试        经常推荐几个随机开始('nstart'> 1)。 罕见        例如,某些点('x'的行)非常接近,        算法可能无法收敛于“快速转移”阶段,        发出警告信号(并返回'ifault = 4')。轻微        在这种情况下,可能需要舍入数据。

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

这里关于R的令人讨厌的事情是,它继续发出警告,可能会被忽视。对于我的基准测试目的,我认为这是一个失败的运行,因此我使用:

if (kms$ifault==4) { stop("Failed in Quick-Transfer"); }

根据您的使用情况,您可能需要执行类似

的操作
if (kms$ifault==4) { kms = kmeans(X, kms$centers, algorithm="MacQueen"); }

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

如果您正在对K-means进行基准测试,请注意R默认情况下使用iter.max=10。收敛可能需要10多次迭代。

答案 1 :(得分:10)

有同样的问题,似乎与可用内存有关。

在函数为我工作之前运行垃圾收集:

gc()

或参考:

Increasing (or decreasing) the memory available to R processes

答案 2 :(得分:2)

@ jlhoward的评论:

尝试

kmeans(dataset, algorithm="Lloyd", ..)

答案 3 :(得分:0)

我得到了相同的错误消息,但就我而言,它有助于增加iter.max的迭代次数。这与内存过载理论相矛盾。