使用numpy.random.seed的潜在Dirichlet分配的再现性

使用numpy.random.seed的潜在Dirichlet分配的再现性,numpy,random,lda,Numpy,Random,Lda,我正在使用LDA为一个更大的软件项目进行主题建模。当应用程序第一次初始化时,我们运行几个测试以确保一切正常。其中一个测试涉及使用toy数据集检查LDA的输出,与使用同一数据集检查LDA的已知结果对比。问题在于,LDA本质上是随机的,如果我只是针对数据集运行LDA,存储结果,然后将这些结果与稍后针对数据集运行的LDA进行比较,结果将非常不同 因此,在初始阶段和测试阶段运行LDA之前,我尝试使用np.random.seed(111)。这给了我完全一致的结果,这意味着我可以检查结果是否严格相等(这使事

我正在使用LDA为一个更大的软件项目进行主题建模。当应用程序第一次初始化时,我们运行几个测试以确保一切正常。其中一个测试涉及使用toy数据集检查LDA的输出,与使用同一数据集检查LDA的已知结果对比。问题在于,LDA本质上是随机的,如果我只是针对数据集运行LDA,存储结果,然后将这些结果与稍后针对数据集运行的LDA进行比较,结果将非常不同

因此,在初始阶段和测试阶段运行LDA之前,我尝试使用
np.random.seed(111)
。这给了我完全一致的结果,这意味着我可以检查结果是否严格相等(这使事情变得更容易)。也就是说,我注意到这不是最佳实践,因为它会影响全局随机数生成器,而全局随机数生成器会影响应用程序中的所有其他结果。我想做的是在测试期间设置种子,然后在测试完成后重置。在这一点上,我希望不必传递
rng=np.random.default\u rng(111)
对象,因为所有导航都是通过路线进行的,这可能是一个超级麻烦


我正在寻找如何最好地实现我想要的建议。正如我所说,我认为最简单的方法就是
np.random.seed(111)
,然后是
np.random.reset\u seed
(虽然这不是一个实际的函数,但这正是我所希望的`).

此时,我的解决方案是在进行任何测试之前保存随机状态,然后在测试之后恢复随机状态

state_0 = np.random.get_state()
np.random.seed(111)
# DO SOME STUFF #
np.random.set_state(state_0)

我不知道这是否是最好的方法,但到目前为止,它似乎正在发挥作用……

通常推荐的方法是安排代码以便您可以传入RNG in。不确定你所说的“通过路线进行导航”是什么意思,也许你可以澄清一下?