コレスキー分解によって構築されたデータセット 100 行 x 3 列のホワイト ノイズを生成しようとしています。データセットは、次のように、パラメーター 0 とシグマ (cov. 行列) を持つ多変量ガウス分布です。
[1.0, 0.4, 0.5]
[0.4, 1.0, 0.4]
[0.5, 0.4, 1.0]
# no_pop = number of rows
# M = number of columns
# mu = mean = 0
# sigma = variance = 1
# Sigma_matrix = covariance matrix (see above)
Z = scipy.random.normal(mu, sigma, [no_pop, M])
cov_Z = covariance_matrix(Z)
chol_Z = scipy.linalg.cholesky(cov_Z);
chol_inv_Z = scipy.linalg.inv(chol_Z)
zch = np.dot(Z, chol_inv_Z)
Chol = scipy.linalg.cholesky(Sigma_matrix)
X = zch.dot(Chol)
# It returns covariance matrix
def covariance_matrix(matrix):
X1 = matrix[:, 0]
X2 = matrix[:, 1]
X3 = matrix[:, 2]
C = np.vstack([X1, X2, X3])
return np.cov(C.astype(float), rowvar=True)
(生成されたデータセットの相関係数と共分散行列を確認しました)。ここで、リンク - セクション 2.1に示すように、ノイズを生成してデータセットに追加する必要があります。私がこれまでに行ったことは次のとおりです。
while(True):
noiseZ = scipy.random.normal(mu, sigma, size=(no_pop * M))
if(abs(mu - np.mean(noiseZ)) < 0.0001 and abs(sigma - np.std(noiseZ)) < 0.0001):
noiseZ = np.reshape(noiseZ, [no_pop, M])
noiseFinal = noiseZ;
break;
次に、noiseFinal の共分散行列が単位行列 (無相関ノイズ) と等しいかどうかを確認します。これを行うと、「dataset + noiseFinal」の共分散行列では、分散が変更されている間、共分散が変更されていない (または非常にわずかに変更される可能性がある) ことがわかります。
エラーはどこで発生しますか?