利用均匀分布产生随机的正态分布的数据输入源
2009-03-23 15:14
281 查看
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将该序列映射到具体的输入源中;
这样我们就可以得到一个符合条件的正态分布数据输入源。
有一组关键词需要被依次测试,但是我们希望关键词的出现概率满足随机正态分布,关键词出现的概率可以控制。
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将该序列映射到具体的输入源中;
这样我们就可以得到一个符合条件的正态分布数据输入源。
相关文章推荐
- MATLAB产生连续均匀分布的随机数组——unifrnd
- 插值搜索——本质和二分无异,是利用数据分布的规律来定查找点,其基本假设是数据分布均匀
- 利用均匀分布和中心极限定理产生正态分布(高斯分布)
- MATLAB产生连续均匀分布的随机数组——unifrnd
- MATLAB产生连续均匀分布的随机数组——unifrnd
- c版快速排序 + 随机产生一组测试数据
- [整理] 利用R生成随机分布的…
- android textview 利用空格实现文字均匀分布
- 【转】有rand7(可以随机生成1到7的数据的随机函数),如何产生rand10(随机产生1-10的数)
- mock.js-无需等待,随机产生数据,让前端独立于后端进行开发
- MIT与FAIR提出「mixup」,利用数据和标签的随机线性插值提高神经网络的健壮性
- 数据分布不均匀走HASH JOIN导致的性能问题
- 利用Random类来产生5个20~50之间的随机整数
- 产生不重复的随机数据
- 【python】python中的print函数以及产生随机数据的方式
- 产生a到b之间均匀分布的随机数
- 单片机 利用C语言产生正弦波DA数据
- 【算法设计-随机算法】利用随机算法生成均匀随机排序数组
- 利用Random类产生5 个1-30之间(包括1和20)的随机整数。
- 利用Random类产生5 个1-30之间(包括1和20)的随机整数。