Categorical Distribution
일반적으로 multi-class classification (다중분류문제)에서 사용되는 확률분포.
Categorical Random Variable
$K$개의 정수값 중 하나를 가질 수 있는 확률변수.
- 이때 가질 수 있는 $K$개의 정수값은 각각 class (또는 category) 에 해당함. → $K=2$인 경우, Bernoulli Random Variable과 동일.
- one-hot encoding을 사용하여 sample value가 vector로 나옴 → moment들도 모두 vector임.
대표적으로 주사위 던지기를 들 수 있고, 이때 $K=6$ 임.
주사위 예
$x=1 \rightarrow \textbf{x}=(1,0,0,0,0,0)$
$x=2 \rightarrow \textbf{x}=(0,1,0,0,0,0)$
$\vdots$
$x=6 \rightarrow \textbf{x}=(0,0,0,0,0,1)$
- 화살표 오른쪽에 있는 vector표현이 바로 one-hot encoding 임.
- $\textbf{x}=(x_1,x_2,x_3,x_4,x_5,x_6)$으로 일반형으로 표현됨.
- $x_i$는 0 or 1 만을 가질 수 있음.
- $\displaystyle \sum^K_{i=1}x_i = 1$이 성립.
즉, $K$ class인 경우, $\textbf{x}$는 $K$개의 element를 가지며, 오직 한 element만 1이고, 나머진 0을 가짐. - $x_i$는 일종의 Bernoulli random variable이라고 볼 수 있으며, 각각의 $x_i$는 Bernoulli distribution을 따르므로 1이 될 확률 $\mu_i$를 가짐.
- $x_i$들을 한꺼번에 vector $\textbf{x}$로 표현하는 것처럼, $\mu_i$들을 모아 vector $\mu$로 표현함 (vector 표현이 보다 일반적임.
- $\mu=(\mu_1, \mu_2, \mu_3, \cdots, \mu_K)$
- vector $\mu$는 Categorical distribution의 parameter임.
- vector $\mu$는 다음의 조건을 만족함.
- $\mu_i$는 0 이상, 1이하의 값을 가짐 ($x_i$와 달리 연속변수임).
- $\displaystyle \sum^K_{i=1} \mu_i = 1$이 성립. $\mu_i$는 $i$ 번째 class에 속할 확률을 의미.
Categorical Distribution
Bernoulli distirbution에서 random variable이 0과 1만을 가지는 것을 1~ $K$ 의 integer값을 가지도록 확장한 것.
수식으로 다음과 같이 표현됨.
$$
\begin{aligned}\textbf{X}&\sim \text{Cat}(\textbf{x};\mu)\&\sim \text{Cat}(x_1,x_2,\cdots,x_K;\mu_1,\mu_2,\cdots,\mu_K)\end{aligned}
$$
- $x_i$: 카테고리 $i$에 대한 Bernoulli random variable. : 0 or 1을 가질 수 있음.
PMF
Probability Mass Function은 다음과 같음.
$$
\text{Cat}(\textbf{x};\mu)=\left{ \begin{matrix} \mu_1 & \text{if } \textbf{x}=(1,0,\cdots,0)\\mu_2& \text{if }\textbf{x}=(0,1,\cdots,0)\\vdots & \vdots\\mu_K & \text{if }\textbf{x}=(0,0,\cdots,1) \end{matrix} \right.
$$
one-hot encoding을 사용했기 때문에 다음과 같은 축약형이 가능함.
$$
\text{Cat}(\textbf{x};\mu)=\mu_1^{x_1}\mu_2^{x_2}\cdots\mu_K^{x_K}=\prod_{i=1}^{K}\mu_i^{x_i}
$$
Moment
sample value가 vector이므로, moment도 vector임.
moment의 각 element는 다음과 같음 (참고: Bernoulli distribution)
expected value
$$
E[x_i]=\mu_i
$$
variance
$$
\text{Var}[\mu_i]=\mu_i(1-\mu_i)
$$
scipy.stats.multinomial
multinomial
은
사실 Multinomial distribution(다항분포)를 위한 것이나,
시행횟수 $N$이 1인 경우 Categorical Distibution이 됨.
(Bernoulli distribution과 Binomial distribution의 관계와 같음)
import numpy as np
import scipy
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
mu = [0.1,0.2,0.2,0.2,0.2,0.1]
N = 1
rv = scipy.stats.multinomial(N, mu)
candidates = np.arange(1,7)
candidates_onehot = pd.get_dummies(candidates)
plt.bar(candidates, rv.pmf(candidates_onehot.values))
plt.ylabel('p(x)')
plt.xlabel('sample value')
plt.title('PMF of Categorical Distribution')
plt.show()
결과
rvs
를 통한 sampling
np.random.seed(973037)
x = rv.rvs(100)
print(x[:3])
[[0 1 0 0 0 0] [0 0 0 0 1 0] [0 0 0 0 1 0]]
Simulation
measured = x.sum(axis=0) / float(len(x))
plt.bar(candidates, measured)
plt.title('simulation of Categorical distribution')
plt.xlabel('sample value')
plt.ylabel('ratio')
plt.show()
결과
Ideal vs. Simulation
df = pd.DataFrame({'ideal': rv.pmf(candidates_onehot.values), 'measured':measured})
df.index = candidates
df2 = df.stack().reset_index()
df2.columns = ['sample value','type','ratio']
#df2.pivot('sample value','type','ratio')
sns.barplot(x='sample value', y='ratio', hue='type', data=df2)
plt.title('ideal vs. measured')
plt.show()
결과
'... > Math' 카테고리의 다른 글
[Math] Optimization Problem 의 종류 (0) | 2024.06.01 |
---|---|
[Math] Optimization 이란 (Introduction) (0) | 2024.06.01 |
[Math] Multinomial Distribution (다항분포) (0) | 2024.05.22 |
[Math] Probability Distribution (0) | 2024.04.18 |
[Math] 확률에서 Partition: Mutually Exclusive and Exhaustive (0) | 2024.04.18 |