3

0 から 1 までの非常に小さな数値を持つ 1043*261 行列があり、numpy.cov() 関数を使用して 1043*1043 共分散行列を計算しました。コードを数回実行しようとしたところ、類似した (まったく同じではない) 共分散行列が得られましたが、共分散行列の要素は e-7 のスケールでわずかに異なっていました。これにより、共分散行列が非 PSD になることがあり、深刻な問題が発生します。

違いが存在する理由とそれを解決する方法を知っている人はいますか?

同じコードを 2 回実行して得た 2 つの共分散行列が添付されています。要素ごとに比較すると、わずかな違いがわかります。

No. 1
[[  5.05639177e-06   2.44041401e-06   3.30187175e-06 ...,   1.66634014e-06
4.03972183e-06   1.18433575e-06]
[  2.44041401e-06   9.67277658e-06   9.04356309e-06 ...,   2.50668884e-06
5.43371939e-06   4.74297546e-06]
[  3.30187175e-06   9.04356309e-06   2.09334309e-05 ...,   3.13977728e-06
8.69946165e-06   6.15981652e-06]
..., 
[  1.66634014e-06   2.50668884e-06   3.13977728e-06 ...,   4.20175297e-06
4.16076781e-06   1.59827406e-06]
[  4.03972183e-06   5.43371939e-06   8.69946165e-06 ...,   4.16076781e-06
2.58010941e-05   3.02797946e-06]
[  1.18433575e-06   4.74297546e-06   6.15981652e-06 ...,   1.59827406e-06
3.02797946e-06   6.60805238e-06]]

No.2
[[  5.05997030e-06   2.42187179e-06   3.30788097e-06 ...,   1.66495376e-06
4.03676937e-06   1.17413702e-06]
[  2.42187179e-06   9.60677140e-06   9.05219266e-06 ...,   2.50338648e-06
5.42679569e-06   4.75547515e-06]
[  3.30788097e-06   9.05219266e-06   2.04172017e-05 ...,   3.13058624e-06
8.67976701e-06   6.28137859e-06]
..., 
[  1.66495376e-06   2.50338648e-06   3.13058624e-06 ...,   4.20175297e-06
4.16076781e-06   1.59827884e-06]
[  4.03676937e-06   5.42679569e-06   8.67976701e-06 ...,   4.16076781e-06
2.58010941e-05   3.02810307e-06]
[  1.17413702e-06   4.75547515e-06   6.28137859e-06 ...,   1.59827884e-06
3.02810307e-06   6.63834973e-06]]

どうもありがとうございました!

4

1 に答える 1