常见分布1、泊松分布2、二项分布3、正态分布4、多项分布(二项分布推广)5、二维正态分布

2018-06-01 16:49:53 浏览数 (3)

1、泊松分布

泊松分布适合于描述单位时间(或空间)内随机事件发生的次数。如某一服务设施在一定时间内到达的人数,电话交换机接到呼叫的次数,汽车站台的候客人数,机器出现的故障数,自然灾害发生的次数,一块产品上的缺陷数,显微镜下单位分区内的细菌分布数等等。

期望

2、二项分布

二项分布就是重复n次独立的伯努利试验。在每次试验中只有两种可能的结果,而且两种结果发生与否互相对立,并且相互独立,与其它各次试验结果无关,事件发生与否的概率在每一次独立试验中都保持不变,则这一系列试验总称为n重伯努利实验,当试验次数为1时,二项分布服从0-1分布。

期望

代码语言:javascript复制
from scipy.special import perm
from scipy.special import comb

plt.figure(figsize=(16,8),dpi=98)
p1 = plt.subplot(121)
p2 = plt.subplot(122)
#p1 = plt.subplot(121,aspect=5/2.5)
#p2 = plt.subplot(122,aspect=0.5/0.05)

I = range(30)
mu = 10
pi = [np.exp(-mu)*mu**i/np.math.factorial(i) for i in I]
p1.plot(I, pi, 'r')

def plotnp(pindex,n, mu, style, lable):
    p = 1.0*mu/n
    b = [comb(n,i)*p**i*(1-p)**(n-i) for i in I]
    pindex.plot(I, b, style, label=lable,linewidth=2)

plotnp(p1,50, 10, 'b--', 'n=50')
plotnp(p1,100, 10, 'g-.', 'n=100')
plotnp(p1,200, 10, 'b-.', 'n=200')
plotnp(p1,1000, 10, 'g:', 'n=1000')
p1.legend()
# plot the box
tx0 = 7
tx1 = 13
ty0 = 0.1
ty1 = 0.15
sx = [tx0,tx1,tx1,tx0,tx0]
sy = [ty0,ty0,ty1,ty1,ty0]
p1.plot(sx,sy,"purple")

I = range(7,13)
pi = [np.exp(-mu)*mu**i/np.math.factorial(i) for i in I]
p2.plot(I, pi, 'r')

plotnp(p2,50, 10, 'b--', 'n=50')
plotnp(p2,100, 10, 'g-.', 'n=100')
plotnp(p2,200, 10, 'b-.', 'n=200')
plotnp(p2,1000, 10, 'g:', 'n=1000')
p2.legend()

xy=(13,0.12)
xy2 = (6.9,0.125)
con = ConnectionPatch(xyA=xy2,xyB=xy,coordsA="data",coordsB="data",
        axesA=p2,axesB=p1)
p2.add_artist(con)

plt.show()

上图中泊松分布λ=10,二项分布固定np=λ=10,一般在λ概率取的最值,当n趋向∞时,图中n=1000已经非常逼近泊松分布(红色线)。

3、正态分布

正态分布(Normal distribution),也称“常态分布”,又名高斯分布(Gaussian distribution),最早由A.棣莫弗在求二项分布 的渐近公式中得到。C.F.高斯在研究测量误差时从另一个角度导出了它。P.S.拉普拉斯和高斯研究了它的性质。是一个在数学、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力。

密度函数

若随机变量X服从一个数学期望为μ、方差为σ2的正态分布,记为N(μ,σ2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。

代码语言:javascript复制
import numpy as np

def fun(x, mu=0, sigma=1):
    return 1.0/(np.sqrt(2*np.pi)*sigma)*np.exp(-(x-mu)**2/(2*(sigma**2)))

mu = 50
x = np.linspace(0,2*mu,2*mu)

plt.plot(x, fun(x,mu, np.sqrt(mu)))

I = range(2*mu)
pi = [np.exp(-mu)*mu**i/np.math.factorial(i) for i in I]
plt.plot(I, pi, 'r')
plt.show()

泊松分布均值与方差都是λ图中&lambda=50,非常逼近正态分布均值μ=50,方差=50,泊松分布的极限分布是正态分布,这样可以用正态分布近似泊松分布。

4、多项分布(二项分布推广)

某随机实验如果有k个可能结局A1、A2、…、Ak,分别将他们的出现次数记为随机变量X1、X2、…、Xk,它们的[概率分布]分别是p1,p2,…,pk,那么在n次采样的总结果中,A1出现n1次、A2出现n2次、…、Ak出现nk次的这种事件的出现概率P有下面公式:

比如掷骰子会有6中结果,每种结果概率都是1/6,假如我掷6次,各数字都出现一次的概率是多少 p(X1=1,X2=1...X6=1)=6!*1/6 * 1/6... * 1/6

5、二维正态分布

密度函数

代码语言:javascript复制
fig = plt.figure()  
ax = Axes3D(fig)  

x, y = np.mgrid[-5:5:.1, -5:5:.1]
pos = np.empty(x.shape   (2,))
print pos.shape
pos[:, :, 0] = x; pos[:, :, 1] = y
# 函数参数是均值[0,0],与协方差矩阵[[2.0, 0.3], [0.3, 0.5]]
rv = multivariate_normal([0, 0], [[2.0, 0.3], [0.3, 0.5]])
ax.contourf(x, y, rv.pdf(pos),zdir='z',offset=0)
ax.plot_surface(x, y, rv.pdf(pos) 0.1, rstride=1, cstride=1, cmap=plt.cm.RdBu)  
plt.show()

下面是使用stats软件函数

代码语言:javascript复制
mu = 0
sigma = 1
x = np.arange(-5,5,0.1)
y = stats.norm.pdf(x, mu, sigma)
plt.plot(x,y)
plt.title("Normal:$mu$=%.1f, $sigma^2$=%.1f" %(mu,sigma))
plt.xlabel("x")
plt.show()
代码语言:javascript复制
from scipy import stats

n =10 
p =0.3
k = np.arange(0,21)
binomial = stats.binom.pmf(k,n,p)
plt.plot(k, binomial)
plt.show()
代码语言:javascript复制
binom_sim = stats.binom.rvs(n=10,p=0.3, size = 1000)
#print binom_sim
print "Mean:%g"%np.mean(binom_sim)
print "SD:%g"%np.std(binom_sim, ddof=1)
# 这里 hist 函数的输入参数有 ages 数组、直方图的 bins 数目(即区间数,这里为 20),
# 同时,还使用了 normed=True 参数来正则化直方图,即让每个方条表示年龄在该区间内的数量占总数量的比[1]  。

plt.hist(binom_sim, bins = 10, normed= 0)
plt.xlabel("x")
plt.ylabel("density")
plt.show()

0 人点赞