This post was kindly contributed by 数据科学与R语言 - go there to comment and to read the full post.
在数据挖掘和机器学习领域有许多的算法需要强大的计算能力,如果对大数据进行运算操作,那么其工作量之大使单个CPU核心难以承受负荷。目前的个人计算机已经具备有多个核心,如果采用并行计算将任务分解到多个核心上运行就能大大减少计算时间。进一步还可以将多台计算机组合成计算集群(Cluster)则能使之具备组合金刚般的运算能力。
目前已经有多个R语言扩展包专注于高性能运算,弥补了R本身单核心作业的弱点。其中snow(Simple Network of Workstations)是R语言中最流行的并行编程包于2003年推出,本文将尝试用snow来运算K均值聚类。
我们先用单核心运算K均值聚类来看看花费的时间,用到的数据集是MASS包中的Boston数据,我们希望将其聚为4类,由于K均值聚类的算法是随机确定初始中心点,所以为了使之收敛到最优解上需要反复运算多次。此处nstart参数设置为100000,即为运算次数。
system.time({ library(MASS) result <- kmeans(Boston,4,nstart=100000)})可看到单核心计算共耗费了61秒,再用本地计算机上用双核心构建集群进行比较。在安装和加载snow包后,首先用makeCluster函数构建本地计算集群,通讯方式使用socket,集群命名为cl。然后将运算所需的Boston数据分发到集群上。之后使用clusterApply函数将计算任务分配到两个核心上,其中第一个参数是集群名称&#