gpt4 book ai didi

python - 我应该使用 `random.seed` 还是 `numpy.random.seed` 来控制 `scikit-learn` 中的随机数生成?

转载 作者:IT老高 更新时间:2023-10-28 22:00:56 29 4
gpt4 key购买 nike

我正在使用 scikit-learn 和 numpy,我想设置全局种子,以便我的工作可重现。

我应该使用 numpy.random.seed 还是 random.seed

从评论中的链接,我了解到它们是不同的,并且 numpy 版本不是线程安全的。我想具体了解使用哪一个来创建 IPython 笔记本以进行数据分析。 scikit-learn 的一些算法涉及生成随机数,我想确保 notebook 在每次运行时显示相同的结果。

最佳答案

Should I use np.random.seed or random.seed?

这取决于您在代码中使用的是 numpy 的随机数生成器还是 random 中的随机数生成器。

numpy.randomrandom 中的随机数生成器具有完全独立的内部状态,因此 numpy.random.seed() 不会影响random.random()产生的随机序列,同样random.seed()不会影响numpy.random.randn()等等。如果您在代码中同时使用 randomnumpy.random,那么您需要分别为两者设置种子。

更新

您的问题似乎专门针对 scikit-learn 的随机数生成器。据我所知,scikit-learn 始终使用 numpy.random,所以你应该使用 np.random.seed() 而不是 random.seed( ).

一个重要的警告是 np.random 不是线程安全的 - 如果您设置全局种子,然后启动几个子进程并使用 np.random 在其中生成随机数,每个子进程将从其父进程继承 RNG 状态,这意味着您将在每个子进程中获得相同的随机变量。解决这个问题的常用方法是将不同的种子(或 numpy.random.Random 实例)传递给每个子进程,这样每个子进程都有一个单独的本地 RNG 状态。

由于 scikit-learn 的某些部分可以使用 joblib 并行运行,您会看到某些类和函数可以选择传递种子或 np.random.RandomState 实例(例如random_state= 参数为 sklearn.decomposition.MiniBatchSparsePCA )。我倾向于对脚本使用单个全局种子,然后根据全局种子为任何并行函数生成新的随机种子。

关于python - 我应该使用 `random.seed` 还是 `numpy.random.seed` 来控制 `scikit-learn` 中的随机数生成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31057197/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com