0

コレスキー分解によって構築されたデータセット 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」の共分散行列では、分散が変更されている間、共分散が変更されていない (または非常にわずかに変更される可能性がある) ことがわかります。

エラーはどこで発生しますか?

4

1 に答える 1

1

実際には、サンプルを増やす必要があると思います... 人口を 10k 前後に増やしてから、必要なサイズのサンプルを抽出してみてください。これでうまくいくはずです!がんばってね!

于 2019-06-22T12:24:53.137 に答える