很抱歉,如果这看起来含糊不清,但我有一个数据集,其中包含100多个列,这些列具有要与之聚类的特征,并且〜10 ^ 6行。使用
kmeans(dataframe, centers = 100,
nstart = 20,
iter.max = 30)
在i7-6700K上耗时一个多小时。它不使用多个核心,因此可以做些什么吗?
谢谢!
最佳答案
您可以尝试使用ClusterR,尤其是MiniBatchKmeans函数
这是用法示例:
一些数据(小于您的数据-30万行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