При использовании PCA каждый возвращаемый основной компонент будет представлять собой линейную комбинацию исходных столбцов / размеров.Возможно, пример может устранить любое недопонимание, которое у вас есть.
Давайте рассмотрим набор данных Fisher-Iris, состоящий из 150 экземпляров и 4 измерений, и применим PCA к данным.Чтобы упростить понимание, я сначала центрирую данные по нулю перед вызовом функции PCA:
load fisheriris
X = bsxfun(@minus, meas, mean(meas)); %# so that mean(X) is the zero vector
[PC score latent] = princomp(X);
Давайте посмотрим на первый возвращенный главный компонент (1-й столбец PC
матрицы):
>> PC(:,1)
0.36139
-0.084523
0.85667
0.35829
Это выражается в виде линейной комбинации исходных размеров, то есть:
PC1 = 0.36139*dim1 + -0.084523*dim2 + 0.85667*dim3 + 0.35829*dim4
Следовательно, чтобы выразить те же данные в новой системе координат, образованной главными компонентами, в новом первом измерениидолжна быть линейной комбинацией исходных в соответствии с приведенной выше формулой.
Мы можем вычислить это просто как X*PC
, который является именно тем, что возвращается во втором выводе PRINCOMP (score
), чтобыподтвердите эту попытку:
>> all(all( abs(X*PC - score) < 1e-10 ))
1
Наконец, важность каждого основного компонента может быть определена тем, насколько сильно разброс данных объясняется.Это возвращается третьим выходом PRINCOMP (latent
).
Мы можем сами вычислить PCA данных без использования PRINCOMP:
[V E] = eig( cov(X) );
[E order] = sort(diag(E), 'descend');
V = V(:,order);
собственных векторовковариационные матрицы V
являются основными компонентами (как и PC
выше, хотя знак может быть инвертирован), а соответствующие собственные значения E
представляют величину объясненной дисперсии (так же, как latent
).Обратите внимание, что принято сортировать главный компонент по их собственным значениям.И, как и раньше, чтобы выразить данные в новых координатах, мы просто вычисляем X*V
(должно совпадать с score
выше, если вы убедитесь, что совпадают знаки)