ディリクレ分布まとめ

ディリクレ分布についていまいちイメージがつかなかったのでまとめてみました.
後半では正規化項,期待値,分散の算出過程を示しています.物好きな人は御覧ください.

どんな分布?

あるn個の事象についてi番目の事象が 回発生した場合に,その事象の生起確率が である確率の分布です.
つまり,i番目の事象が 回発生したということで,各事象について生起確率を (i=1,2,…,n) と定めると,それがどれだけ正しそうかの確率を返します.
ベータ分布について理解している人はベータ分布を多変量に拡張したものと考えるとわかりやすいです.

ディリクレ分布は以下の式で表されます.

ここで, です.
ただし, の場合, でなければならないと思います.0の0乗が出てくるので.
の期待値は

分散は

となります.

最初の説明だと は0以上の整数でなければならないので,もう少し違う解釈をすると,ある標本におけるi番目の事象の生起確率が だった場合に重みγ(標本内での生起確率がどれだけ信頼できるか)を掛けた値が です.つまり です.
これで は-1より大きければ少数でも良いということになります.
ちなみに の期待値でもあります.

以上の説明から,多項分布のパラメータ(各事象の生起確率)を定めたときに,ディリクレ分布はそのパラメータの妥当性を表すことになるので,多項分布の事前確率分布としてよく利用されます.
多項分布とディリクレ分布の積はディリクレ分布の形をするので,ディリクレ分布は多項分布の共役事前分布でもあります.(事後確率分布が事前確率分布と同じ関数形になる)

3変量で分布を可視化してみる

式だけ眺めていてもイメージがつきにくいので,3変量で実際にどのような分布になるのか表示してみます.
x3=1-x1-x2より,2次元にプロットすることができます.
グラフの色のデザインはこちら (PDF) をパクらせてもらいました.
(ただ,α < 1 の場合はうまく出力できませんでした・・・)
ディリクレ分布はDir(α1, α2, α3)という表記で表現しています.

20100401152952
20100401235721
20100401235720

α1=α2=α3=1のときは一様分布になります.
αの比,つまりα1:α2:α3が同じであっても,αが大きいほど分布が密集していることがわかると思います.
分散の式を見てみると,αの増加に従って,分子がαの2乗で増加するのに対し,分母がαの3乗で増加することがわかります.
よって,αが大きければ大きいほど分散は小さくなります.
ちなみに期待値の式からもわかるように,αの比が一緒であれば期待値も同じになります.

分布の特性から直感的に説明すると,標本数が大きければ大きいほど,その標本内での生起確率は信頼のおける値になります.
つまり,標本内での生起確率は母集団の生起確率である可能性が高くなります.
最初に説明したように,標本内の生起確率は期待値でもあるので期待値付近の密度が高くなります.

このサイトではαの値の変化に合わせて分布がどのように変化するかをアニメーションで表現しているので見てみるとおもしろいかもしれません.

画像の出力に使ったRのソースコードを以下に示します.

library(MCMCpack)
library(fields)

# Dirichlet distribution over three variables
dirichlet3d <- function(n = 25, alpha = rep(1, 3)){
  gx1 <- gx2 <- seq(0, 1, len = n)  # grid
  d <- outer(gx1, gx2, dirichlet3d.each, alpha)
  d <- ifelse(d != 0, d, NA)
  class(d) <- 'dirichlet3d'
  d
}

dirichlet3d.each <- function(x1_vec, x2_vec, alpha){
  mapply(function(x1, x2, alpha) ddirichlet(c(x1, x2, abs(1 - x1 - x2)), alpha),
         x1_vec, x2_vec, MoreArgs = list(alpha = alpha))
}

plot.dirichlet3d <- function(d, ...){
  dcolor <- colorRampPalette(c("white", "yellow", "orangered", "black"))(64)
  image.plot(d, col = dcolor, xlab = 'x1', ylab = 'x2', ...)
  polygon(c(0,1,0), c(0,0,1), border="blue", lwd=3)
}


alphas <- list(rep(1, 3), rep(2, 3), rep(10, 3), c(5, 3, 2), c(50, 30, 20))
for(i in 1:length(alphas)){
  png(sprintf("dirichlet%02d.png", i), width = 300, height = 300)
  plot(dirichlet3d(100, alphas[[i]]),
       main = sprintf("Dir(%d, %d, %d)", alphas[[i]][1], alphas[[i]][2], alphas[[i]][3]))
  dev.off()
}

正規化項,期待値,分散の算出

とします.
また, と表記することにします.
はベータ関数であり, です.

正規化項

こちらを参考にしました.
参考というより,自分がわかりやすいように書き直したって感じです.

・準備
次の関係が成り立つことを証明します.

とおくと

・正規化項の算出
式展開の途中で式(1)を利用しています.
20100401212208

より,ガンマ関数に書き直すと が分子と分母で相殺されるので

期待値

分布の特性からすると,直感的に標本内での生起確率が母集団での生起確率になりそうな気がするので,期待値の式は納得のいく形になっているかと思います.

・準備1
次の関係が成り立つことを証明します.

正規化項の準備と同様にすると

・準備2
次の関係が成り立つことを証明します.

準備1と同様に

・準備補足
ベータ分布の期待値の求め方について補足しておきます.
ここの証明をちょっと変えています.

よって

・期待値の算出

の場合,途中までは正規化項の算出と全く同じように計算することができます.

とし, の積分を行うと

20100401212209

途中の展開で式(2),(3)を利用しています.

の場合も同様に計算することができます.

分散

・準備1
ベータ分布 において の期待値が以下で表されることを証明します.

ここの証明をちょっと変えています.

よって

・準備2
式(4)を使って次式を証明します.

正規化項の準備と同様にすると

同様に

・準備3
式(5),(6)を踏まえて期待値の算出と同様に式展開すると

・分散の算出

参考

広告
NMF: Non-negative Matrix Factorization(非負値行列因子分解) LaTeX数式を表示させるためのPukiWikiプラグイン
※このエントリーははてなダイアリーから移行したものです。過去のコメントなどはそちらを参照してください