결과가 0이나 1 둘 중 하나인 경우, p의 확률로 1이 나오고 1-p의 확률로 0이 나온다. 이항분포의 특수한 경우로 볼 수 있다. 파라미터로는 확률 p가 있다.
예: 코인을 던져 앞면이 나오면 1 뒷면이 나오면 0인 경우는
p=0.5인 베르누이 분포
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns
X=np.random.binomial(n=1,p=0.5,size=200)
fig ,axes = plt.subplots(1,1,figsize=(12,7),dpi=150)
sns.countplot(X,color='royalblue',ax=axes)
plt.show()
이항분포의 특수한 케이스이기 때문에 코드에서도 이항분포를 의미하는 binomial 함수를 쓰는 것을 알 수 있다.
n번의 독립적인 시행에서 각각이 p의 확률을 가지는 분포, n=1일 경우가 베르누이 분포이다. 파라미터로는 시행횟수 n, 확률 p가 있다.
예: 주사위를 10번 굴려 1번 눈이 나오는 횟수를 세는 경우는 n=10, p=1/6인 이항 분포이다.
X=np.random.binomial(n=10,p=1/6,size=1000)
fig ,axes = plt.subplots(1,1,figsize=(12,7),dpi=150)
sns.countplot(X,color='royalblue',ax=axes)
plt.show()
베르누이 분포의 확장으로, 각각의 카테고리는 베르누이 분포를 따르며 각각의 확률이 존재한다. 파라미터로는 카테고리 개수 a, 각각 카테고리의 확률 p_1,...,p_a가 있다.
예: 1부터 6까지의 눈이 있는 주사위를 굴리는 경우 1부터 6까지의 6개 카테고리를 가지고 각각의 확률은 1/6가 된다.
X=np.random.choice(a=6,size=600,p=[1/6 for _ in range(6)])
fig ,axes = plt.subplots(1,1,figsize=(12,7),dpi=150)
sns.countplot(X+1,color='royalblue',ax=axes)
plt.show()
이항분포의 일반화된 분포로 k개의 카테고리에 대해 n번의 독립적인 시행을 거쳐서 나온 횟수를 센다. 파라미터로는 시행횟수 n, 카테고리 개수 k, 각각 카테고리의 확률 p_1,...,p_k가 있다.
k=2 n=1인 다항 분포의 경우, 베르누이 분포와 동일하다.
k=2 n>1인 다항 분포의 경우, 이항 분포와 동일하다.
k>2 n=1인 다항 분포의 경우, 카테고리 분포와 동일하다.
베르누이 분포와 이항 분포 사이의 관계는 카테고리 분포와 다항 분포 사이의 관계와 동일하며 이는 아래 그래프를 통해서도 알 수 있다.
예: 주사위를 10번 굴려 각각의 눈이 나오는 횟수를 세는 경우는 n=10, k=6, p_1,...,p_6=1/6인 다항분포이다.
X=np.random.multinomial(n=10,size=1000,pvals=[1/6 for _ in range(6)])
num=X.transpose()
fig ,axes = plt.subplots(2,3,figsize=(12,7),dpi=150)
axes=axes.flatten()
colors = ["#3a57b8","#4169e1","#6e80e7","#8f98ec","#aeb1f1","#cacaf6"]
for i in range(6):
axes[i].set_title(f"the number of {i+1}",fontweight="semibold")
sns.countplot(num[i],color=colors[i],ax=axes[i])
plt.show()
다항 분포에서 각각의 주사위 눈금별 분포는, 2에서 확인한 이항 분포와 모습이 같다.