- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在大型数据集(636,688 行 x 7 列)上执行 k 均值,因此转向并行化。我的结果需要可重复。我可以使用 parallel
包中的 clusterSetRNGStream
来完成此操作。以下是使用 MASS
库中的 Boston
数据集的示例:
library(parallel)
cl <- makeCluster(detectCores())
clusterSetRNGStream(cl, iseed = 1234)
clusterEvalQ(cl, library(MASS))
results <- clusterApply(cl, rep(25, 4), function(nstart) kmeans(Boston, 4, nstart = nstart))
check.results <- sapply(results, function(result) result$size)
stopCluster(cl)
每个 check.results
列表示 k 均值算法给定运行过程中每个相应簇的观测值数量。我的 check.results
看起来像这样:
[,1] [,2] [,3] [,4]
[1,] 38 268 102 102
[2,] 268 98 98 38
[3,] 98 102 38 268
[4,] 102 38 268 98
如果我更改 results
变量以包含 rep(25, 2)
而不是 rep(25, 4)
,我会得到:
[,1] [,2]
[1,] 38 268
[2,] 268 98
[3,] 98 102
[4,] 102 38
完美 - 前 2 次运行的大小保持不变,无论我运行 4 次迭代还是只运行 2 次。如果继续更改迭代次数,您将看到每次运行都保持不变。
我的问题 - 我如何挑选,例如特别是第四次运行而不需要运行前 3 次运行?底层 iseed
clusterSetRNGStream
下是否保存了特定的种子?
最佳答案
clusterSetRNGStream
函数不支持您非常想要的那种可重复性。问题在于,它只是初始化每个集群工作人员以从不同的随机数流中抽取随机数,当对给定数量的工作人员使用 clusterApply 时,这是可重现的。但是要执行特定任务,您必须在正确的工作线程上执行它才能获得正确的流,并在该流中快进,即使您知道每个任务消耗的随机数的确切数量,也不支持此操作任务。
相反,我建议您使用较低级别的函数为每个任务分配不同的随机数子流。您可以通过使用 nextRNGSubStream
函数生成任务种子来实现此目的:
library(parallel)
# This is based on the clusterSetRNGStream function from
# the parallel package, copyrighted by The R Core Team
getseeds <- function(ntasks, iseed) {
RNGkind("L'Ecuyer-CMRG")
set.seed(iseed)
seeds <- vector("list", ntasks)
seeds[[1]] <- .Random.seed
for (i in seq_len(ntasks - 1)) {
seeds[[i + 1]] <- nextRNGSubStream(seeds[[i]])
}
seeds
}
由于我们没有使用clusterSetRNGStream
,因此您需要在初始化工作线程时将随机数生成器设置为“L'Ecuyer-CMRG”:
cl <- makeCluster(detectCores())
clusterEvalQ(cl, { library(MASS); RNGkind("L'Ecuyer-CMRG") })
关键是从工作函数中设置“.Random.seed”的值,以便为每个任务使用正确的随机数子流:
worker <- function(nstart, seed, centers=4) {
assign(".Random.seed", seed, envir=.GlobalEnv)
kmeans(Boston, centers, nstart = nstart)
}
由于我们要迭代 nstart
和 seed
值,因此您使用 clusterMap
而不是 clusterApply
执行任务:
n <- 4
nstarts <- rep(25, n)
seeds <- getseeds(n, 1234)
results <- clusterMap(cl, worker, nstarts, seeds)
要重现第四个任务的结果,请指定第四个种子:
itasks <- c(4)
results <- clusterMap(cl, worker, nstarts[itasks], seeds[itasks])
使用此方法,即使通过 clusterMap
.scheduling="dynamic"
参数进行负载平衡,您也可以获得可重现的结果,因为结果不依赖于运行的工作线程按照使用 clusterSetRNGStream
时的方式执行任务。
请注意,您可以使用 clusterMap
MoreArgs
参数为 worker
的 centers
参数指定值> 功能:
results <- clusterMap(cl, worker, nstarts, seeds, MoreArgs=list(centers=5))
关于r - Seed 和 clusterApply - 如何选择特定运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21560363/
2017 年 7 月 19 日更新 在这里找到解决方案:https://stackoverflow.com/a/10021912/5729266 如果您不想读到最后,请快速得出结论。 我之前的代码中随
golang 文档说 Seed, unlike the Rand.Seed method, is safe for concurrent use. rand.Seed 实际上是来自math/rand
我正在尝试重现我之前运行的模拟,以便在文本文件中记录当前日期时间的种子,然后使用记录的日期时间种子来获取与之前获得的相同的值 但是,我不确定为什么得出的值与我在之前的模拟中运行的值不相似。 这是我尝试
rake db:seed 每当您修改种子数据时,重新运行种子数据是否会删除现有种子数据并重新创建或仅添加新记录? 最佳答案 当您运行时 rake db:seed , db/seeds.rb 仅包含在
是否可以在 Laravel 5 中使用以下内容为相关表做种? php artisan db:seed 我有两张 table users id first name projects
我正在尝试为一组足球队和足球位置播种,奇怪的是,rails 根本没有这样做。 rake db:seed --trace ** Invoke db:seed (first_time) ** Execut
我正在寻找网络。我发现这个话题https://iamtrask.github.io/2015/07/12/basic-python-network/ 一切顺利,但我无法理解那部分: # seed ra
在Python的numpy库中,np.random.seed方法可以接受两种不同类型的参数:int和array_like[int] . 它们有什么区别?如:np.random.seed(2) 和np.
我正在使用 scikit-learn 和 numpy,我想设置全局种子,以便我的工作可重现。 我应该使用 numpy.random.seed 还是 random.seed? 从评论中的链接,我了解到它
出于某种原因,当我尝试通过 heroku 执行此操作时,我的 db:seed 无法正常工作。当我在本地执行时,它工作正常。 paul@paul-laptop:~/rails_projects/fogl
我正在尝试同步转换我的图像和 mask 标签,但随机增强以不同方式应用于两个生成器(当我将两个图像保存到一个目录时证明)。 我试过了 在我的库堆栈中播种所有生成器 禁用随机播放和多处理 确保图像和蒙版
我想在特定行之后结束set.seed()的范围,以便对其余代码进行真正的随机化处理。这是一个我想让set.seed()用于“ rnorm”(第4行)而不是“ nrow”(第9行)的示例 set.see
想知道你是否可以帮助我: 我有一个名为initializeAll的方法: public final void initializeAll() { //other stuff........ rand
我有一行代码使用高精度时钟的纳秒抓取来为 mersenne twister 伪随机数生成器播种。类似这样的事情: rng.seed(duration_cast(high_resolution_cloc
我正在浏览一些关于 ASP.NET MVC 的教程(here 和 here),并决定自己尝试一些东西。现在,我有三个表,Resume、Descriptions、SubDescriptions。这是三者
我正在使用 random.seed() 来尝试保持 random.sample() 与我从列表中采样更多值相同,并且在某些时候数字会发生变化......我认为那个seed() 函数的目的是保持数字相同
我正在研究中等规模的数据集,比如从具有 100,000 个观察值的大型数据集中采样的 9000 个观察值。 我可以使用以下 set.seed() 函数来保证每次都获得完全相同的子集吗? set.see
我在 Laravel 中有一个 Seeder public function run() { $user = App\Admin::create([ '
在确信学习和使用 Angular.js 后,我打算启动一个具体的 Web UI 应用程序,以便启动经验学习轮。 (该应用程序将是某种个人计划、待办事项列表、提醒、番茄工作法导向等等......) On
在启动程序之前,我多次看到 R 中的 set.seed 函数。我知道它基本上用于随机数生成。有什么具体需要设置吗? 最佳答案 需求是对可重现结果的可能渴望,例如,这可能来自尝试调试程序,或者当然来自尝
我是一名优秀的程序员,十分优秀!