加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

我应该使用`random.seed`或`numpy.random.seed`来控制`scikit-le

发布时间:2020-12-20 10:35:00 所属栏目:Python 来源:网络整理
导读:我正在使用scikit-learn和numpy,我想设置全局种子,以便我的工作可以重现. 我应该使用numpy.random.seed还是random.seed? 编辑: 从评论中的链接,我知道它们是不同的,并且numpy版本不是线程安全的.我想知道哪一个用于创建IPython笔记本进行数据分析. scikit-
我正在使用scikit-learn和numpy,我想设置全局种子,以便我的工作可以重现.

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

编辑:
从评论中的链接,我知道它们是不同的,并且numpy版本不是线程安全的.我想知道哪一个用于创建IPython笔记本进行数据分析. scikit-learn中的一些算法涉及生成随机数,我想确保笔记本在每次运行时都显示相同的结果.

解决方法

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

这取决于你的代码中是否使用numpy的随机数生成器或随机数.

numpy.random和random中的随机数生成器具有完全独立的内部状态,因此numpy.random.seed()不会影响random.random()生成的随机序列,同样random.seed()也不会影响numpy. random.randn()等.如果你在代码中同时使用random和numpy.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).我倾向于使用单个全局种子作为脚本,然后基于任何并行函数的全局种子生成新的随机种子.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读