からっぽのしょこ

読んだら書く!書いたら読む!同じ事は二度調べ(たく)ない

混合ポアソン分布の定義式の導出

はじめに

 機械学習や統計学で登場する各種の確率分布について、「計算式の導出・計算のスクラッチ実装・計算過程や結果の可視化」などの「数式・プログラム・図」を用いた解説により、様々な角度から理解を目指すシリーズです。

 この記事では、混合ポアソン分布の定義について数式を使って確認します。

【前の内容】

www.anarchive-beta.com

【他の内容】

www.anarchive-beta.com

【今回の内容】

混合ポアソン分布の定義式の導出

 混合ポアソン分布(mixture Poisson distribution)の定義式を確認します。
 ポアソン分布については「ポアソン分布の定義式 - からっぽのしょこ 」、カテゴリ分布については「カテゴリ分布の定義式 - からっぽのしょこ」を参照してください。

確率分布の定義式

 複数のクラスタ(クラス)のポアソン分布と各クラスタの重みを線形結合した分布を混合ポアソン分布と呼びます。

 ポアソン分布は、パラメータ  \lambda を用いて、次の式で定義されます。

 \displaystyle
\mathrm{Poisson}(x \mid \lambda)
    = e^{-\lambda}
      \frac{\lambda^x}{x!}

 ここで、 x は単位時間における事象の発生回数、 \lambda は発生回数の期待値を表します。 x は0以上の整数  x \in \{0, 1, 2, \cdots\} をとり、 \lambda は0より大きい値  \lambda \gt 0 を満たす必要があります。
 また、 e はネイピア数、 x! x の階乗です。
 詳しくは「ポアソン分布の定義式」を参照してください。

 クラスタ数を  K として、クラスタ番号(インデックス)を  k \in \{1, 2, \dots, K\} で表します。

 クラスタ  k のポアソン分布のパラメータを  \lambda_k で表します。
 クラスタごとにパラメータを持ち、 K 個のパラメータをパラメータ集合  \boldsymbol{\lambda} として扱います。

 \displaystyle
\boldsymbol{\lambda}
    = \{\lambda_1, \lambda_2, \cdots, \lambda_K\}

  \boldsymbol{\lambda} の各要素はポアソン分布のパラメータなので、0より大きい値を満たす必要があります。

 \displaystyle
\lambda_k \gt 0

 クラスタ  k のポアソン分布を、次の式で表します。

 \displaystyle
\mathrm{Poisson}(x \mid \lambda_k)
    = e^{-\lambda_k}
      \frac{\lambda_k^x}{x!}


 クラスタ  k となる(割り当てられる)確率(選ばれやすさ)を  \pi_k で表します。
 各クラスタに対応する  K 個の割り当て確率をまとめて、 k 次元ベクトル  \boldsymbol{\pi} で表します。

 \displaystyle
\boldsymbol{\pi}
    = (\pi_1, \pi_2, \cdots, \pi_K)

  \boldsymbol{\pi} を混合比率と呼び、カテゴリ分布のパラメータとして用います。
  \boldsymbol{\pi} はカテゴリ分布のパラメータなので、非負の値であり、総和(全てのクラスタに関する和)が1になる条件を満たす必要があります。

 \displaystyle
0 \leq \pi_k \leq 1
,\ 
\sum_{k=1}^K \pi_k
    = 1

  \pi_k は、クラスタ  k の重み(割引率)と言えます。

 続いて、変数  x のクラスタについての2種類の表記による数式表現を確認していきます。

スカラの場合

 スカラの潜在変数を用いてクラスタを表現する場合を確認します。

 変数  x のクラスタをスカラ  s で表します。 s の値としてクラスタ番号  k をとることで、 x に割り当てられたクラスタを表します。

 \displaystyle
s \in \{1, 2, \dots, K\}

 クラスタ  s k であることを明示的に  s = k と表記することもあります。クラスタは観測できないデータであるため、潜在変数と呼ばれます。
 クラスタ  s (  s k となる確率)は、パラメータ  \boldsymbol{\pi} のカテゴリ分布に従うとします。

 \displaystyle
\begin{aligned}
p(s = k \mid \boldsymbol{\pi})
   &= \mathrm{Categorical}(k \mid \boldsymbol{\pi})
\\
   &= \pi_k
\end{aligned}

 詳しくは「カテゴリ分布の定義式」を参照してください。

 クラスタ  s = k が与えられた(条件とする)ときの  x の条件付き分布は、クラスタ  k のポアソン分布が対応します。

 \displaystyle
p(x \mid s = k, \lambda_k)
    = \mathrm{Poisson}(x \mid \lambda_k)


 クラスタに関して周辺化した  x の周辺分布は、次の式になります。

 \displaystyle
