【发布时间】:2013-03-01 21:09:18
【问题描述】:
如果应用程序的不同类需要提取一个或多个随机数,应该在哪里初始化随机数生成器以产生良好的随机序列?
特别是,我需要构建一些决策树来训练随机森林。每个决策树的构建涉及以下步骤:
- 数据集(按多行数据组织)已加载。
- 为了构建新数据集,随机选择了此数据集中的某些行。这个新的数据集将在树的生长过程中逐渐分裂。
- 这个新数据集用于生成决策树:每个节点的创建需要随机选择这个新数据集的几行(在创建一个节点之前,您必须随机生成这个新数据集的一些小的不同子集)。
上面列出的三个步骤是针对每个决策树的构建执行的。刚刚描述的过程规定随机数生成发生多次。例如,第二步应确保每个决策树都使用与初始数据集略有不同的数据集进行训练,因此随机数生成器应避免生成相等的数据集(或者在任何情况下,这种情况发生的可能性应该非常低) .
本质上,在这个过程中,我们可以识别出两个随机性来源:
- 生成
N随机数据集,每个数据集训练一个决策树; - 在创建节点之前,您必须从给定的数据集中执行
M随机提取。
我应该使用多少个随机数生成器? 由于我有一个实现随机森林的类和另一个实现决策树的类,我想我会在第一个类(第一个随机源)中初始化一个随机数生成器,在第二个类中初始化另一个随机数生成器类(随机性的第二个来源)。这是正确的吗?
一般来说,选择正确数量的伪随机数生成器的准则是什么?
【问题讨论】:
-
int main () { srand (time(NULL)); /**/} -
两个随机数生成器不比一个随机数生成器随机
-
我喜欢“Mersenne Twister”PRNG。它的周期很长,为 2^19937 − 1。如果需要,可以将其设为多个同时运行的对象。