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函数将计算任务分配到两个核心上,其中第一个参数是集群名称,第二个参数表示每个核心分别计算5万次,第三个参数是一个匿名函数,规定了核心的计算任务。两个核心的计算结果分别存在results的list元素中。比较两个核心的结果取较优的一个,最后关闭集群。

install.packages('snow')library(snow)

system.time({  data(Boston)  cl <- makeCluster(2,type='SOCK')  clusterExport(cl,'Boston')

results <- clusterApply(cl,rep(50000,2),function(nstart)

kmean(Boston,4,nstart=nstart))  i <- sapply(results,function(result) result$tot.withinss)

result <- results[[which.min(i)]]  stopCluster(cl)})

从结果观察到本地双核心组成的计算集群只耗费了34秒即完成了运算。snow也可以用多台计算机构建集群,不过设置蛮复杂,笔者没有折腾成功。总而言之,snow是一种高级包,它不关注底层的线程之间的通讯,而着重于任务的执行易于使用,相对R的单核心弱点是很好的补充。

R语言snow包并行计算相关推荐

  1. r语言 bsda包_使用R语言creditmodel包进行Vintage分析或留存率分析

    1 什么是vintage分析? Vintage分析(账龄分析法)被广泛应用于信用卡及信贷行业,这个概念起源于葡萄酒,即不同年份出产的葡萄酒的品质有差异,那么不同时期开户或者放款的资产质量也有差异,其核 ...

  2. R语言caret包构建机器学习回归模型(regression model)、使用DALEX包进行模型解释分析、特征重要度、偏依赖分析等

    R语言caret包构建机器学习回归模型(regression model).使用DALEX包进行模型解释分析.特征重要度.偏依赖分析等 目录

  3. R语言数据包自带数据集之ISwR包的melanom数据集字段解释、数据导入实战

    R语言数据包自带数据集之ISwR包的melanom数据集字段解释.数据导入实战 目录 R语言数据包自带数据集之ISwR包的melanom数据集字段解释.数据导入实战 #数据字段说明 #导入包 #导入数 ...

  4. R语言数据包自带数据集之survival包的colon数据集字段解释、数据导入实战

    R语言数据包自带数据集之survival包的colon数据集字段解释.数据导入实战 #数据字段说明 colon数据集:B/C期结肠癌辅助化疗治疗数据 d # 患者编号 study # 所有患者都是1 ...

  5. R语言数据包自带数据集之survival包的lung数据集字段解释、数据导入实战

    R语言数据包自带数据集之survival包的lung数据集字段解释.数据导入实战 目录 R语言数据包自带数据集之survival包的lung数据集字段解释.数据导入实战 #数据字段说明 #导入包 #导 ...

  6. R语言数据包自带数据集之ToothGrowth数据集字段解释、数据导入实战

    R语言数据包自带数据集之ToothGrowth数据集字段解释.数据导入实战 目录 R语言数据包自带数据集之ToothGrowth数据集字段解释.数据导入实战 #数据字段说明 #导入包 #导入数据 #数 ...

  7. R语言数据包自带数据集之mtcars数据集字段解释、数据导入实战

    R语言数据包自带数据集之mtcars数据集字段解释.数据导入实战 目录 R语言数据包自带数据集之mtcars数据集字段解释.数据导入实战 #会用帮助?或者help函数 #字段说明 #导入包 #导入数据 ...

  8. R语言dplyr包通过数据列的索引重命名数据列实战(Rename Column by Index Position)

    R语言dplyr包通过数据列的索引重命名数据列实战(Rename Column by Index Position) 目录 R语言dplyr包通过数据列的索引重命名数据列实战(Rename Colum ...

  9. R语言stringr包str_dup函数字符串多次复制实战

    R语言stringr包str_dup函数字符串多次复制实战 目录 R语言stringr包str_dup函数字符串多次复制实战 #导入stringr包 #仿真数据

最新文章

  1. 基本函数依赖和候选键_5G 通信候选波形的设计和评测解决方案
  2. 01_Mybatis入门
  3. html美化计算机,职称计算机Dreamwaver教程:CSS样式表滤镜
  4. Python入门--基本输入输出
  5. HTML表单提交规则
  6. 【转】0.SharePoint服务器端对象模型 之 序言
  7. Mysql高性能优化技能总结
  8. 字符串处理,查询第一个不是 0 的字符的位置
  9. 基于RDMA高速网络的高性能分布式系统
  10. Qt4 在x86和arm平台上的一些配置
  11. 【离散数学】集合论 第三章 集合与关系(2) 集合的基本运算
  12. 数据分析基础-Excel练习
  13. Java程序员的工资标准是多少
  14. 通过IP地址连接两台电脑
  15. Perl下载和安装Python下载和安装
  16. graphpad多条不同的曲线_GraphPad Prism
  17. ROS——UDRF机器人模型优化(xacro)
  18. 数据库日常之修改MySQL数据库密码的方法
  19. 《HyVulDect: A hybrid semantic vulnerability mining system based ongraph neural network》阅读笔记
  20. 为iPart表添加“重量”列

热门文章

  1. 牛客竞赛 生涯回忆录
  2. 【Maven】maven的pom文件的位置
  3. vue+element-ui小结
  4. python中input()函数详解
  5. iMac12,2装win10 黑屏问题
  6. ie浏览器如何创建ajax,唯独ie浏览器缓存ajax请求
  7. mips中的li_MIPS指令学习二
  8. 京东、阿里、华为、金山、格力的员工福利房是这样的
  9. 网络安全知识图谱构建《理论篇》
  10. XML四种经典解析方法