R中最有效的kmeans聚类包是什么?

时间:2017-11-10 18:31:57

标签: r

很抱歉,如果这看起来很模糊,但我有一个包含100多个列的数据集,其中包含我想要聚类的特性,以及~10 ^ 6行。使用

kmeans(dataframe, centers = 100,
             nstart = 20,
             iter.max = 30)

在i7-6700K上花费一个多小时。它不使用多个内核,那么可以做些什么呢?

谢谢!

1 个答案:

答案 0 :(得分:4)

您可以尝试使用ClusterR,尤其是函数MiniBatchKmeans

以下是一个使用示例:

一些数据(小于你的 - 300k行和30列)

z <- rbind(replicate(30, rnorm(1e5, 2)),
           replicate(30, rnorm(1e5, -1)),
           replicate(30, rnorm(1e5, 5)))

library(ClusterR)
km_model <- MiniBatchKmeans(z, clusters = 3, batch_size = 20, num_init = 5, max_iters = 100, 
                         init_fraction = 0.2, initializer = 'kmeans++', early_stop_iter = 10,
                         verbose = F)

pred <- predict_MBatchKMeans(z, km_model$centroids)

对象pred包含关联的群集:

table(pred)
pred
     1      2      3 
100000 100000 100000 

我说这是完美的分离。如果功能很快,建议增加批量大小和启动次数。

速度:

library(microbenchmark)
microbenchmark(km_model <- MiniBatchKmeans(z, clusters = 3, batch_size = 20, num_init = 5, max_iters = 100, 
                                           init_fraction = 0.2, initializer = 'kmeans++', early_stop_iter = 10,
                                           verbose = F))

Unit: seconds
                                                                                                                                                                                     expr
 km_model <- MiniBatchKmeans(z, clusters = 3, batch_size = 20, num_init = 5, max_iters = 100, init_fraction = 0.2, initializer = "kmeans++",      early_stop_iter = 10, verbose = F)
      min       lq     mean   median       uq      max neval
 3.338328 3.366573 3.473403 3.444095 3.518813 4.176116   100