使用插入符号完全可重现的并行模型

2024-05-24

当我在插入符中运行 2 个随机森林时,如果设置随机种子,我会得到完全相同的结果:

library(caret)
library(doParallel)

set.seed(42)
myControl <- trainControl(method='cv', index=createFolds(iris$Species))

set.seed(42)
model1 <- train(Species~., iris, method='rf', trControl=myControl)

set.seed(42)
model2 <- train(Species~., iris, method='rf', trControl=myControl)

> all.equal(predict(model1, type='prob'), predict(model2, type='prob'))
[1] TRUE

但是,如果我注册一个并行后端来加速建模,则每次运行模型时都会得到不同的结果:

cl <- makeCluster(detectCores())
registerDoParallel(cl)

set.seed(42)
myControl <- trainControl(method='cv', index=createFolds(iris$Species))

set.seed(42)
model1 <- train(Species~., iris, method='rf', trControl=myControl)

set.seed(42)
model2 <- train(Species~., iris, method='rf', trControl=myControl)

stopCluster(cl)

> all.equal(predict(model1, type='prob'), predict(model2, type='prob'))
[1] "Component 2: Mean relative difference: 0.01813729"
[2] "Component 3: Mean relative difference: 0.02271638"

有什么办法可以解决这个问题吗?一个建议是使用doRNG http://cran.r-project.org/web/packages/doRNG/index.html包,但是train使用当前不支持的嵌套循环:

library(doRNG)
cl <- makeCluster(detectCores())
registerDoParallel(cl)
registerDoRNG()

set.seed(42)
myControl <- trainControl(method='cv', index=createFolds(iris$Species))

