主成分分析的输出

我发现很难将理论与实施联系起来。 我很感谢帮助我了解我的理解错误。

符号 - 以粗体显示大写的矩阵和以粗体显示的小字体中的矢量

是一个数据集 观察,每一个 变量。 所以,考虑到这些观察 维数据向量, 维的主轴是 ,因为 在 哪里 是目标维度。

该 观测数据矩阵的主要组成部分将是 矩阵 ,矩阵 和矩阵 。

列 形成一个正交的基础 功能和输出 是最小化平方重建误差的主要分量投影:


和最优重建 是(谁)给的 。

数据模型是

X(i,j) = A(i,:)*S(:,j) + noise

其中PCA应该在X上完成以获得输出S. S必须等于Y.

问题1:减少的数据Y不等于模型中使用的S. 我的理解错在哪里?

问题2:如何重构误差最小?

请帮忙。 谢谢。

   clear all
clc
n1 = 5; %d dimension
n2 = 500; % number of examples

ncomp = 2; % target reduced dimension
%Generating data according to the model
% X(i,j) = A(i,:)*S(:,j) + noise
Ar = orth(randn(n1,ncomp))*diag(ncomp:-1:1);
T = 1:n2;
%generating synthetic data from a dynamical model
S = [ exp(-T/150).*cos( 2*pi*T/50 )
       exp(-T/150).*sin( 2*pi*T/50 ) ];
% Normalizing to zero mean and unit variance
S = ( S - repmat( mean(S,2), 1, n2 ) );
S = S ./ repmat( sqrt( mean( Sr.^2, 2 ) ), 1, n2 );
Xr = Ar * S;
Xrnoise = Xr + 0.2 * randn(n1,n2);

h1 = tsplot(S);


    X = Xrnoise;

XX = X';
[pc, ~] = eigs(cov(XX), ncomp);
Y = XX*pc;

更新[8月10日]

基于答案,这里是完整的代码

 clear all
clc
n1 = 5; %d dimension
n2 = 500; % number of examples

ncomp = 2; % target reduced dimension
%Generating data according to the model
% X(i,j) = A(i,:)*S(:,j) + noise
Ar = orth(randn(n1,ncomp))*diag(ncomp:-1:1);
T = 1:n2;
%generating synthetic data from a dynamical model
S = [ exp(-T/150).*cos( 2*pi*T/50 )
       exp(-T/150).*sin( 2*pi*T/50 ) ];
% Normalizing to zero mean and unit variance
S = ( S - repmat( mean(S,2), 1, n2 ) );
S = S ./ repmat( sqrt( mean( S.^2, 2 ) ), 1, n2 );
Xr = Ar * S;
Xrnoise = Xr + 0.2 * randn(n1,n2);

    X = Xrnoise;

XX = X';
[pc, ~] = eigs(cov(XX), ncomp);
Y = XX*pc; %Y are the principal components of X' 
%what you call pc is misleading, these are not the principal components
%These Y columns are orthogonal, and should span the same space 
%as S approximatively indeed (not exactly, since you introduced noise).

%If you want to reconstruct 
%the original data can be retrieved by projecting 
%the principal components back on the original space like this:
Xrnoise_reconstructed = Y*pc';

%Then, you still need to project it through 
%to the S space, if you want to reconstruct S
S_reconstruct = Ar'*Xrnoise_reconstructed';


plot(1:length(S_reconstruct),S_reconstruct,'r')
hold on
 plot(1:length(S),S)

情节是 情节 这与答案中显示的截然不同。 S中只有一个组件与S_reconstructed的组件完全匹配。 不应该重构源输入S的整个原始2维空间吗? 即使我切断了噪音,然后还要重新构造S的一个分量。


我看没有人回答你的问题,所以在这里:

你在Y中计算出的是X'的主要组成部分(你称之为pc是误导性的,这些不是主要组成部分)。 这些Y列是正交的,并且实际上应该近似于S跨越相同的空间(不完全,因为你引入了噪声)。

如果你想重建Xrnoise ,你必须看看理论(例如这里),并正确应用它:原始数据可以通过将主要组件投影回原始空间来获取,如下所示:

Xrnoise_reconstructed = Y*pc'

然后,如果要重建S ,则pinv(Ar)*Xrnoise_reconstructed通过pinv(Ar)*Xrnoise_reconstructed进行转换。

很适合我: Xrnoise和重建

回应更新[8月10日]:(编辑8月12日)

你的Ar矩阵没有定义一个正交基,因此,转置Ar'不是反向变换。 我提供的早期答案是错误的。 上面的答案已经得到纠正。


你的理解是对的。 有人使用PCA的原因之一是降低数据的维度。 第一主成分在所有X的列的归一化线性组合中具有最大的样本方差。第二主成分具有与下一个正交的最大方差等。

然后可以对数据集执行PCA,并决定切断最后一个主要组件或数据的最后几个主要组件。 这样做是为了减少维度灾难的影响。 维度诅咒是一个术语,用来指出任何一组向量在相对高维的空间中都是稀疏的。 相反,这意味着您需要一个荒谬的数据量来在相当高维度的数据集上形成任何模型,例如可能有数万个维度的文本文档的文字直方图。

实际上,通过PCA降低维度可消除强相关的组件。 例如,让我们看看一张图片:

摄影师

正如你所看到的,大部分值几乎相同,强相关。 您可以通过删除最后的主要组件来合并这些相关像素中的一些。 这将通过删除图像中的一些信息来减少图像的维数,并将其打包。

没有什么神奇的方法来确定我知道的主要组件的最佳数量或最佳重建。


原谅我,如果我不是数学严谨。 如果我们看一下方程:X = A * S,我们可以说我们正在采取一些二维数据,并将其映射到5维空间中的二维子空间。 A是该二维子空间的基础。

当我们解决X的PCA问题并且看PC(主要部分)时,我们看到两个大的eignvector(它们对应于两个最大的eignvalues)跨越了A所做的子空间。 (多个A'* PC并且看到对于前三个小的eignvector,我们得到0,这意味着向量与A正交,只有两个最大值我们得到不同于0的值)。

所以我认为我们为这个二维空间获得不同基数的原因是因为X = A * S可以是一些A1和S1的乘积,也可以是其他一些A2和S2的乘积,我们仍然可以得到X = A1 * S1 = A2 * S2。 PCA给我们的是一个特定的基础,可以使每个维度的变化最大化。

那么如何解决你的问题? 我可以看到你选择了一些指数级的sin和cos作为测试数据,所以我认为你正在处理一种特定类型的数据。 我不是信号处理方面的专家,但是看看MUSIC算法。

链接地址: http://www.djcxy.com/p/92615.html

上一篇: the output of principal component analysis

下一篇: Implementing a File Dialog in Android TV Leanback