matlab pca svd,关于使用SVD进行PCA主成分提取的代码问题!也是必须涉及到原理的!...

如标题所示,目的是将矩阵进行PCA分析最终得到降维后的新主成分,对于特征值特征向量的提取方法是通过svd。代码和函数名称定义如下/如图所示

function [Xm,U,L]=pca(X,K);

% Usage: [Xm,U,L] = pca(X,K)

% Inputs:

%   X  [M x N]  Compound data matrix.

%   K  1x1  Number of eigenvalues and eigenvectors to be returned.

% Outputs:

%   Xm  [M x 1]  Mean.

%   U   [M x K]  Matrix whose columns consist of eigenvectors.

%   L   [1 x K]  Vector containing eigenvalues.

[M N]=size(X);

Xm=mean(X,2);

Xd=X-repmat(Xm,1,N);

if (N < M) %less images than image length

C=Xd'*Xd;

[V D Vt]=svd(C);

U=Xd*V;

U=U./repmat(sqrt(diag(D)'),M,1);

else %more images than image length

C=Xd*Xd';

[U D Ut]=svd(C);

end;

L=diag(D)'/N;

if nargin>1

U=U(:,1:K);

L=L(1:K);

end;

问题在于:

1if语句为何分为两种求解模式,

是因为svd求解必须应该是行数大于列数吗?但是现在是行数小于列数的是正常svd的使用,而行数大于列数的才进行了变换,为啥??

而且现在使用的svd是直接通过协方差矩阵,都是方阵形式,svd对原矩阵还有要求吗以至于仍然是分成了两种?为啥呢?

再者,这两种模式下的协方差矩阵就已经发生变化了,比如我理解的第一个if实际上是做各行之间的主成分提取,出来的是各列对应的变化很大的K(降维后为k)行主成分,else后面是第二种模式也就是对于列之间进行了主成分分析,如果说仅仅是因为svd的行列数大小的原因导致求行或者求列之间的主成分分析,那么加入一开始我就是要求的是列之间的pca但是列数就是大于了行数,这不就是出现问题了吗 怎么才算对 这应该怎么整?

还是说,其实无论行pca还是列pca得到的新成分矩阵都是一样的??可是维数不一样

还是说,其实协方差矩阵怎么求解都不影响,只要将求得的特征向量变成相同维数的,最终求得主成分矩阵的行数/列数改变了,就是进行了行/列pca??例如本例中,将特征向量V进行变换维度,整个程序实际上仍是行变换,对吗??与第2小问有联系,请看第2小问

2  U=U./repmat(sqrt(diag(D)'),M,1);

这句代码我查了一下相当于因子得分系数也就是等于各列的特征向量,所以V本来就是特征向量了,这句的目的就是第1小问中的变换了维数是吗?以确保是同一种行之间的主成分分析???

所以包括均值的处理,这一整个程序求解的都是行之间的pca分析,对吗??

所以如果我需要求列变换了,是可以直接使用V和原矩阵,求得列之间pca后的新主成分矩阵,对吗??

并且整个程序新的主成分分量矩阵相当于到最后都没有求解,对不对?

3

if nargin>1

U=U(:,1:K);

L=L(1:K);

end;

这几句我理解是降维后的特征向量,降维后的特征值,但是 L=diag(D)'/N; 特征值除以列数,是为什么?

4

想问最终变换后的新矩阵,这里应该是Y=U’ X,Y是[k,n],对吗??

因为公式一样,所以我如果想要算出 Y(1,:)/Y(2,:),可以直接使用U'(1,:)/U’(2,:),不可以,对吗??维数也不一样,而且矩阵乘法也不能抵消,是吗??

无论是pca还是svd还是因子分析(应该无大关系)甚至矩阵,本人水平都很菜,所以前来向大佬们请教!望各位大佬不吝赐教!!感谢各位大佬的指导!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值