生成的随机数中的随机性质量

计算科学 统计数据 随机数生成
2021-11-29 12:48:40

我生成了一个包含 3 个随机数的列表,每个随机数的总和为 1。我想评估随机性的质量。评估这种随机性的最佳机制是什么?例如我的随机数是。知道我可以使用哪些工具来做这个吗?

0.4 0.5 0.1
0.2 0.3 0.5
0.6 0.2 0.2
0.5 0.2 0.3
0.2 0.4 0.4
0.2 0.1 0.7
0.3 0.3 0.4
0.8 0.1 0.1
0.1 0.5 0.4
0.4 0.4 0.2
3个回答

测试均值是否正确,或者即使生成的随机变量的直方图“看起来”像某个分布是不够的。坚持使用更严格的测试套件,例如TestU01Diehard

此外,由于它们总和为 1 的约束,每行中实际上只有两个随机数。

这需要更多的思考,但我认为您可能想要测试第一列的随机性,然后根据第一列中的数字测试第二列的随机性。

假设您将数字放在矩阵中

x = [...
0.4 0.5 0.1
0.2 0.3 0.5
0.6 0.2 0.2
0.5 0.2 0.3
0.2 0.4 0.4
0.2 0.1 0.7
0.3 0.3 0.4
0.8 0.1 0.1
0.1 0.5 0.4
0.4 0.4 0.2];

x(i,:)第 i 行在哪里(你是 3D 随机变量)。您必须计算平均行(我使用的是 matlab 表示法)

x_mean = mean(x);
disp(x_mean);

然后你可以计算残差矩阵(你的行和平均行之间的差异)

res = x - repmat(x_mean,10,1);

并且该矩阵res应将行分布为均值为零的 3D 高斯变量(或均匀分布,或任何用于生成样本的随机分布)。

你的变量之间有一些依赖关系,我不知道如何处理。在这里CrossValidated提出这个问题可能是个好主意。

您所说的“随机性质量”是什么意思?简单来说,如果要查看生成的一组数字是否足够随机,它们的均值应该接近于 0,即纯高斯分布。请注意,仅当您的编号足够大时,这才是一个不错的选择。随机样本,在这种情况下,平均值接近零表明 rand 生成器做得很好。

换句话说,纯随机数彼此不相关,尽管它在实践中几乎从未发生过。

可能还有其他数学上严格的方法来测试它,但对于简单的任务,这就足够了。