set.seed(42)
> model1 <- train(Species~., iris, method='rf', trControl=myControl)
Error in list(e1 = list(args = seq(along = resampleIndex)(), argnames = "iter",  : 
  nested/conditional foreach loops are not supported yet.
See the package's vignette for a work around.

更新: 我认为这个问题可以通过使用来解决doSNOW and clusterSetupRNG,但我无法完全到达那里。

set.seed(42)
library(caret)
library(doSNOW)
cl <- makeCluster(8, type = "SOCK")
registerDoSNOW(cl)

myControl <- trainControl(method='cv', index=createFolds(iris$Species))

clusterSetupRNG(cl, seed=rep(12345,6))
a <- clusterCall(cl, runif, 10000)
model1 <- train(Species~., iris, method='rf', trControl=myControl)

clusterSetupRNG(cl, seed=rep(12345,6))
b <- clusterCall(cl, runif, 10000)
model2 <- train(Species~., iris, method='rf', trControl=myControl)

all.equal(a, b)
[1] TRUE
all.equal(predict(model1, type='prob'), predict(model2, type='prob'))
[1] "Component 2: Mean relative difference: 0.01890339"
[2] "Component 3: Mean relative difference: 0.01656751"

stopCluster(cl)

foreach 有什么特别之处,为什么它不使用我在集群上启动的种子?物体a and b是相同的,所以为什么不呢model1 and model2?


一种使用并行模式运行完全可重现模型的简单方法caret包是通过在调用列车控制时使用种子参数来实现的。到这里上面的问题就解决了,查看trainControl帮助页面以获取更多信息。

library(doParallel); library(caret)

#create a list of seed, here change the seed for each resampling
set.seed(123)

#length is = (n_repeats*nresampling)+1
seeds <- vector(mode = "list", length = 11)

#(3 is the number of tuning parameter, mtry for rf, here equal to ncol(iris)-2)
for(i in 1:10) seeds[[i]]<- sample.int(n=1000, 3)

#for the last model
seeds[[11]]<-sample.int(1000, 1)

 #control list
 myControl <- trainControl(method='cv', seeds=seeds, index=createFolds(iris$Species))

 #run model in parallel
 cl <- makeCluster(detectCores())
 registerDoParallel(cl)
 model1 <- train(Species~., iris, method='rf', trControl=myControl)

 model2 <- train(Species~., iris, method='rf', trControl=myControl)
 stopCluster(cl)

 #compare
 all.equal(predict(model1, type='prob'), predict(model2, type='prob'))
[1] TRUE
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用插入符号完全可重现的并行模型 的相关文章

  • 在函数内部调用 clusterApply 时,性能会下降

    我遇到了一个奇怪的问题clusterApply 我已经能够尽可能地隔离它 如下所示 首先 我从全局环境运行以下代码 require parallel cl lt makeCluster rep localhost 20 SOCK xl lt
  • 查找数据帧列表中同一列中的所有重复值并将其转换为 NULL

    我有一个清单BELGIAN COAST list包含数百个数据帧 df1 df2 15 列 X 1000 行 每个数据帧的最后一列称为Chemicals并包含一些字符 例如Sulfate or Ammonia 但是这一列有很多行Chemic
  • 在另一个 Rmd 中运行选定的块

    我已经在源 Rmd 文件中运行了分析 并且希望仅使用few来自源的块 我已经看到了一些关于从源 Rmd 中提取所有块的答案来自另一个 Rmd 中的 Rmd 文件的源代码 https stackoverflow com questions 4
  • R 编程:如何计算数据框中两个单元格之间的差异并将它们保存在新列中

    尝试学习 R 并陷入自相关示例中 我想将 x 的差异与 y 的差异进行回归 我在数据框中有 x 和 y 并且希望将 x2 x1 的差值保存在新列 例如 dx 中 我不知道该怎么做 我拥有的 data1 x y 5 3 8 9 3 1 1 5
  • 根据另一列中的键累积一列中的值时出现问题

    我有一个看起来像这样的数据框 我需要使用 PROJ ID 列中的字符串创建一个新的值列 并形成 PROJ NAME 列中的值字符串 这里提供的解决方案 根据 r 中另一列的键累积一列中的值 https stackoverflow com q
  • 解析,用三点参数替换

    让我们考虑一个典型的deparse substitute R call f1 lt function u x y print deparse substitute x varU vu varX vx varY vy f1 u varU x
  • 如何按 data.table 中的十分位数组计算统计数据

    我有一个 data table 想按组计算统计数据 R set seed 1 R DT data table a rnorm 100 b rnorm 100 这些组应该定义为 R quantile DT a probs seq 1 9 1
  • 为什么这些数字不相等?

    下面的代码显然是错误的 有什么问题 i lt 0 1 i lt i 0 05 i 1 0 15 if i 0 15 cat i equals 0 15 else cat i does not equal 0 15 i does not eq
  • 在 R 中使用 Huggingface Transformer 模型

    我正在尝试在 R 中使用不同的 Huggingface 模型 这是通过 reticulate 导入 Transformer 包来实现的 谢谢 https rpubs com eR ic transfoRmers https rpubs co
  • 如何匹配 R 中的所有匹配项?

    我有 1000 个名字的列表 说A 我还有另外 5 个名字的清单 说B 我想找出这5个名字出现在1000个号码列表中的第几行 例如 Amy 在 A 中可以出现 25 次 B 里有艾米 我想知道 Amy 出现在 A 中的哪些行 我以前使用过
  • 替换字符串/文本中“从第 n 次到最后一次”出现的单词

    这个问题以前曾被问过 但尚未得到令提问者满意的答案 https stackoverflow com questions 36368712 how to use stringrs replace all function to replace
  • 单击 R 中的 Sankey Chart 线时添加额外的标签值

    以下 R 闪亮脚本创建一个桑基图 如下面的快照所示 我的要求是 当我单击左右节点之间的任何链接 即 a1 和 a2 时 我希望相应的 a3 的总和出现在标签中 例如 a1 中的 A 和 a2 中的 E 总共具有值 50 和 32 因此 我想
  • 非闪亮上下文中的反应式对象绑定

    实际问题 你怎样才能近似反应性环境 行为 http shiny rstudio com tutorial lesson6 建立者shiny http shiny rstudio com函数 或者甚至可能在一个函数中使用这些函数无光泽上下文以
  • 如何根据两个数据框中最近的日期进行匹配?

    假设我有两个数据框 例如 set seed 123 df1 lt data frame bmi rnorm 20 25 5 date1 sample seq Date as Date 2014 01 01 as Date 2014 02 2
  • 从数据框创建稀疏矩阵

    我正在做一项作业 尝试为 Netflix 奖项数据构建协作过滤模型 我使用的数据位于 CSV 文件中 我可以轻松地将其导入到数据框中 现在我需要做的是创建一个稀疏矩阵 其中用户作为行 电影作为列 每个单元格都由相应的评级值填充 当我尝试绘制
  • 在多行中打印带有列名称的 R 数据框

    我有一个带有长列名称的 R 数据框 所以当我打印数据框时它太宽了 有没有一种简单的方法可以将数据框打印到屏幕上 并且列名出现在多行中 我知道我可以缩短名字 但我不想这样做 当奥斯卡的答案被接受时 我想这可能真的是一个答案 不幸的是 这只是复
  • r 谷歌搜索结果计数检索[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 用关键字 健康医院 搜索谷歌会返回大约 1 150 000 000 个结果 如何在 R 中以编程方式获得此计数 我见过这个lin ht
  • 迭代字符串 R 的字符

    有人可以解释一下为什么这不会在 R 中单独打印所有数字 numberstring lt 0123456789 for number in numberstring print number 字符串不就是字符数组吗 在 R 中该怎么做 In
  • 使用 R 交互式更改 Plotly 图像中的轴刻度(线性/对数)

    Goal 创建交互式下拉菜单 按钮来更新 R 中 Plotly 图形的轴比例 Issue 有很多关于创建的文档buttons https plot ly r custom buttons and 对数图 https plot ly r lo
  • 如何一次导入多个 .csv 文件?

    假设我们有一个包含多个 data csv 文件的文件夹 每个文件包含相同数量的变量 但每个文件来自不同的时间 R 中有没有办法同时导入它们 而不必单独导入它们 我的问题是 我有大约 2000 个数据文件需要导入 并且必须使用以下代码单独导入

随机推荐

  • 使用 JavaScript 写入

    我想在页面中打印一条消息 div 页面加载时的元素 我有以下 HTML 和 JavaScript 代码 div div function printMsg var node document getElementById write nod
  • 创建命名管道时所有实例都忙异常

    我有一个 Windows 服务 它通过命名管道与 gui 应用程序进行通信 因此 我有一个线程正在运行 等待应用程序连接 如果我执行一次 它就可以正常运行 但是 如果线程正在创建命名管道流服务器的新实例 则已建立的连接会中断 并且我会收到所
  • 当移动到另一个 Activity 时,在 Android 中保存 Activity [重复]

    这个问题在这里已经有答案了 可能的重复 如何保存 Android 应用程序的状态 https stackoverflow com questions 151777 how do i save an android applications
  • JSP编译时'tmpFile.renameTo(classFile) failed'的原因

    最近 我开始在 JBOss 4 0 5 JSP 应用程序中遇到奇怪的行为 JSP 编译在第一次 第二次 第三次 尝试时失败 但出现异常 17 24 29 909 ERROR jsp Servlet service for servlet j
  • EF4 Code First:如何在不添加导航属性的情况下添加关系

    我应该如何使用 Code First 但不使用任何导航属性来定义关系 之前 我通过在关系的两端使用导航属性来定义一对多和多对多 并在数据库中创建适当的关系 这是类的精简版本 为了简单起见 我已将多对多关系转换为一对多关系 public cl
  • 在 Vue.js 2 中将 props 作为初始数据传递的正确方法是什么?

    所以我想将 props 传递给 Vue 组件 但我希望这些 props 将来会从该组件内部发生变化 例如当我使用 AJAX 从内部更新该 Vue 组件时 所以它们仅用于组件的初始化 My cars listVue 组件元素 我将具有初始属性
  • 将 Rails 更新到特定版本

    如何将 Rails 更新到特定版本 我的本地计算机上有 Rails 3 2 2 但我需要更新到版本 3 2 3 如果我执行gem update rails 将会更新到最新的3 2 6版本 我怎样才能做到这一点 gem install rai
  • 如何在 Firefox 30 上调试 Greasemonkey 脚本?

    我一直在为 Youtube 开发一个 JavaScript 片段 它使用 Greasemonkey 并且还导入 Bootstrap 和 jQuery 库 该应用程序必须为每个搜索列表结果添加一个按钮 当用户单击该按钮时 它必须带出用户从其频
  • 打印对象的键和值

    我想从 javascript 对象打印一个键 值对 我的数组中可以有不同的键 因此无法将其硬编码为 object 0 key1 var filters user abc application xyz console log Object
  • get.put 和 get.lazyput 之间的区别

    我是新来的Getx的依赖注入 有人可以向我解释一下它的好处吗 Get put and Get lazyPut 并告诉我它们有什么区别 简短回答 Get put 会放立即地 Get lazyPut 会放在什么时候你需要它
  • 如何在 Angular 8 中使用本地字体系列?

    我的 assets font 文件夹中有一些自定义字体 假设它是 ITC Charter Com Black 我有四种文件 eot svg tff woff 以及如何在我的项目中使用这些字体 我累了 font family ITC Char
  • 使用实体框架、代码优先方法解决结构问题

    我目前正在使用 EF 和代码优先方法从现有系统构建数据库 最好对 核心 类进行最小的更改 因此 我想找到 Structs 和 EF 的解决方法 是否可以以任何方式将 Struct 包装到类中 以便 EF 可以使用此 Struct 中的数据
  • 如何处理多个连接

    我有一个复杂的查询 需要总共 4 个表中的字段 内部联接导致查询花费的时间比应有的时间长得多 我已经运行了一个 EXPLAIN 语句 其可视化结果附在下面 这是我的查询 SELECT pending corrections correcte
  • React Native 的捆绑包是什么?它的用途是什么?

    我试图了解该捆绑包到底是什么以及它的目的是什么 我可以或不能用它做什么 我看到 当您运行命令 react native start 时 打包程序将被初始化 当您使用 react native run android 或 run ios 在设
  • 在 MLMediaLibrary 中加载媒体源时出错

    我在加载时遇到错误mediaSourcesMac OS X 中的属性 我正在尝试使用以下方法获取 Apple Photos 源MLMediaLibrary class 我的应用程序是沙盒的 并且具有图片文件夹的只读权限 我收到错误 MLMe
  • JavaScript 执行 Ruby 脚本

    服务器 客户端是同一个盒子 创建一个 UI 以在本地运行 ruby 测试脚本 我想要执行 ActiveXObject 之类的东西 w new ActiveXObject WScript Shell w run test rb 文件结构如下
  • 使用 Typescript 时的 MongoDB FindOptions

    我正在将 JS 项目转换为 TS 并且在查询集合时遇到 FindOptions 问题 我只想获取集合中所有元素的 ID 这是导致 TS 错误的 TS 代码 import Collection Db Document MongoClient
  • 模拟适用于 Android 的 AWS Amplify Auth API

    我的 Android 应用程序使用AWS Cognito 和 Amplify 身份验证开发工具包用于身份验证 我正在尝试为登录 注册流程编写 JUnit 测试用例 我正在使用 Mockito 框架来模拟类 我从登录开始 我的登录模型如下所示
  • 如果需要保守是什么?

    C 23即将推出if consteval 这将用在哪里以及它与constexpr if if consteval检测是否constexpr函数在常量表达式上下文中调用 这proposal http www open std org jtc1
  • 使用插入符号完全可重现的并行模型

    当我在插入符中运行 2 个随机森林时 如果设置随机种子 我会得到完全相同的结果 library caret library doParallel set seed 42 myControl lt trainControl method cv