我试图了解如何使用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),命令语法似乎很明智-尽管许多其他失败的事情似乎也是合理的……帮助文档中的示例可能不是那么好。
希望能帮助到你。
编辑
这里要求的是在两个变量
nstart
和centers
上(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/