利用均匀分布产生随机的正态分布的数据输入源
来源:互联网 发布:淘宝 资质认证 编辑:程序博客网 时间: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将该序列映射到具体的输入源中;
这样我们就可以得到一个符合条件的正态分布数据输入源。
- 利用均匀分布产生随机的正态分布的数据输入源
- 问题 H C.产生均匀分布的随机数据
- MATLAB产生连续均匀分布的随机数组——unifrnd
- MATLAB产生连续均匀分布的随机数组——unifrnd
- 概率算法-均匀分布产生正态分布
- C++:利用随机函数,根据高尔顿原理产生正态分布。(打开Excel,利用图表现的向导look)
- 均匀分布随机数产生的程序
- 正态分布随机数的产生
- 正态分布随机数的产生
- Matlab中产生正态分布随机数的函数normrnd-----用来产生高斯随机矩阵
- 随机数据产生的问题
- 数字信号产生之均匀分布的随机数
- C++中如何产生均匀分布的随机数
- C++产生正态分布的随机数
- 产生满足正态分布的随机数
- 如何产生正态分布的随机数?
- 三角形内的均匀分布点(随机)
- Matlab与线性代数 -- 均匀分布的随机矩阵
- Poring to 64 bit
- Lic2
- 设置系统工作CPU个数
- sql 自连接
- 定时执行任务
- 利用均匀分布产生随机的正态分布的数据输入源
- 优秀程序员的十个习惯
- Java程序中的配置文件的存放和读取
- Log4j配置文件以及配置方法
- vsftpd-ftp 正常登录后,出现500 OOPS: cap_set_proc
- Java程序中的配置文件的存放和读取
- ubuntu下建立内核调试环境bochs
- SAP and ABAP Memory
- PKI