【问题标题】:example algorithm for generating random value in dataset with normal distribution?在具有正态分布的数据集中生成随机值的示例算法?
【发布时间】:2011-04-24 15:13:09
【问题描述】:

我正在尝试生成一些具有简单非均匀概率的随机数来模拟逼真的数据以进行测试。我正在寻找一个接受 mu 和 sigma 作为参数并返回 x 的函数,其中 x 在某些范围内的可能遵循标准钟形曲线或附近。它不需要非常精确甚至高效。生成的数据集不需要与我设置的确切 mu 和 sigma 匹配。我只是在寻找一个相对简单的非均匀随机数生成器。将一组可能的返回值限制为整数就可以了。我已经看到了很多建议,但似乎没有一个适合这个简单的案例。

【问题讨论】:

标签: algorithm random normal-distribution


【解决方案1】:

我的第一个想法是为什么不能使用现有的库?我确信大多数语言已经有一个用于生成普通随机数的库。

如果由于某种原因您不能使用现有库,那么@ellisbben 概述的方法编程起来相当简单。一个更简单(近似)的算法就是将 12 个统一数相加:

X = -6 ## We set X to be -mean value of 12 uniforms
for i in 1 to 12:
   X += U

X 的值大致正常。下图显示了该算法与正态分布相比的 10^5 次抽取。

【讨论】:

    【解决方案2】:

    简而言之Box-Muller transform

    首先,从区间 (0, 1] 中得到两个独立的、均匀的随机数,分别称为 U 和 V。

    那么你可以从公式中得到两个独立的、单位正态分布的随机数

    X = sqrt(-2 * log(U)) * cos(2 * pi * V);
    Y = sqrt(-2 * log(U)) * sin(2 * pi * V);
    

    这为您提供了 mu = 0、sigma = 1 的 iid 随机数;要设置 sigma = s,请将随机数乘以 s;要设置 mu = m,请将 m 添加到您的随机数中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-08
      • 2011-04-23
      • 2018-06-22
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 2011-05-15
      相关资源
      最近更新 更多