11
我想将一个向量(长度大约10^5)分成五个类。使用来自包classInt
的函数classIntervals
我想使用style = "jenks"
自然休息时间,但即使对于只有500的小得多的向量,这也需要过多的时间。设置style = "kmeans"
几乎是瞬间执行的。分成类:jenks vs kmeans
library(classInt)
my_n <- 100
set.seed(1)
x <- mapply(rnorm, n = my_n, mean = (1:5) * 5)
system.time(classIntervals(x, n = 5, style = "jenks"))
R> system.time(classIntervals(x, n = 5, style = "jenks"))
user system elapsed
13.46 0.00 13.45
system.time(classIntervals(x, n = 5, style = "kmeans"))
R> system.time(classIntervals(x, n = 5, style = "kmeans"))
user system elapsed
0.02 0.00 0.02
是什么让詹克斯算法很慢,并且有运行它更快的方法?
如果需要的话我可以撬动问题的最后两个部分stats.stackexchange.com:
- 在什么情况下是k均值为詹克斯一个合理的替代品?
- 通过在数据点的随机1%子集上运行classInt来定义类是否合理?
做阅读功能的帮助。 'kmeans'使用一组随机样本作为初始聚类中心。为了得到可重复的结果,通过'set.seed()'设置一个种子并阅读k-means和局部与全局最小值。这在'classIntervals'中提到。 – 2011-03-14 21:00:07
谢谢加文。我在发布和编辑问题后不久发现了这部分内容。 – 2011-03-14 21:13:51
我不认为有很多证据表明詹克的分数比分位数要好。 – hadley 2011-03-15 01:46:04