Traffine I/O

日本語

2022-12-09

カテゴリカル分布

カテゴリカル分布とは

カテゴリカル分布とは、1回の試行で K 通りの事象 X_1, X_2, ..., X_K がそれぞれ確率 p_1, p_2, ..., p_K で得られるときに確率変数 X が従う確率分布です。

カテゴリカル分布はベルヌーイ分布K 次元に拡張した確率分布となっています。ベルヌーイ分布では事象は2つ(K=2)ですが、サイコロの目の数のような事象の数が6個(K=6)、つまり多次元の場合はカテゴリカル分布になります。

カテゴリカル分布の確率は以下の式で表されます。

P(X=x;p_1, p_2, ...,p_K) = \prod_{k=1}^K p^{x_k}_k
x_k \in \{0,1\}, \quad \sum_{k=1}^{K} x_k=1

カテゴリカル分布は Categorical(p) と表記されることもあります。

カテゴリカル分布の期待値と分散

カテゴリカル分布の期待値、分散はそれぞれ以下になります。

E(X_k)=p_k \quad (k=1,2,...,K)
V(X_k)=p_k(1-p_k) \quad (k=1,2,...,K)

Python でカテゴリカル分布を確認

Pythonでカテゴリカル分布を確認してみます。

まずはサイコロ(K=6)の例を考えます。サイコロの出る目の確率はそれぞれ \frac{1}{6} として、6000回の試行を行います。以下がPythonコードになります。

import numpy as np
import matplotlib.pyplot as plt

plt.style.use('ggplot')
fig, ax = plt.subplots(facecolor="w", figsize=(10, 5))

p = [1/6, 1/6, 1/6, 1/6, 1/6, 1/6]

data = np.random.choice([1,2,3,4,5,6], p=p, size=6000)
plt.hist(data, bins = [0.5 + v for v in range(len(p) + 1)], alpha=0.5)

Categorical distribution | 1

どの目も出現回数が1000程度になっていることが分かります。

次に、K=4 の事象があり、それぞれの確率が \frac{2}{10}\frac{1}{10}\frac{5}{10}\frac{2}{10} であるとします。この事象の観察を10000回行います。いかがPythonコードになります。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator

plt.style.use('ggplot')
fig, ax = plt.subplots(facecolor="w", figsize=(10, 5))
ax.xaxis.set_major_locator(MaxNLocator(integer=True))

p = [2/10, 1/10, 5/10, 2/10]

data = np.random.choice([1,2,3,4], p=p, size=10000)
plt.hist(data, bins = [0.5 + v for v in range(len(p) + 1)], alpha=0.5)

Categorical distribution | 2

確率通りの分布になっていることが分かります。

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!