事後予測分布の式を、もう少し簡単にする。
Woodburyの公式
逆行列の計算に便利な次の公式がある。
(A+BDC)−1=A−1−A−1B(D−1+CA−1B)CA−1 A∈B∈C∈D∈RN×NRN×MRM×NRM×M
特に D=IM の場合には次式に帰着する。
(A+BC)−1=A−1−A−1B(IM+CA−1B)CA−1
導出は省略する。
特に覚える必要はない。というか、使うときは徹底的に使いまくるので勝手に覚えることになる。
事後予測分布の式の書き換え
事後予測分布は次のようであった。
p(y∗∣X∗,X,y)=Nd∗(y∗∣my∗∣y,Vy∗∣y) ⎩⎨⎧my∗∣y=Vy∗∣y−1=V+−1=md=Vd−1=σ21Vy∗∣yX∗V+Vd−1mdσ21(Id∗−σ21X∗V+X∗T)σ21X∗TX∗+Vd−1Vd(σ21XTy+V0−1m0)σ21XTX+V0−1
出てくる記号が多くて計算が大変である。というか、逆行列計算が多すぎて、計算機を使うにしてもちょっと現実的ではない。
そこで、Woodburyの公式を適用してもう少し簡単な形に書き直していく。
1. 準備
まず Vd、md、さらに V+ を計算する。
Vd==md====V+==(σ21XTX+V0−1)−1V0−V0XT(XV0XT+σ2Id)−1XV0Vd(σ21XTy+V0−1m0)(V0−V0XT(XV0XT+σ2Id)−1XV0)(σ21XTy+V0−1m0)σ21V0XT(1)(Id−(XV0XT+σ2Id)−1XV0XT)y+(In−V0XT(XV0XT+σ2Id)−1X)m0(1)===A−1Id−(CXV0XT+D−1σ2Id)−1CXV0XT(AId+BDCσ21XV0XT)−1σ2(XV0XT+σ2Id)−1V0XT(XV0XT+σ2Id)−1y+(In−V0XT(XV0XT+σ2Id)−1X)m0(σ21X∗TX∗+Vd−1)−1Vd−VdX∗T(X∗VdX∗T+σ2Id∗)−1X∗Vd
2. 共分散行列の計算
続いて Vy∗∣y を計算する。
Vy∗∣y=====σ2(Id∗−σ21X∗V+X∗T)−1σ2(Id∗−X∗(−σ2V+−1+X∗TX∗)−1X∗T)X∗Vd(V+−1−σ21X∗TX∗)−1X∗T+σ2Id∗X∗VdX∗T+σ2Id∗X∗V0X∗T+σ2Id∗−X∗V0XT(XV0XT+σ2Id)−1XV0X∗T
3. 期待値の計算
最後に my∗∣y。これはちょっと面倒くさい。
my∗∣y======σ21Vy∗∣yX∗V+Vd−1mdV+==Vd−VdX∗T(Vy∗∣yσ2Id∗+X∗VdX∗T)−1X∗VdVd−VdX∗TVy∗∣y−1X∗Vdσ21Vy∗∣yX∗(In−VdX∗TVy∗∣y−1X∗)mdσ21Vy∗∣y(Id∗−X∗VdX∗TVy∗∣y−1)X∗mdσ21Vy∗∣yσ2Id∗(Vy∗∣y−X∗VdX∗T)Vy∗∣y−1X∗mdX∗mdX∗V0XT(XV0XT+σ2Id)−1y+(X∗−X∗V0XT(XV0XT+σ2Id)−1X)m0
計算の途中で my∗∣y=X∗md というものが出てきた。これは、y=Xw+ε において、
y→my∗∣y,X→X∗,w→md
と書き換えたものに相当する。
このような置き換えはなかなか素朴なものに感じられるが、実際には「確率的モデル仮定→事後分布の導出→事後予測分布の導出」というステップをきちんと踏んだ上で得られた結果である。妥当性がそれなりに担保されているといえるだろう。
結果
ということで、事後予測分布は次のような形で書ける。
p(y∗∣X∗,X,y)=Nd∗(y∗∣my∗∣y,Vy∗∣y) ⎩⎨⎧my∗∣y=Vy∗∣y=X∗V0XT(XV0XT+σ2Id)−1y+(X∗−X∗V0XT(XV0XT+σ2Id)−1X)m0X∗V0X∗T+σ2Id∗−X∗V0XT(XV0XT+σ2Id)−1XV0X∗T
ちなみに
パラメータの事前分布の期待値が m0=0 である場合、事後予測分布の期待値と共分散行列は
my∗∣y=Vy∗∣y=X∗V0XT(XV0XT+σ2Id)−1yX∗V0X∗T+σ2Id∗−X∗V0XT(XV0XT+σ2Id)−1XV0X∗T
となる。面白いことに、これはいくつかのかたまりに分けて解釈することができる。
my∗∣y=Vy∗∣y=K∗TX∗V0XT(K+σ2Id)−1(XV0XT+σ2Id)−1yK∗∗+σ2Id∗X∗V0X∗T+σ2Id∗−K∗TX∗V0XT(K+σ2Id)−1(XV0XT+σ2Id)−1K∗XV0X∗T
これらをあらかじめ計算しておけば、事後予測分布を
p(y∗∣X∗,X,y)=Nd∗(y∗∣my,Vy) my∗∣y=Vy∗∣y=K∗T(K+σ2Id)−1yK∗∗+σ2Id∗−K∗T(K+σ2Id)−1K∗ ⎩⎨⎧K=K∗=K∗∗=XV0XTXV0X∗TX∗V0X∗T
と、比較的シンプルな形で記述することができる。Woodburyの公式を適用する前のものに比べてば、圧倒的に計算が簡単になっていることがわかるだろう。
しかし、それでも計算量が大きいという問題が立ちはだかる。ボトルネックは逆行列 K−1 の計算部分であり、時間計算量が O(d3)、空間計算量が O(d2) だけ要求される。そのためデータの個数 d が大きくなると、現実的な時間では計算が終わらなくなるおそれがある。