python怎样生成正太分布的随机数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python怎样生成正太分布的随机数相关的知识,希望对你有一定的参考价值。
参考技术A 作者:采石工链接:https://www.zhihu.com/question/39823283/answer/115241445
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
一般的正态分布可以通过标准正态分布配合数学期望向量和协方差矩阵得到。如下代码,可以得到满足一维和二维正态分布的样本。希望有用,如有错误,欢迎指正!
# coding=utf-8
import numpy as np
from numpy.linalg import cholesky
import matplotlib.pyplot as plt
sampleNo = 1000;
# 一维正态分布
# 下面三种方式是等效的
mu = 3
sigma = 0.1
np.random.seed(0)
s = np.random.normal(mu, sigma, sampleNo )
plt.subplot(141)
plt.hist(s, 30, normed=True)
np.random.seed(0)
s = sigma * np.random.randn(sampleNo ) + mu
plt.subplot(142)
plt.hist(s, 30, normed=True)
np.random.seed(0)
s = sigma * np.random.standard_normal(sampleNo ) + mu
plt.subplot(143)
plt.hist(s, 30, normed=True)
# 二维正态分布
mu = np.array([[1, 5]])
Sigma = np.array([[1, 0.5], [1.5, 3]])
R = cholesky(Sigma)
s = np.dot(np.random.randn(sampleNo, 2), R) + mu
plt.subplot(144)
# 注意绘制的是散点图,而不是直方图
plt.plot(s[:,0],s[:,1],'+')
plt.show()
正太分布
概率密度函数
在正态分布中,通过查看某个值在 x 轴上的位置,即标准偏差,我们能够确定小于或大于任何值的百分比,接下来将学习如何计算这些百分比。请注意,我们使用的是理论曲线来绘制数据模型,该曲线下的面积是 1,因为它是用分布数据的相对频率(即比例)来绘制数据模型,该曲线叫做概率密度函数,通常缩写为 PDF。
为何叫做概率密度函数呢?假设我们研究下优达学城学员的随机样本,下图是表示优达学城学员年龄的直方图,样本量是 7,901 这是实际数据。我们用该概率密度函数来绘制模型,请注意,当我们绘制模型时
我们用该概率密度函数来绘制模型,请注意,当我们绘制模型时绝对频率变成相对频率,下图绿色区域输入的是概率,根据我们的样本,大约 70% 的优达学城学员年龄等于或小于 30 岁,现在假设随机选择任何一名优达学城学员 为其分配一个唯一编号,然后我们随机选择一个编号,那么我们选择的学员的年龄等于或小于 30 岁的概率是多少?
注意,正态分布多种多样,可以是宽扁型或瘦高型,但是密度曲线下的总面积始终为 1,对于正态分布 在平均值周围 1 个标准偏差范围内的面积约为 68%,平均值周围 2 个标准偏差范围内的面积约为 95%。
Facebook 好友数分布示例
假设该分布是正态分布,平均每个人有 190 个 Facebook 好友,标准偏差是 36 个 Facebook 好友,那么,多少比例的人的 Facebook 好友数少于 154?
比例是 0.16
Z表格
之前说过,如果我们拥有概率密度函数方程式,我们可以使用微积分计算出任何两个值之间或负无穷与任何值之间曲线下的面积,数学家将这些值放入了一个表格中,下图是该表格的前部分内容 右上角有个小图表,表示如果给出 z 值,该表格中的数值会告诉你在标准正态曲线中,小于该 z 值的比例是多少,该表格是针对标准正态分布的,也就是平均值为 0,标准偏差是 1。下面是Z表格的连接
https://s3.amazonaws.com/udacity-hosted-downloads/ZTable.jpg
使用 z 表格得出少于 240 个 Facebook 好友的大概比例
91.77% 我们首先需要将 240 转换为 z 值,也就是我们要算出 240 距离平均值190 有多少个标准偏差,应该等于一点几,首先算出 190 和 240 之间的距离,然后除以标准偏差,算出该距离等于多少个标准偏差,结果大概是 1.39,我们需要四舍五入到百分位,因为 z 表格最多只精确到百分位,所以我们的 z 值是 1.39,拿出 z 表格,首先找到 1.3,然后找到 0.09 是最后一列,得出小于 1.39 个标准偏差的面积是 0.9177,意味着大约 91.77% 的人 Facebook 好友数不到 240 个,注意,整个过程都是假设这是正态分布 平均值为 190,标准偏差是 36
以上是关于python怎样生成正太分布的随机数的主要内容,如果未能解决你的问题,请参考以下文章
tensorflow中用正太分布随机初始化网络权重参数 ---tf.random_normal