восстановить данные обратно из основных компонентов

например, у нас есть следующие данные

X =

   10.5720    3.1049   11.3570
    9.9006    5.3971   10.8304
   13.8345   13.6953    7.9372
   10.7696   11.1401   10.4185
    3.7841   11.7044    5.4435
   13.1218    6.5599   10.6859
   12.2868   11.9733    6.5255
   12.2178    6.7505    3.1736
   10.4777    8.1317    9.7029
   15.0439   10.4151   10.2047
    9.0041    5.2511    8.2246
   15.2333    5.4717    8.4375
   12.8940    8.9781   12.1112
   12.3304    8.3102    8.6972
   14.9862    7.2163    3.7159
    6.1892   10.2348    7.8736
   17.1267    5.9513   10.3071
   10.6885   10.8199    7.1708
    8.3460   10.9480    9.1208
   10.3991    5.0058   13.7913
   15.3103   14.7297    7.3875
   19.0889    7.6657    6.8140
   10.4589    8.6138    7.8456
   13.9647    6.2520   10.6031
    8.4215    7.0871   11.0461
   12.9584    7.6198    0.8400
   16.2182    3.9430   12.3646
   12.4796   10.8249    6.5618
   14.7202   13.7099    6.9863
   13.9110   10.8402   11.7954

Я рассчитал ковариационную матрицу, собственные значения/собственные векторы и главные компоненты

>> Covariance=cov(X);
>> [V,D]=eig(Covariance);
>> principal=X*V;

как я могу восстановить X из этого уравнения? Правильно ли это уравнение?

>> X1=principal*V';

Я получаю тот же результат, просто хочу убедиться, что он верен для всех данных.

Еще один вопрос, пожалуйста, если вместо прямого использования функции Matlab я сделаю это так:

>> mean1=mean(X);
>> centered=X-repmat(mean1,30,1);
>> covariance1=(centered'*centered)/29;

как восстановить исходную матрицу?


person dato datuashvili    schedule 18.06.2014    source источник
comment
Похоже, ваш вопрос не о программировании, а о понимании математики, стоящей за ним. Поэтому мне кажется, что это не по теме.   -  person Stewie Griffin    schedule 18.06.2014
comment
Главные компоненты — это не просто X*V. Вам придется уменьшить количество столбцов в V (отбросить), чтобы уменьшить размеры. Нет, вы никогда не сможете точно восстановить свои данные. То, что вы получите в ответ, — это оценка без шума   -  person Adarsh Chavakula    schedule 18.06.2014
comment
Этот вопрос кажется не по теме, потому что он касается математической проблемы, а не проблемы программирования. Возможно, лучше всего обратиться на один из математических сайтов в сети.   -  person Bart    schedule 03.07.2014


Ответы (2)


Вы можете получить приблизительные значения, а не точные значения.

если U — собственный вектор, рассчитанный по ковариационной матрице данных. Тогда сокращенные данные будут:

Z = X' . U

PCA уменьшает размерность данных, вводя новые измерения и объединяя данные из других измерений в новое. Таким образом, основные данные будут проецироваться на новые измерения. Учитывая, что результат равен Z, тогда, если вы сделаете что-то вроде:

X2 = U' . Z

чтобы инвертировать формулу и вернуть данные, вы получите некоторые приблизительные значения ваших данных. и X не равно X2

person NKN    schedule 18.06.2014
comment
не приближение, давайте предположим, что они не сокращаются, это просто было бы X * V '; - person dato datuashvili; 18.06.2014
comment
Это то же самое, но вы написали это в матлабе. PCA уменьшает размерность, проецируя данные. Вернуть исходные данные невозможно. - person NKN; 18.06.2014

Что касается того, как это будет сделано в MATLAB с использованием функции PCA:

[COEFF, SCORE, LATENT, TSQUARED, EXPLAINED, MU] = pca(X)
Xhat = SCORE * COEFF' + MU

Они не будут точными.

person Jacob Lee    schedule 19.04.2021