0

行列 A にその転置を乗算すると、対称正定行列が得られる (したがって、正の固有値が得られる) という数学的定理があります。ここで、中規模の乱数行列で対称性テストが失敗するのはなぜですか? 小さな行列 (20、20 など) では常に機能します。

import numpy as np
features = np.random.random((50,70))
autocovar = np.dot(np.transpose(features),features)
print((np.transpose(autocovar) == autocovar).all())

このコードを実行すると、常に「FALSE」になります。私は何を間違っていますか?PCAを実行するには自己共分散行列が必要ですが、これまでのところ複雑な固有値を取得しています...

ありがとう!

4

1 に答える 1

0

これは、浮動小数点演算のエラーが原因である可能性があります。あなたの行列は数値的に対称行列に非常に近いかもしれませんが、有限精度演算のエラーのために技術的に非対称です。その結果、数値ソルバーは複雑な固有値を返す場合があります。

1 つの解決策 (一種のハック) は、行列を対称化することです。つまり、行列をその対称部分に置き換えます。この行列は、浮動小数点演算でも対称であることが保証されており、定義した行列に非常に近くなります (マシン精度に近い)。これは次の方法で実現できます。

autocovar_sym = .5*(autocovar+autocovar.T)

お役に立てれば。

于 2016-05-25T23:15:43.607 に答える