\begin{aligned}
p(x \mid \boldsymbol{\lambda}, \boldsymbol{\pi})
   &= \sum_{k=1}^K
          p(x, s = k \mid \lambda_k, \boldsymbol{\pi})
\\
   &= \sum_{k=1}^K
          p(s = k \mid \boldsymbol{\pi})
          p(x \mid s = k, \lambda_k)
\\
   &= \sum_{k=1}^K
          \pi_k
          \mathrm{Poisson}(x \mid \lambda_k)
\end{aligned}

途中式の途中式(クリックで展開)


  • 1: 観測変数  x と潜在変数  s の結合分布に対して、 s に関して周辺化した式を立てます。
  • 2: 条件付きの乗法定理  p(x, y \mid z) = p(x \mid y, z) p(y \mid z) より、 x, s の項を分割します。
  • 3: ここまでの設定より、確率分布の項を置き換えます。

  x の周辺分布の式が得られました。全てのクラスタを考慮した  x の生成分布と言えます。

one-hotベクトルの場合

 one-hot表現(1-of-K符号化法)のベクトルの潜在変数を用いてクラスタを表現する場合を確認します。

 変数  x のクラスタを  K 次元ベクトル  \mathbf{s} で表します。

 \displaystyle
\mathbf{s}
    = (s_1, s_2, \cdots, s_K)

  \mathbf{s} の各要素は0か1の2値をとり、1つの要素のみが  1 でその他の要素は  0 をとります。

 \displaystyle
s_k \in \{0, 1\}
,\ 
\sum_{k=1}^K s_k
    = 1

  s_k = 1 のときクラスタ  k (値が1の要素番号でクラスタ)を表します。このような表現方法をone-hot表現や1-of-K符号化法と呼びます。
 クラスタ  \mathbf{s} は、パラメータ  \boldsymbol{\pi} のカテゴリ分布に従うとします。

 \displaystyle
\begin{aligned}
p(\mathbf{s} \mid \boldsymbol{\pi})
   &= \mathrm{Categorical}(\mathbf{s} \mid \boldsymbol{\pi})
\\
   &= \prod_{k=1}^K
          \pi_k^{s_k}
\end{aligned}

 クラスタ  k (  s_k 1 )となる確率は、次の式になります。

 \displaystyle
\begin{align*}
p(s_k = 1, \mathbf{s}_{\backslash k} \mid \boldsymbol{\pi})
   &= \prod_{k'=1}^K
          \pi_{k'}^{s_{k'}}
\\
   &= \pi_1^{s_1}
      * \cdots
      * \pi_k^{s_k}
      * \cdots
      * \pi_K^{s_K}
\\
   &= \pi_1^0
      * \cdots
      * \pi_k^1
      * \cdots
      * \pi_K^0
\\
   &= 1
      * \cdots
      * \pi_k
      * \cdots
      * 1
\\
   &= \pi_k
\\
   &= p(s_k = 1 \mid \boldsymbol{\pi})
\tag{1}
\end{align*}

途中式の途中式(クリックで展開)


  • 1:  s_k = 1 の場合を考えます。
  • 2:  k' に関する総乗  \prod_{k'=1}^K を展開します。
  • 3:  s_k = 1, s_{k'} = 0\ (k' \neq k) を代入します。
  • 4-5: 指数の性質  x^0 = 1 より、 k 以外の項は1になり消えます。
  • 6:  s_k 以外の要素が消えたので、結合分布から取り除けます。

 ここで、 \mathbf{s} のうち  k 番目の要素  s_k 以外の要素(部分集合)を集合  \mathbf{s}_{\backslash k} = \{s_1, \cdots, s_{k-1}, s_{k+1}, \cdots, s_K\} で表します。集合全体は  \mathbf{s} = \{s_k, \mathbf{s}_{\backslash k}\} で表わせます。
 詳しくは「カテゴリ分布の定義式」を参照してください。
 「スカラの場合」の式と一致しました。

 クラスタ  \mathbf{s} が与えられた(条件とする)ときの  x の条件付き分布は、次の式で表せます。

 \displaystyle
p(x \mid \mathbf{s}, \boldsymbol{\lambda})
    = \prod_{k=1}^K
          \mathrm{Poisson}(x \mid \lambda_k)^{s_k}

 クラスタ  k (  s_k 1 )のときの  x の条件付き分布は、次の式になります。

 \displaystyle
