二项式分布(Binomial Distribution)
二项式分布(Binomial Distribution)
定义
让我们来看看玩板球这个例子。假设你今天赢了一场比赛,这表示一个成功的事件。你再比了一场,但你输了。如果你今天赢了一场比赛,但这并不表示你明天肯定会赢。我们来分配一个随机变量X,用于表示赢得的次数。 X可能的值是多少呢?它可以是任意值,这取决于你掷硬币的次数。
只有两种可能的结果,成功和失败。因此,成功的概率 = 0.5,失败的概率可以很容易地计算得到:q = p – 1 = 0.5。
二项式分布就是只有两个可能结果的分布,比如成功或失败、得到或者丢失、赢或败,每一次尝试成功和失败的概率相等。
结果有可能不一定相等。如果在实验中成功的概率为0.2,则失败的概率可以很容易地计算得到 q = 1 - 0.2 = 0.8。
每一次尝试都是独立的,因为前一次投掷的结果不能决定或影响当前投掷的结果。只有两个可能的结果并且重复n次的实验叫做二项式。二项分布的参数是n和p,其中n是试验的总数,p是每次试验成功的概率。
在上述说明的基础上,二项式分布的属性包括:
- 每个试验都是独立的。
- 在试验中只有两个可能的结果:成功或失败。
- 总共进行了n次相同的试验。
- 所有试验成功和失败的概率是相同的。 (试验是一样的)
公式
B
i
n
o
m
(
k
∣
N
,
p
)
=
(
N
k
)
p
k
(
1
−
p
)
N
−
k
Binom(k|N,p) = {N \choose k}p^{k}(1-p)^{N-k}
Binom(k∣N,p)=(kN)pk(1−p)N−k
N
⋅
p
N \cdot p
N⋅p 表示分布的均值
-
PMF( 概率质量函数 ): 是对 离散随机变量 的定义. 是 离散随机变量 在各个特定取值的概率. 该函数通俗来说,就是 对于一个离散型概率事件来说, 使用这个函数来求它的各个成功事件结果的概率.
-
PDF ( 概率密度函数 ): 是对 连续性随机变量 的定义. 与PMF不同的是 PDF 在特定点上的值并不是该点的概率, 连续随机概率事件只能求一段区域内发生事件的概率, 通过对这段区间进行积分来求. 通俗来说, 使用这个概率密度函数 将 想要求概率的区间的临界点( 最大值和最小值)带入求积分. 就是该区间的概率.
# IMPORTS
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
import matplotlib.style as style
from IPython.core.display import HTML
# PLOTTING CONFIG
%matplotlib inline
style.use('fivethirtyeight')
plt.rcParams["figure.figsize"] = (14, 7)
plt.figure(dpi=100)
# PDF
plt.bar(x=np.arange(20),
height=(stats.binom.pmf(np.arange(20), p=.5, n=20)),
width=.75,
alpha=0.75
)
# CDF
plt.plot(np.arange(20),
stats.binom.cdf(np.arange(20), p=.5, n=20),
color="#fc4f30",
)
# LEGEND
plt.text(x=4.5, y=.7, s="pmf (normed)", alpha=.75, weight="bold", color="#008fd5")
plt.text(x=14.5, y=.9, s="cdf", alpha=.75, weight="bold", color="#fc4f30")
# TICKS
plt.xticks(range(21)[::2])
plt.tick_params(axis = 'both', which = 'major', labelsize = 18)
plt.axhline(y = 0.005, color = 'black', linewidth = 1.3, alpha = .7)
# TITLE, SUBTITLE & FOOTER
plt.text(x = -2.5, y = 1.25, s = "Binomial Distribution - Overview",
fontsize = 26, weight = 'bold', alpha = .75)
plt.text(x = -2.5, y = 1.1,
s = 'Depicted below are the normed probability mass function (pmf) and the cumulative density\nfunction (cdf) of a Binomial distributed random variable $ y \sim Binom(N, p) $, given $ N = 20$ and $p =0.5 $.',
fontsize = 19, alpha = .85)
plt.figure(dpi=100)
# PDF P = .2
plt.scatter(np.arange(21),
(stats.binom.pmf(np.arange(21), p=.2, n=20)),
alpha=0.75,
s=100
)
plt.plot(np.arange(21),
(stats.binom.pmf(np.arange(21), p=.2, n=20)),
alpha=0.75,
)
# PDF P = .5
plt.scatter(np.arange(21),
(stats.binom.pmf(np.arange(21), p=.5, n=20)),
alpha=0.75,
s=100
)
plt.plot(np.arange(21),
(stats.binom.pmf(np.arange(21), p=.5, n=20)),
alpha=0.75,
)
# PDF P = .9
plt.scatter(np.arange(21),
(stats.binom.pmf(np.arange(21), p=.9, n=20)),
alpha=0.75,
s=100
)
plt.plot(np.arange(21),
(stats.binom.pmf(np.arange(21), p=.9, n=20)),
alpha=0.75,
)
# LEGEND
plt.text(x=3.5, y=.075, s="$p = 0.2$", alpha=.75, weight="bold", color="#008fd5")
plt.text(x=9.5, y=.075, s="$p = 0.5$", alpha=.75, weight="bold", color="#fc4f30")
plt.text(x=17.5, y=.075, s="$p = 0.9$", alpha=.75, weight="bold", color="#e5ae38")
# TICKS
plt.xticks(range(21)[::2])
plt.tick_params(axis = 'both', which = 'major', labelsize = 18)
plt.axhline(y = 0, color = 'black', linewidth = 1.3, alpha = .7)
# TITLE, SUBTITLE & FOOTER
plt.text(x = -2.5, y = .37, s = "Binomial Distribution - $p$",
fontsize = 26, weight = 'bold', alpha = .75)
plt.text(x = -2.5, y = .32,
s = 'Depicted below are three Binomial distributed random variables with varying $p $. As one can see\nthe parameter $p$ shifts and skews the distribution.',
fontsize = 19, alpha = .85)
N对结果的影响
plt.figure(dpi=100)
# PDF N = 10
plt.scatter(np.arange(11),
(stats.binom.pmf(np.arange(11), p=.5, n=10)),
alpha=0.75,
s=100
)
plt.plot(np.arange(11),
(stats.binom.pmf(np.arange(11), p=.5, n=10)),
alpha=0.75,
)
# PDF N = 15
plt.scatter(np.arange(16),
(stats.binom.pmf(np.arange(16), p=.5, n=15)),
alpha=0.75,
s=100
)
plt.plot(np.arange(16),
(stats.binom.pmf(np.arange(16), p=.5, n=15)),
alpha=0.75,
)
# PDF N = 20
plt.scatter(np.arange(21),
(stats.binom.pmf(np.arange(21), p=.5, n=20)),
alpha=0.75,
s=100
)
plt.plot(np.arange(21),
(stats.binom.pmf(np.arange(21), p=.5, n=20)),
alpha=0.75,
)
# LEGEND
plt.text(x=6, y=.225, s="$N = 10$", alpha=.75, weight="bold", color="#008fd5")
plt.text(x=8.5, y=.2, s="$N = 15$", alpha=.75, weight="bold", color="#fc4f30")
plt.text(x=11, y=.175, s="$N = 20$", alpha=.75, weight="bold", color="#e5ae38")
# TICKS
plt.xticks(range(21)[::2])
plt.tick_params(axis = 'both', which = 'major', labelsize = 18)
plt.axhline(y = 0, color = 'black', linewidth = 1.3, alpha = .7)
# TITLE, SUBTITLE & FOOTER
plt.text(x = -2.5, y = .31, s = "Binomial Distribution - $N$",
fontsize = 26, weight = 'bold', alpha = .75)
plt.text(x = -2.5, y = .27,
s = 'Depicted below are three Binomial distributed random variables with varying $N$. As one can see\nthe parameter $N$ streches the distribution (the larger $N$ the flatter the distribution).',
fontsize = 19, alpha = .85)
随机样本(Random Variates)
import numpy as np
from scipy.stats import binom
# draw a single sample
np.random.seed(42)
print(binom.rvs(p=0.3, n=10), end="\n\n")
# draw 10 samples
print(binom.rvs(p=0.3, n=10, size=10), end="\n\n")
Probability Mass Function
from scipy.stats import binom
# additional imports for plotting purpose
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams["figure.figsize"] = (14,7)
# likelihood of x and y
x = 1
y = 7
print("pmf(X=1) = {}\npmf(X=7) = {}".format(binom.pmf(k=x, p=0.3, n=10), binom.pmf(k=y, p=0.3, n=10)))
# continuous pdf for the plot
x_s = np.arange(11)
y_s = binom.pmf(k=x_s, p=0.3, n=10)
plt.scatter(x_s, y_s, s=100);
Cumulative Probability Density Function
from scipy.stats import binom
# probability of x less or equal 0.3
print("P(X <=3) = {}".format(binom.cdf(k=3, p=0.3, n=10)))
# probability of x in [-0.2, +0.2]
print("P(2 < X <= 8) = {}".format(binom.cdf(k=8, p=0.3, n=10) - binom.cdf(k=2, p=0.3, n=10)))