まだ、平均μや分散σ^2を計算するために、すべての要素を保持していますか?
すべての要素を保持しておく必要はありません。
そう、要素数と、直前のμとσを保持しておけば。
まずは結論
n番目までの平均、分散
\mu_{n}と\sigma_{n}^2
が既知であれば、そこに、下記の複数の要素を追加したい場合、
x_{n+1}, x_{n+2}, .. x_{n+k}
平均
\mu_{n+k} = \frac{1}{n+k}(n\mu_{n} + \Sigma_{n+1}^{n+k}x_{i})
分散
\sigma_{n+k}^2 = \frac{n(\sigma_{n}^2+\mu_{n}^2)+\Sigma_{n+1}^{n+k}x_{i}^2}{n+k} - \mu_{n+k}^2
で計算できる。
基本的には、[3] にあるように、
分散は「自乗の和」から「和の自乗」を引いたもの
であり、「自乗の和」の部分を式変形することで導出できる。
解説 (作成中。近日補完)
定義
n番目までの平均は
\mu_{n} := \frac{1}{n}\Sigma_{1}^{n}x_{i} ・・・(1)
\\
分散は
\sigma_{n}^2 := \frac{1}{n}\Sigma_{1}^{n}x_{i}^2 - \left (\frac{1}{n}\sum_{1}^{n}x_{i} \right )^{2} ・・・(2)
\\
= \frac{1}{n}\Sigma_{1}^{n}x_{i}^2 - \mu_{n}^2 ・・・(2)'
と定義されます。
この時点では、計算するためにすべての要素が必要です。
逐次計算!
n+1番目の要素を加えるにはどうするか
[1][2]にも記載があるように、
\mu_{n+1} := \frac{1}{n+1}(n\mu_+x_{n+1}) ・・・(3)
\\
\sigma_{n+1}^2 := \frac{n(\sigma_{n}^2 + \mu_{n}^{2})+x_{n+1}^2}{n+1} - \mu_{n+1}^{2} ・・・(4)
と計算できます。逐次計算してる感満載。
つまり…下記だけ保持しておけばよい!
n, \mu_{n}, \sigma_{n}^2
断捨離である。
軽く解説
(3)は、意外と単純で:
- n番目までの総和を“復元”
- (n+1)番目を足し込む
- 改めて(n+1)で除算
としているだけ。
(4)は
Var[X] = E[X^2] - \mu_{n}^2
をもとに、式変形することで導出できます。
これ以降、近日追記予定
[1] 平均と分散を逐次的に計算するアルゴリズム
[2] 分散の逐次更新
[3] 分散の意味と二通りの計算方法