pcares
делает свою работу. Если вы читали documentation, вы вызываете функцию следующим образом:
[RESIDUALS,RECONSTRUCTED] = pcares(X,NDIM);
RESIDUALS
возвращает невязки для каждой точки данных, сохраняя первые NDIM
размеры ваших данных и RECONSTRUCTED
это реконструированные данные, используя первые NDIM
основные компоненты.
Если вы хотите, чтобы действительно векторов проекции, вам нужно использовать pca
. Вы назвали бы это так:
[coeff,score] = pca(x);
На самом деле, это то, что делает pcares
под капотом, но это также реконструирует данные для вас с использованием вышеуказанных выходов. coeff
возвращает основные коэффициенты для ваших данных, в то время как score
возвращает сами фактические проекционные векторы. score
таков, что каждый столбец представляет собой один вектор проекции. Следует отметить, что они упорядочены в отношении доминирования, как вы ожидали бы с помощью PCA ... и поэтому первая колонка является наиболее доминирующим направлением, вторым доминирующим направлением второго столбца и т. Д.
Как только вы позвоните выше , вы просто указываете на coeff
и score
, чтобы сохранить любые компоненты, которые вы хотите. В вашем случае, вы просто хотите, первый компонент, и поэтому сделать это:
c = coeff(1);
s = score(:,1);
Если вы хотите восстановить данные, приведенные ваши проекции векторов, ссылаясь на вторую последнюю строку коды, это просто:
[coeff,score] = pca(x);
n = size(X,1);
ndim = 1; %// For your case
reconstructed = repmat(mean(X,1),n,1) + score(:,1:ndim)*coeff(:,1:ndim)';
Вышеуказанное в основном то, что pcares
делает под капотом.
Можете ли вы опубликовать минимальный рабочий пример, чтобы мы могли построить проблему на нашем конце? Вызов 'pcares' с' ndim' ** должен ** дать вам проектные векторы ndim для восстановления ваших данных. Получение такого же размера измерений, как и исходные данные, кажется довольно странным. – rayryeng
@rayryeng пожалуйста, проверьте образец кода. Я хочу, чтобы данные проецировались в один размер вдоль основного компонента. – KarateKid