我试图了解如何使用R并行处理我的一些代码。因此,在下面的示例中,我想使用k均值使用2、3、4、5、6个中心对数据进行聚类,同时使用20个迭代。
这是代码:

library(parallel)
library(BLR)

data(wheat)

parallel.function <- function(i) {
    kmeans( X[1:100,100], centers=?? , nstart=i )
}

out <- mclapply( c(5, 5, 5, 5), FUN=parallel.function )

我们如何才能同时并行化迭代和中心?
假设我想保留所有迭代和中心的k均值中的所有输出,那么如何跟踪输出,以了解如何进行?

最佳答案

起初,这对我来说看起来很简单……然后我尝试了一下。但是,在午休时间里,有很多猴子打字和脸掌后,我得出了这样的结论:

library(parallel)
library(BLR)

data(wheat)

mc = mclapply(2:6, function(x,centers)kmeans(x, centers), x=X)

看起来不错,尽管我没有检查集群的敏感性。
> summary(mc)
     Length Class  Mode
[1,] 9      kmeans list
[2,] 9      kmeans list
[3,] 9      kmeans list
[4,] 9      kmeans list
[5,] 9      kmeans list

经过反射(reflection),命令语法似乎很明智-尽管许多其他失败的事情似乎也是合理的……帮助文档中的示例可能不是那么好。

希望能帮助到你。

编辑
这里要求的是在两个变量nstartcenters
(pars = expand.grid(i=1:3, cent=2:4))

  i cent
1 1    2
2 2    2
3 3    2
4 1    3
5 2    3
6 3    3
7 1    4
8 2    4
9 3    4

L=list()
# zikes horrible
pars2=apply(pars,1,append, L)
mc = mclapply(pars2, function(x,pars)kmeans(x, centers=pars$cent,nstart=pars$i ), x=X)

> summary(mc)
      Length Class  Mode
 [1,] 9      kmeans list
 [2,] 9      kmeans list
 [3,] 9      kmeans list
 [4,] 9      kmeans list
 [5,] 9      kmeans list
 [6,] 9      kmeans list
 [7,] 9      kmeans list
 [8,] 9      kmeans list
 [9,] 9      means list

你想要它们苹果吗?

关于r - R中的平行k均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20416944/

10-12 17:11