Up

ディリクレ分布散布図

 

ディリクレ分布からのサンプリングの散布図を描いてみた。ディリクレ分布(Dirichlet distribution)は、和が1であるK個の非負の確率変数の分布であり、密度関数は次式で与えられる(Gelman et al., 2014)。

ここで、

である。このとき、

である。

多項分布

について考える。ディリクレ分布(1)を事前分布としたときの事後分布は次氏で与えられる。

ディリクレ分布のパラメータが、

に更新された形である(共役事前分布)。このことから、ディリクレ分布のパラメータは、多項分布の何らかの事前データを反映していると解釈されることがある。

3次元ディリクレ分布からのサンプリングを図示するプログラムを作成してみた。

 

import numpy.random as nprn

import matplotlib.pyplot as plt

import pandas as pd

import seaborn as sb

import numpy as np

 

print('Set the three positive values, a1, a2, a3...')

a1 = float(input('a1 = '))

a2 = float(input('a2 = '))

a3 = float(input('a3 = '))

 

raw_data = nprn.dirichlet([a1, a2, a3], 5000)

data = pd.DataFrame({'theta_1': raw_data.T[0], 'theta_2': raw_data.T[1],

                        'theta_3': raw_data.T[2]})

pg = sb.pairplot(data)

plt.show()

 

 

p1 = np.array([0.0, (3.0**0.5) - 1.0])

p2 = np.array([-1.0, -1.0])

p3 = np.array([1.0, -1.0])

plt.figure(figsize = (5, 5))

plt.plot([-1.0, 1.0, 0.0, -1.0],

         [-1.0, -1.0, (3.0**0.5) - 1.0, -1.0])

 

 

points = []

for t1, t2, t3 in raw_data:

    points.append(p1 * t1 + p2 * t2 + p3 * t3)

points = np.array(points)

plt.title('a = [{0}, {1}, {2}]'.format(a1, a2, a3), fontsize = 16)

plt.xlim(-1.2, 1.2)

plt.ylim(-1.2, 1.2)

plt.scatter(points.T[0], points.T[1], edgecolors = '#ffffff', alpha = 0.5)

plt.text(p1[0]-0.1, p1[1]+0.1, 'P1', fontsize = 16)

plt.text(p2[0]-0.1, p2[1]-0.15, 'P2', fontsize = 16)

plt.text(p3[0], p3[1]-0.15, 'P3', fontsize = 16)

plt.xticks([])

plt.yticks([])

plt.show()

 

上のプログラムのファイルは、圧縮ファイルprgs.zipとしてまとめた。

上のスクリプトを実行すると、パラメータの3つの値(a1a2a3)の入力が求められる(図1)。

図1

 

3つの値の入力後、5000組のサンプリングが次のコードによって行われる。

raw_data = nprn.dirichlet([a1, a2, a3], 5000)

サンプリング結果をpandasDataFrameに変換した後、ペアプロットを

pg = sb.pairplot(data)

と行うと図2のグラフが表示される。

図2

 

図1では、

の設定でのディリクレ分布(1)が描かれている。

図1のウィンドウをクリックしてアクティブにしてから右上のX印をクリックして閉じると、次に図3のグラフが表示される。

図3

 

図3は、三角形の3つの頂点P1P2P3に対して、ディリクレ分布からのサンプリングを重みとする加重平均

を求めプロットしたものである。点が三角形内に一様に分布していることが分かる。頂点から離れている点は、その頂点の表すパラメータ値、P1なら、の値が0に近いことを表すので、三角形内に一様に点が散らばっていることは、パラメータ値が0に近づくほど密度が高いことを意味する。これは、図2の対角上に描かれているヒストグラムが単調に減少しているグラフであることに対応している。

ディリクレ分布のパラメータ値を変えてグラフを描いてみる。

として描くと図4、図5を得る。

図4

 

図5

 

点が三角形の真ん中に集まっていることがわかる。

 

として実行すると、図6、図7を得る。

図6

 

図7

 

点がP1から離れ、P3に近づいていることがわかる。すなわち、の値が他のパラメータ値より小さいとも小さくなる傾向があり、他のパラメータより値の大きいに対応するの値は大きくなる傾向がある。

 

参考文献

Gelman, A., Carlin, J. B., Stern, H. S., Dunson, D. B., Vehtari, A., & Rubin, D. B. (2014). Bayesian Data Analysis, third edition. CRC Press.

 

Up