十分統計量(sufficient statistics)
最尤推定やEMアルゴリズムでは十分統計量(sufficient statistics)という概念が出てくる。特にEMアルゴリズムを実装する場合には十分統計量という考えを知っておいた方が良い。というわけで十分統計量についてメモしておく。
例えば入力データの平均値を計算する場合、perlで以下のように書ける。
my @a; while (<>) { push(@a, int($_)); } my $s = 0; foreach (@a) { $s += $_; } print $s / @a;
このコードは非効率な点がある。何故なら平均値を計算するには入力データの合計値があれば十分なので、入力データが与えられる度に$sに値を足し込んでいけばよく、一度全データを配列@aに持たせる必要はない。つまり
my $s = 0; my $z = 0; while (<>) { $s += int($_); $z++; } print $s / $z;
とすればよい。
ここでのポイントを整理する。前者の実装では平均値が入力データ全体に依存するバッチ形式になっていた。つまり平均をm、入力全体をXとするとm=f(X)。
これに対して後者の実装ではデータ全体Xから合計値μにマップするオンライン処理をした後で、平均mを合計値μから求める処理をしている。つまりm=f'(s); μ=φ(X)という二段階のステップに分けて表現している。
つまり入力データXに依存する部分をオンライン化して事前に処理しμにおきかえることで、メモリ効率を良くしている。
言い換えるとμという合計値だけが平均mを求めるのに必要な情報であって全データXは平均を求めるという観点からは冗長な情報も含んでいる。全データXを知りたい値mを求めるのに必要な最低限の情報μに置き換えることでメモリ効率が良くなる。
この考え方は最尤推定で特に重要になってくる。上の例では理解しやすいように平均mを求めるとした。同様の考え方で対数尤度LL(X)を求める場合にXを別の値μにマップする関数μ=φ(X)を考えると、LL(X)=LL'(μ)とすることができる。このμのように対数尤度を求める上で最低限必要な統計量のことを十分統計量(sufficient statistics)という。
例を挙げると正規分布の対数尤度を求める場合
LL(X) = Σ_x logP(x;m,s^2) # m:平均、s^2:分散 = Σ_x log [ exp{(x-m)^2 / (-2PAI*s^2)} / Z ] # Z:正規化項 = Σ_x (x-m)^2 / (-2PAI*s^2) - Σ_x logZ = Σ_x [x^2 -2mx + m^2] / (-2PAI*s^2) - Σ_x logZ = Σ_x x^2 -2mΣ_x x + Σ_x m^2] / (-2PAI*s^2) - Σ_x logZ
となるので、データxに依存する項は
Σ_x x^2 Σ_x x
の二つ。
従ってこの二つの変数が正規分布の十分統計量となる。例えばデータ数が200万あったとすると元データから十分統計量にすることで1/100万にデータサイズが圧縮できたことになる。
十分統計量はデータのみに依存する統計量なので、パラメータによって微分する際に定数として扱われるため、対数尤度の十分統計量を使ってパラメータの最尤解が求められる。
例えば正規分布のパラメータの最尤解は
平均m = Σ_x x / |X| 分散s^2 = Σ_x (x - m)^2 / |X| = {Σ_x x^2 -2mΣ_x x + Σ_x m^2} / |X|
であるから、十分統計量Σ_x x^2 と Σ_x xによって平均および分散の最尤解が計算できることがわかる。