Отбеленные и неотбеленные данные - не одно и то же

Я хочу осветлить свои данные, а затем применить к ним некоторые дальнейшие преобразования. Чтобы точно понять, что происходит и чего ожидать, я сначала отбелил данные, а затем снял их с помощью разложения Холецкого. Ковариация восстановленных данных такая же, но сами данные - нет. Я ожидал, что восстановленные данные должны быть такими же, поскольку все, что мы делаем, это некоторые линейные преобразования. Я что-то не так делаю?

Тестовый код на Python:

import numpy as np
np.set_printoptions(precision=3, suppress=True)
np.random.seed(1)


def whiten(X):
    Xmean = np.mean(X, axis=0)
    U, s, Vt = np.linalg.svd(X-Xmean, full_matrices=False)
    Xwhite = np.dot(U, Vt)
    return Xwhite + Xmean


def project_cov_cholesky(X, sigma):
    Xmean = np.mean(X, axis=0)
    X = X-Xmean
    L = np.linalg.cholesky(sigma)
    X = L.dot(X.T).T
    return X+Xmean


X = np.random.rand(200, 4)
# add correlation between variables
X[:,1] = (X[:,1]+X[:,0])/2
X[:,2] = 2*(X[:,2]-X[:,0])
# get covariance
Xdemean = X - np.mean(X, axis=0)
cov = np.dot(Xdemean.T, Xdemean)
print(cov)
# whiten
Xw = whiten(X)
# reconstruct/un-whiten and see the covariance
Xuw = project_cov_cholesky(Xw, cov)
Xuwdemean = Xuw - np.mean(Xuw, axis=0)
print(np.dot(Xuwdemean.T, Xuwdemean))
# get correlation between the original and reconstructed data
cc = np.array([])
for i in range(X.shape[1]):
    cc = np.append(cc, np.corrcoef(X[:,i], Xuw[:,i])[0,1])
print(cc)
print(X[1:5,:])
print(Xuw[1:5,:])

Выход:

# covariance of original data
[[ 16.203   8.618 -27.785   1.134]
 [  8.618   8.727 -15.645   1.443]
 [-27.785 -15.645 116.293  -4.725]
 [  1.134   1.443  -4.725  17.151]]
# covariance of reconstructed data
[[ 16.203   8.618 -27.785   1.134]
 [  8.618   8.727 -15.645   1.443]
 [-27.785 -15.645 116.293  -4.725]
 [  1.134   1.443  -4.725  17.151]]
# original data
[[ 0.147  0.12   0.079  0.346]
 [ 0.397  0.468  0.045  0.685]
 [ 0.204  0.541 -0.354  0.67 ]
 [ 0.417  0.488 -0.554  0.198]]
# reconstructed data
[[ 0.21   0.094  0.405  0.297]
 [ 0.383  0.433  0.21   0.675]
 [-0.041  0.321  0.486  0.651]
 [ 0.261  0.374 -0.124  0.186]]

[0.834 0.866 0.869 0.997]

0 ответов

Другие вопросы по тегам