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→x=(1,0,0,0,0,0)
x=2→x=(0,1,0,0,0,0)
⋮
x=6→x=(0,0,0,0,0,1)
- 화살표 오른쪽에 있는 vector표현이 바로 one-hot encoding 임.
- x=(x1,x2,x3,x4,x5,x6)으로 일반형으로 표현됨.
- xi는 0 or 1 만을 가질 수 있음.
- K∑i=1xi=1이 성립.
즉, K class인 경우, x는 K개의 element를 가지며, 오직 한 element만 1이고, 나머진 0을 가짐. - $x_i$는 일종의 Bernoulli random variable이라고 볼 수 있으며, 각각의 xi는 Bernoulli distribution을 따르므로 1이 될 확률 μi를 가짐.
- xi들을 한꺼번에 vector x로 표현하는 것처럼, μi들을 모아 vector μ로 표현함 (vector 표현이 보다 일반적임.
- μ=(μ1,μ2,μ3,⋯,μK)
- vector μ는 Categorical distribution의 parameter임.
- vector μ는 다음의 조건을 만족함.
- μi는 0 이상, 1이하의 값을 가짐 (xi와 달리 연속변수임).
- K∑i=1μi=1이 성립. μi는 i 번째 class에 속할 확률을 의미.
Categorical Distribution
Bernoulli distirbution에서 random variable이 0과 1만을 가지는 것을 1~ K 의 integer값을 가지도록 확장한 것.
수식으로 다음과 같이 표현됨.
X∼Cat(x;μ)&∼Cat(x1,x2,⋯,xK;μ1,μ2,⋯,μK)
- xi: 카테고리 i에 대한 Bernoulli random variable. : 0 or 1을 가질 수 있음.
PMF
Probability Mass Function은 다음과 같음.
$$
\text{Cat}(\textbf{x};\mu)=\left{ μ1if x=(1,0,⋯,0)mu2if x=(0,1,⋯,0)vdots⋮muKif x=(0,0,⋯,1) \right.
$$
one-hot encoding을 사용했기 때문에 다음과 같은 축약형이 가능함.
Cat(x;μ)=μx11μx22⋯μxKK=K∏i=1μxii
Moment
sample value가 vector이므로, moment도 vector임.
moment의 각 element는 다음과 같음 (참고: Bernoulli distribution)
expected value
E[xi]=μi
variance
Var[μi]=μi(1−μ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 |