如标题所示,目的是将矩阵进行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还是因子分析(应该无大关系)甚至矩阵,本人水平都很菜,所以前来向大佬们请教!望各位大佬不吝赐教!!感谢各位大佬的指导!!!

matlab mysvd代码解释,关于使用SVD进行PCA主成分提取的代码问题!也是必须涉及到原理的!...相关推荐

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

    如标题所示,目的是将矩阵进行PCA分析最终得到降维后的新主成分,对于特征值特征向量的提取方法是通过svd.代码和函数名称定义如下/如图所示 function [Xm,U,L]=pca(X,K); % ...

  2. matlab 归一化_MATLAB主成分PCA人脸识别深度解析(一)

    前言:人脸识别是一个很经典的课题,围绕它可以做成很多实际应用,比如教室人脸考勤,人脸门禁系统,无人超市购物系统,刷脸支付系统等等.可是,为什么这一切是靠什么进行匹配人脸的呢,怎么那么神奇呢.人脸识别的 ...

  3. 数学建模常用方法 | matlab代码 | 二十三种数学建模方法 |2022赛前突击 |模型代码 |比赛比用、简单高效| 分享

    为是赛前突击,所以就不过多的介绍理论知识了,直接上案例,matlab代码 更加详细例题解析: 公众h:露露IT 目录 1.类比法 2.二分法 3.量纲分析法 4.图论法 5.差分法 6.变分法 7.数 ...

  4. matlab求信号的瞬时相位,phrase MATLAB中关于信号瞬时相位 频率的提取的代码,值得学习,很实用 267万源代码下载- www.pudn.com...

    文件名称: phrase下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 2403 KB 上传时间: 2014-05-06 下载次数: 94 提 供 者: 杨 ...

  5. 无监督学习-NMF-降维-人脸特征的提取-所有的代码解释和分析

    实验目标 目标︰已知Olivetti人脸数据共400个,每个数据是64*64大小.由于NMF分解得到的W矩阵相当于从原始矩阵中提取的特征,那么就可以使用NMF对400个人脸数据进行特征提取. 逐个方法 ...

  6. ViSP中识别AprilTag的C++实例代码解释

    VISP中识别AprilTag的C++实例代码解释 接着上一篇: VISP中识别AprilTag的C++实例代码与运行结果 先展示代码,一句一句解释吧 #include <visp3/detec ...

  7. 最小操作系统的代码解释、NASM的初步使用

    一.最小操作系统的代码解释 很多资料上都有最小操作系统代码,即从裸机开始运行.引导机器.显示 hello world 并进入循环等待的代码:下面对代码进行一下大体的解释: org 07c00h; 告诉 ...

  8. ML之sklearn:sklearn的make_pipeline函数、RobustScaler函数、KFold函数、cross_val_score函数的代码解释、使用方法之详细攻略

    ML之sklearn:sklearn的make_pipeline函数.RobustScaler函数.KFold函数.cross_val_score函数的代码解释.使用方法之详细攻略 目录 sklear ...

  9. OpenCV用代码解释单应性的基本概念

    OpenCV用代码解释单应性的基本概念 用代码解释单应性的基本概念 基础理论 单应矩阵是什么? 单应变换如何有用? 示范代码 从共面点估计姿势 用代码解释单应性的基本概念 基础理论 单应矩阵是什么? ...

最新文章

  1. 用八块腹肌调戏智能屏是一种什么体验?
  2. 瑞文标准推理测试软件,瑞文标准推理测验标准答案表
  3. 去除win7桌面快捷方式小箭头
  4. 看这玩意复习你还会挂科?《软件工程篇》
  5. jQuery源码研究01
  6. wireshark不显示rtsp问题(四)
  7. 用API获取IP地址
  8. SQLServer 查询建表语句
  9. 深入浅出推荐系统(四):召回:向量化的潮流
  10. 深圳名校最新出炉 学校学区房房价飙升-查查吧深圳学区房地图
  11. 用参数方程绘制椭球体
  12. java中的耦合_Java中的耦合
  13. 免费的java(jsp)虚拟主机jhost
  14. php 插件推荐,Typecho实用插件推荐(一)
  15. 射频板PCB设计--微带线
  16. Android P Settings默认显示开发者选项
  17. foxmail的邮局和端口_橄榄邮Foxmail 7.2 设置详解
  18. Android Bluetooth HID Device模拟蓝牙键盘鼠标
  19. Android发送消息的核心代码,Android 抖音 发消息Call 调用 实现群发消息 代码hook源码...
  20. Excel函数-日期相关函数(计算间隔日期)

热门文章

  1. 1. jenkins常见错误及解决方法
  2. 0003 64位Oracle11gR2不能运行SQL Developer的解决方法
  3. 安全的API接口解决方案
  4. python虚拟环境 windows环境搭建_windows下安装Python虚拟环境virtualenvwrapper-win
  5. (转)MTK 消息分发及窗口管理
  6. linux服务器MQ组件报警,服务器 有哪些告警
  7. 全向轮机器人直线运动分析
  8. mysql的表导入pgsql用_postgresql 导入数据库表并重设自增属性的操作
  9. kettle使用命令行的方式执行多个job_手把手教你实现xxl-job分布式任务调度平台搭建
  10. 边框的复合写法(HTML、CSS)