単純ベイズ:カテゴリ特徴の場合

実装の前に,特徴がカテゴリ変数である場合の単純ベイズ法による分類について,ごく簡単に復習します.

変数を次のように定義します.

  • 特徴量 \(\mathbf{x}_i=(x_{i1}, \ldots, x_{iK})\) の要素 \(x_{ij}\) はカテゴリ変数で, \(F_j\) 個の値のうちの一つをとります. ただし, \(K\) は特徴の種類数です.

  • クラス \(y\) は, \(C\) 個の値のうちの一つをとります.

ここで,特徴 \(\mathbf{X}\) は,クラス \(Y\) が与えられたとき条件付き独立であるとする単純ベイズの仮定を導入すると, \(\mathbf{X}\)\(Y\) の同時分布は次式で与えられます.

(1)\[\Pr[\mathbf{X}, Y] = \Pr[Y] \prod_{j=1}^K \Pr[X_j | Y]\]

\(\Pr[Y]\)\(\Pr[X_j|Y]\) の分布がカテゴリ分布(離散分布)である場合,学習すべき単純ベイズのパラメータは次のとおりです.

(2)\[\begin{split}\Pr[y],&\quad y=1, \ldots, C\\ \Pr[x_j | y],&\quad y=1,\ldots,C,\;x_j=1,\ldots,F_j,\; j=1,\ldots,K\end{split}\]

さらに,ここでは実装を容易にするために, \(C\)\(F_j\) は全て 2 に固定します. すなわち,クラスや各特徴量は全て2値変数となり,これにより \(\Pr[Y]\)\(\Pr[X_j|Y]\) は,カテゴリ分布の特殊な場合であるベルヌーイ分布に従うことなります.

ここで,大きさ \(N\) のデータ集合 \(\mathcal{D}=\{\mathbf{x}_i, y_i\},\,i=1,\ldots,N\) が与えられると,対数尤度は次式になります.

(3)\[\mathcal{L}(\mathcal{D}; \{\Pr[y]\}, \{\Pr[x_j | y]\}) = \sum_{(\mathbf{x}_i, y_i)\in\mathcal{D}} \ln\Pr[\mathbf{x}_i, y_i]\]

この対数尤度を最大化する最尤推定により 式 (2) のパラメータを求めます. クラスの分布のパラメータ群 \(\Pr[y]\) は次式で計算できます.

(4)\[\Pr[y]=\frac{N[y_i=y]}{N},\quad y\in\{0,1\}\]

ただし, \(N[y_i=y]\) は,データ集合 \(\mathcal{D}\) のうち,クラス \(y_i\) が値 \(y\) である事例の数です. もう一つのパラメータ群 \(\Pr[x_{ij}=x_{ij}|y_i=y]\) は次式となります.

(5)\[\Pr[x_j | y]=\frac{N[x_{ij}=x_j, y_i=y]}{N[y_i=y]}, \quad y\in\{0,1\},\;x_j\in\{0,1\},\;j=1,\ldots,K\]

ただし, \(N[x_{ij}=x_j, y_i=y]\) は,データ集合 \(\mathcal{D}\) のうち,クラス \(y_i\) の値が \(y\) であり,かつ特徴 \(x_{ij}\) の値が \(x_j\) である事例の数です. 以上のパラメータの計算に必要な値 \(N\)\(\Pr[x_{ij}=x_{ij}|y_i=y]\) ,および \(N[x_{ij}=x_j, y_i=y]\) は,データ集合 \(\mathcal{D}\) に対する分割表を作成すれば計算できます.

予測をするときには,入力ベクトル \(\mathbf{x}^\mathrm{new}\) が与えられたときのクラス事後確率を最大にするクラスを,次式で求めます.

(6)\[\begin{split}\hat{y} &= \arg\max_y \Pr[y|\mathbf{x}^\mathrm{new}] \\ &= \arg\max_y \frac{\Pr[y]\Pr[\mathbf{x}^\mathrm{new}|y]}{\sum_{y'} \Pr[y']\Pr[\mathbf{x}^\mathrm{new} | y']} \\ &= \arg\max_y \Pr[y]\Pr[\mathbf{x}^\mathrm{new}|y] \\ &= \arg\max_y \Big(\Pr[y] \prod_j \Pr[x_j^\mathrm{new}|y]\Big) \\ &= \arg\max_y \Big(\log\Pr[y] + \sum_j \log\Pr[x_j^\mathrm{new}|y]\Big)\end{split}\]

この式は,式 (4)(5) で求めたパラメータを利用して計算できます. 最後に対数をとっているのは,浮動小数点計算では小さな値のかけ算を繰り返すことにより計算結果が不安定になる場合がありますが,この不安定さを避けるためです.