我应该使用np.random.seed还是random.seed?
这取决于在代码中使用的是numpy的随机数生成器还是in中的一个
random。
随机数生成器中
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)。我倾向于将单个全局种子用于脚本,然后基于全局种子为任何并行函数生成新的随机种子。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)