利用均匀分布产生随机的正态分布的数据输入源

来源:互联网 发布:淘宝 资质认证 编辑:程序博客网 时间:2024/04/30 06:25

1.问题:

有一组关键词需要被依次测试,但是我们希望关键词的出现概率满足随机正态分布,关键词出现的概率可以控制。

 

2.解决方案:

显然,一般计算机只能提供均匀分布的随机数,无法满足我们的要求,所以我们必须要把均匀分布变换为正态分布;在解决了分布问题后,我们只需要将新的分布变量映射到我们的输入变量(对本例,即是关键词列表)即可。

 

3.变量映射:

对关键词按照我们希望的出现频率排序,然后依次编为0,1,2,....N。如果我们设定的随机分布均值为0,方差为我们所希望的频率最高的那些词的数目(如500),则显然,该正态分布的自定义域所选取的关键词的分布满足正态分布率。

 

4.正态分布的产生,可以有三种方法:

1. 反变换法:0 1之间的均匀分布,随机取一个数,作为正态分布的CDF值,逆向求出x。
2. 中心极限定理:>12个以上的均匀分布相加即得,注意最后要检查方差,进行校正。

3. Box-muller方法:详情可参考http://baike.baidu.com/view/1710258.html?fromTaglist

      Box-muller方法的基本原理:先生成瑞利分布,然后乘以一个与之独立的0,2pi上均匀分布的值的余弦。

  其隐含的原理非常深奥,但结果却是相当简单。
  如果在 (0,1] 值域内有两个一致的随机数字 U1 和 U2,
  可以使用以下两个等式中的任一个算出一个正态分布的随机数字 Z:
  Z = R * cos( θ )  或  Z = R * sin( θ )
  其中,
  R = sqrt(-2 * ln(U2))
  θ = 2 * π * U1
  正态值 Z 有一个等于 0 的平均值和一个等于 1 的标准偏差,可使用以下等式将 Z 映射到一个平均值为 m、标准偏差为 sd 的统计量 X:
  X = m + (Z * sd)

 

 

总结:

为了生成正态分布的输入源,先利用4中的任一种方法生成符合要求的正态分布随机变量序列;

再利用3将该序列映射到具体的输入源中;

这样我们就可以得到一个符合条件的正态分布数据输入源。