Multinomial Distribution
$K$ 개 class인 Categorical Variable의
sample을 $N$개 얻을 때의
각각의 class $i$가 각각 $x_i$번 나오는 random variable $\textbf{X}$의 이산 확률 분포.
달리 말하면 $\textbf{x}$가 $(x_1, x_2, \cdots, x_K)$가 되는 확률의 분포를 가르킴.
수식으로 표현할 경우 다음과 같음.
$$
\textbf{X} \sim \text{Mul}(x;N,\mu)
$$
class가 $K$인 multinomial trial을 1회 수행한 경우의 확률변수는 Categorical distribution을 따른다고 하며,
class가 $K$인 multinomial trial을 $N$회 수행한 경우의 확률변수는 Multinomial distirbution을 따른다.
($N=1$인 경우, Multinomial distribution은 Categorical distribution임)
2024.05.22 - [.../Math] - [Math] Categorical Distribution
2023.03.14 - [.../Math] - [Math] Binomial Distribution (이항분포)
PMF 수식
$$
\begin{aligned}\text{Mul}(x;N,\mu)&=\frac{N!}{x_1!x_2!\cdots x_K!}\prod_{i=1}^K\mu_i^{x_i}\end{aligned}
$$
where
- $N!$ : factorial.
- $N! = N\cdot(N-1)\cdot(N-2) \cdots 2\cdot1$
Moment
Categorical Distribution의 moment가 vector인 것처럼,
Multinomial의 경우도 vector로 나오며, 각 element는 다음과 같음.
Expected Value (기댓값)
$$E[x_i]=N\mu_i$$
Variance (분산)
$$\text{Var}[x_i]=N\mu_i(1-\mu_i)$$
scipy.stats.binom
import scipy.stats
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
# random variable : rv
N = 30
K = 6
mu = [0.1,0.2,0.2,0.2,0.2,0.1]
rv = scipy.stats.multinomial(N, mu)
# np.random.seed(973037)
x = rv.rvs(100, random_state=973037)
print(x[:10])
import pandas as pd
df = pd.DataFrame(x)
df.columns = df.columns+1
print(df)
df2 = df.stack().reset_index()
df2.columns = ['trial #','class','count']
plt.figure(figsize=(20,10))
sns.violinplot(x='class', y='count', data=df2, color='gray')
sns.swarmplot(x='class', y='count', data=df2)
plt.show()
'... > Math' 카테고리의 다른 글
[Math] Optimization 이란 (Introduction) (0) | 2024.06.01 |
---|---|
[Math] Categorical Distribution (0) | 2024.05.22 |
[Math] Probability Distribution (0) | 2024.04.18 |
[Math] 확률에서 Partition: Mutually Exclusive and Exhaustive (0) | 2024.04.18 |
[Math] 확률의 법칙들 (0) | 2024.04.18 |