二项分布
随机变量是一种映射关系.还是以上一节投掷硬币情况为例
$$X=\begin{cases}
0& \text{全为正面},\\
1& \text{有$1$次为正面},\\
2& \text{有$2$次为正面},\\
3& \text{有$3$次为正面},\\
4& \text{有$4$次为正面},\\
5& \text{全不为正面}.
\end{cases}$$
把上概率整理如下图表:
事件 | 值 | 事件 | 值 |
---|---|---|---|
$P(X=0)$ | $\frac{1}{32}$ | $P(X=3)$ | $\frac{5}{16}$ |
$P(X=1)$ | $\frac{5}{32}$ | $P(X=4)$ | $\frac{5}{32}$ |
$P(X=2)$ | $\frac{5}{16}$ | $P(X=5)$ | $\frac{1}{32}$ |
如果投掷的次数非常的多,把它们的概率值用曲线描出来,就是一根钟形曲线.
在离散中是二项分布,在连续中它是正态分布.
人们经常对特定事物进行假设(很多时候我们无法知道事物机理),假设很多随机事物在进行,把这些随机事件加起来,就像掷硬币数正面这样(假设为事件的发生符合二项分布或正态分布).
在绘制第二张图表的代码中,你会发现我定义了一个函数,而不是一个一个枚举出对应的概率值,这说明它是可以被总结出公式的.
还记得上一节我在最后的$P(X=5)$求解时,把系数(后面是每次独立发生的概率值)写了$C_5^5$吗?
$C_n^m$表示从$n$个元素中挑选出$m$个元素(无序)的可能.(也可以理解为从$n$次实验中发生$m$次同事件的可能)
二项式系数公式
$$(_m^n)=C_n^m = \frac{n!}{m!(n-m)!}$$
也可以继续上一节那个分析,$\frac{A_n^m}{A_m^m}$记为$C_n^m$
有了二项式系数其实就是从$n$次实验中发生$m$次同事件的可能种类数,然后它乘一每次事件的概率就是我们求的$P(X=m)$.
那么二项式分布$X~B(n,p)$的公式就来了:
$$P(k,n,p) = P(X=k) = (_k^n)p^k(1-P)^{n-k}$$
投掷5次硬币的代码
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axisartist.axislines import SubplotZero
x = np.arange(0, 6, 1)
y = [1/32, 5/32, 10/32, 10/32, 5/32, 1/32]
xticks = np.arange(0, 6, 1)
yticks = ['1/32', '5/32', '10/32', '10/32', '5/32', '1/32']
fig = plt.figure(figsize=(7, 5), dpi=120, facecolor='#FF9966', edgecolor='c')
ax1 = SubplotZero(fig, 1, 1, 1, axisbg='#FF9966')
fig.add_subplot(ax1)
ax1.grid(axis='y', color='c', linestyle='-.')
ax1.axis['right', 'top'].set_visible(False)
plt.yticks(y[:3],yticks[:3])
plt.xticks(xticks)
plt.ylim(0, 5/16+0.08)
plt.xlim(-1, 6)
width = 0.96
ax1.bar(x-width/2, y, width, color='m', alpha=0.3, yerr=0.01,error_kw={'ecolor': '0.3'},)
for s, f, i in zip(yticks, y, x):
ax1.annotate(s, xy=(i-0.3, f+0.012))
plt.show()
增加投掷次数的代码
import numpy as np
from math import factorial
import matplotlib.pyplot as plt
from mpl_toolkits.axisartist.axislines import SubplotZero
def binomial(n, k):
return factorial(n) / (factorial(k) * factorial(n - k) * pow(2, n))
x = np.arange(0, 101, 1)
n = np.zeros(len(x))
n += len(x)-1
y = [binomial(n, k) for n, k in zip(n, x)]
fig = plt.figure(figsize=(7, 5), dpi=120, facecolor='#FF9966', edgecolor='c')
ax1 = SubplotZero(fig, 1, 1, 1, axisbg='#FF9966')
fig.add_subplot(ax1)
ax1.grid(axis='y', color='c', linestyle='-.')
ax1.axis['right', 'top'].set_visible(False)
plt.xlim(30, 70)
width = 0.96
ax1.bar(x-width/2, y, width, color='m', alpha=0.2)
ax1.plot(x, y, 'b--')
plt.show()
博主个人能力有限,错误在所难免.
如发现错误请不要吝啬,发邮件给博主更正内容,在此提前鸣谢.
Email: JentChang@163.com (来信请注明文章标题,如果附带链接就更方便了)
你也可以在下方的留言板留下你宝贵的意见.