\begin{align*}
p(x \mid s_k = 1, \mathbf{s}_{\backslash k}, \boldsymbol{\lambda})
   &= \prod_{k'=1}^K
          \mathrm{Poi}(x \mid \lambda_{k'})^{s_{k'}}
\\
   &= \mathrm{Poi}(x \mid \lambda_1)^{s_1}
      * \cdots
      * \mathrm{Poi}(x \mid \lambda_k)^{s_k}
      * \cdots
      * \mathrm{Poi}(x \mid \lambda_K)^{s_K}
\\
   &= \mathrm{Poi}(x \mid \lambda_1)^0
      * \cdots
      * \mathrm{Poi}(x \mid \lambda_k)^1
      * \cdots
      * \mathrm{Poi}(x \mid \lambda_K)^0
\\
   &= 1
      * \cdots
      * \mathrm{Poi}(x \mid \lambda_k)
      * \cdots
      * 1
\\
   &= \mathrm{Poisson}(x \mid \lambda_k)
\\
   &= p(x \mid s_k = 1, \lambda_k)
\tag{1}
\end{align*}

途中式の途中式(クリックで展開)


  • 1:  s_k = 1 の場合を考えます。
  • 2:  k' に関する総乗  \prod_{k'=1}^K を展開します。
  • 3:  s_k = 1, s_{k'} = 0\ (k' \neq k) を代入します。
  • 4-5: 0乗により、 k 以外の項は1になり消えます。
  • 6:  s_k 以外の要素が消えたので、条件から取り除けます。

 「スカラの場合」の式と一致しました。

 クラスタに関して周辺化した  x の周辺分布は、次の式になります。

 \displaystyle
\begin{aligned}
p(x \mid \boldsymbol{\lambda}, \boldsymbol{\pi})
   &= \sum_{\mathbf{s}}
          p(x, \mathbf{s} \mid \boldsymbol{\lambda}, \boldsymbol{\pi})
\\
   &= \sum_{k=1}^K
          p(x, s_k = 1, \mathbf{s}_{\backslash k} \mid \lambda_k, \boldsymbol{\pi})
\\
   &= \sum_{k=1}^K
          p(s_k = 1, \mathbf{s}_{\backslash k} \mid \boldsymbol{\pi})
          p(x \mid s_k = 1, \mathbf{s}_{\backslash k}, \lambda_k)
\\
   &= \sum_{k=1}^K
          p(s_k = 1 \mid \boldsymbol{\pi})
          p(x \mid s_k = 1, \lambda_k)
\\
   &= \sum_{k=1}^K
          \pi_k
          \mathrm{Poisson}(x \mid \lambda_k)
\end{aligned}

途中式の途中式(クリックで展開)


  • 1: 観測変数  x と 潜在変数  \mathbf{s} の結合分布に対して、 \mathbf{s} に関して周辺化した式を立てます。
  • 2:  \mathbf{s} = \{s_k, \mathbf{s}_{\backslash k}\} で分割し、 s_k = 1 の場合を考えます。
  • 3: 乗法定理より、 x, \mathbf{s} の項を分割します。
  • 4: 式(1)(2)より、式に影響しない  s_k と無関係な項を取り除きます。
  • 5: ここまでの設定より、確率分布の項を置き換えます。

 ここで、 \sum_{\mathbf{s}} \mathbf{s} の全ての組み合わせに対する和を表します。
 「スカラの場合」の式と同じく、各クラスタのポアソン分布の重み付け和の式が得られました。


 以上で、ポアソン分布の定義式を確認しました。
 周辺化の操作(計算)については「【R】混合ポアソン分布のパラメータの可視化 - からっぽのしょこ」も参考にしてください。

 この記事では、混合ポアソン分布の定義式を確認しました。次からの記事では、混合ポアソン分布について詳しくみていきます。

参考文献

おわりに

 トピックモデルシリーズの変分推論の記事の加筆修正を始めたところ、思いの外分かっていなかったことが多々出てきて、ベイズ推論シリーズの変分推論を読み返すことにし、さらに確率分布シリーズのポアソン分布関連の記事まで戻ってきました。その全てを書き直したい(書き直さないと変分推論の修正ができない気がする)なんなら新たに記事を書き足したい上に、混合ポアソン分布関連の記事も書き始めました。この記事はそんな1つ目の記事です。他の分布についても加筆修正したい気が俄かに湧いてきたのですが、はたしてどこまでやり遂げられるでしょうか。
 ただいま絶賛風呂敷を広げる期ですね、良く言えばやる気が湧いている状態です。

 2025年6月21日は、ばってん少女隊の結成10周年の記念日です!

 長年活動を続けてきてくれたメンバーの皆さん、支えてきてくれた隊員の皆さんのおかげで、私も巡り合えました🎠ありがとうございます。そして、おめでとうございます!!!
 私がばっしょーに出会ってからだとまだ1年半を過ぎたくらいなんですが、これから末永いお付き合いになればと心から思います。よろしくお願いします🌸

【次の内容】

www.anarchive-beta.com