分散は、すべての値と平均値との差の2乗に比例するか、または(stats.SEに記載されている多くのスレッドと同じように、この回答が別の質問に書いたように)2乗に比例するように表すこともできますすべてのサンプル間のペアワイズ差。
だから私たちは知っています:
Var(x)=1n⋅∑i(Xi−X¯¯¯¯)2=12n2⋅∑i,j(Xi−Xj)2
最後のインデックスとしてインデックス付けされた別のサンプルを追加するとします。以前の分散は次のようになります。k
Varo l d(x )=12 (n − 1)2⋅Σi < k 、j < k(バツ私−バツj)2
あなたの新しい分散は
VarN E W(x )=12ん2⋅Σ私、j(バツ私−バツj)2=12ん2⋅ (Σi < k 、j < k(バツ私−バツj)2+Σj < k(バツk−バツj)2+Σ私< k(バツ私−バツk)2)
だが
Σj < k(バツk−バツj)2=Σ私< k(バツ私−バツk)2Σi < k 、j < k(バツ私−バツj)2= 2 (n − 1)2⋅Varo l d(x )
そう
VarN E W(x )=(n − 1ん)2Varo l d(x )+1ん2Σj < k(バツk−バツj)2
@ MarkL.Stoneがコメントで述べたように、すべての保持する必要があるため、これはまだ効率的ではありません。それでは、式を拡張して、より扱いやすいものに到達しましょう。バツ私
1ん2Σj < k(バツk−バツj)2=1ん2Σj < k(バツ2k- 2 ⋅バツj⋅バツk+バツ2j)=1ん2(Σj < kバツ2k- 2 ⋅バツk⋅Σj < kバツj+Σj < kバツ2j)=1ん2( K ⋅バツ2k- 2 ⋅バツk⋅ (k − 1 )⋅バツo l d¯¯¯¯¯¯¯¯¯+ (k − 1 )⋅バツ2o l d¯¯¯¯¯¯¯¯¯)
ため
Σj < kバツj= (k − 1 )⋅バツo l d¯¯¯¯¯¯¯¯¯Σj < kバツ2j= (k − 1 )⋅バツ2o l d¯¯¯¯¯¯¯¯¯
最終的な形は
VarN E W(x )=(n − 1ん)2Varo l d(x )+1ん2( K ⋅バツ2k- 2 ⋅バツk⋅ (k − 1 )⋅バツo l d¯¯¯¯¯¯¯¯¯+ (k − 1 )⋅バツ2o l d¯¯¯¯¯¯¯¯¯)
この式を使用すると、メモリごとに分散を効果的に更新できます。また、シングルポイント更新の代わりにバッチを使用するように補完することもできます。
基本的に、平均、2乗されたサンプルの平均、および反復ごとの分散を保存し、それを使用して分散式を更新する必要があります。
さらに
バツ2o l d¯¯¯¯¯¯¯¯¯=Varo l d(x )+ (バツo l d¯¯¯¯¯¯¯¯¯)2∴VarN E W(x )=(n − 1ん)2Varo l d(x )+1ん2( K ⋅バツ2k- 2 ⋅バツk⋅ (k − 1 )⋅バツo l d¯¯¯¯¯¯¯¯¯+ (k − 1 )⋅ (Varo l d(x )+ (バツo l d¯¯¯¯¯¯¯¯¯)2))
これにより、保存する必要のある数量が2に減ります。