続・わかりやすい パターン認識
第5章 教師付き学習と教師なし学習
5.5 教師なし学習の実習 (p.95)
例題5.2(p.83)での教師付き学習でのパラメータの推定の教師の存在を取り払い、例題5.3(p.86)を「教師なし学習アルゴリズム(p.93)」でパラメータの推定を行う
例題5.3:
- 箱に見分けの付かない\(c\)種類のサイコロ(\(\omega_1\)〜\(\omega_c\))が大量に入っていて、それぞれの含有率(\(\pi_i\))は不明
- サイコロの種類によって各目の出易さが違う(\(\theta_{ik}\)) (これも不明)
- 箱からサイコロを取り出して投げ、出た目\(x_t\)を観測して元の箱に戻す、という操作を\(n\)回繰り返す
- 観測結果から含有率(\(\pi_i\))及び目の出易さ(\(\theta_{ik}\))を最尤推定で推定せよ
上記の例題に対する教師なし学習の実験として、3種類のサイコロ、目は奇数か偶数の2種類、\(\theta\)は既知で\(\pi\)のみを推定する。 教師なしなので観測結果は出た目(\(\vec{x}\))だけで、各回に投げたサイコロがどのサイコロだったか(\(\vec{s}\))は不明とする(実際には使用するのはサイコロの目それぞれの出現回数を集計した \(\vec{r}\) だけ)。
変数表
| 内容 | 変数名 | 備考 |
|---|---|---|
| サイコロの種類 | \(\omega_1, \omega_2, \ldots, \omega_c\) | \(c\)種類 ループ変数\(i\) |
| 各サイコロの目(共通) | \(v_1, v_2, \ldots, v_m\) | \(m\)種類 ループ変数\(k\) |
| \(n\)回振った各サイコロの種類の時系列データ | \(s_1, s_2, \ldots, s_n\) | 各要素\(s_t\)はサイコロの種類、なので\(\omega_1\)〜\(\omega_c\)のどれか (教師なしなので知ることはできない) |
| \(n\)回振って出たサイコロの目の時系列データ | \(x_1, x_2, \ldots, x_n\) | 各要素\(x_t\)はサイコロの目、なので\(v_1\)〜\(v_m\)のどれか ループ変数\(t\) |
| \(n\)回の試行でサイコロの各目が何回出たかの集計 | \(r_1, r_2, \ldots, r_m\) | \(\vec{x}\)より集計できる |
| 箱の中のサイコロの含有率(未知) | \(\pi_1, \pi_2, \ldots, \pi_c\) | \(c\)種類 定義により\(\pi_i = P(\omega_i)\) |
| 各サイコロを投げて各目が出る確率(未知(本来は、しかし5.5では既知として扱う)) | \(\theta_{ik}\) | \(i\)がサイコロの種類、\(k\)が目の種類 |
変数と添字が多くてわけわからなくなるんだよね…
コード
# param_infer_unsupervised.rb |
50回の繰り返しの結果
対数尤度 (図 5.2相当)
各サイコロの推定含有率 (図 5.3相当)
式(5.53)から求めてみる
p.94に、
例題5.3で求められている最適なパラメータは、すでに式(5.53)で示されており、あえて上記繰返し演算を適用する必要はない
と書かれている。なので式(5.53)から求めてみる:
$$ P(v_k) = \sum_{i=1}^c \pi_i \cdot \theta_{ik} = \frac{r_k}{n} \tag{5.53} $$
書き下すと
$$ \begin{align*} \pi_1 \cdot \theta_{1,odd} + \pi_2 \cdot \theta_{2,odd} + \pi_3 \cdot \theta_{3,odd} &= \frac{r_{odd}}{n} \\ \pi_1 \cdot \theta_{1,even} + \pi_2 \cdot \theta_{2,even} + \pi_3 \cdot \theta_{3,even} &= \frac{r_{even}}{n} \end{align*} $$
srand(0) で試した所、1万回中 \(r_{odd} = 4793\)、\(r_{even} = 5207\) だった。
未知の変数は \(pi\) の3、方程式は2つなので一意に解けない。
仮に \(\pi_1 = 0.1139\) とわかったとして計算すると、 \(\pi_2 = 0.4078\), \(\pi_3 = 0.4783\) となり、繰り返し計算で求めた値と近い値が得られた。