1.应用pca的前提

应用pca的前提是,连续信号具有相关性。相关性是什么,是冗余。就是要利用pca去除冗余。

2.pca的定义

pca是一种去除随机变量间相关性的线性变换。是一种常用的多元数据分析方法。pca将互相关的输入数据转换成统计上不相干的主成分(或者特征),所得到的主成份通常是按照方差大小进行降序排列的。

reference :基于CCA的fMRI时空模型数据处理方法的研究,肖柯,硕士论文。

———————————————————下面来参考一下代码—————————————————————————————————---

我在网上看了很多pca降维的例子,都大同小异,原理差不多,都是活的原来矩阵的协方差矩阵,然后计算协方差矩阵的特征值和特征向量,最后通过特征向量的根据特征值由大到小的排序进行KL变换神马的获得一个转换矩阵。

1. matlab自带的实现方式

PCA在matlab中的实现举例

以下资料来自matlab的help,翻译和注解部分由笔者添加:(重点部分添加了翻译!)

princomp-----函数名称

Principal component analysis (PCA) on data

Syntax------函数调用语法

[COEFF,SCORE] = princomp(X)

[COEFF,SCORE,latent] = princomp(X)

[COEFF,SCORE,latent,tsquare] = princomp(X)

[...] = princomp(X,'econ')

Description -----函数描述

COEFF = princomp(X) performs principal components analysis (PCA) on the n-by-p data matrix X, and returns the principal component coefficients, also known as loadings. Rows of X correspond to observations, columns to variables. COEFF is a p-by-p matrix, each column containing coefficients for one principal component. The columns are in order of decreasing component variance.

在n行p列的数据集X上做主成分分析。返回主成分系数。X的每行表示一个样本的观测值,每一列表示特征变量。COEFF是一个p行p列的矩阵,每一列包含一个主成分的系数,列是按主成分变量递减顺序排列。(按照这个翻译很难理解,其实COEFF是X矩阵所对应的协方差阵V的所有特征向量组成的矩阵,即变换矩阵或称投影矩阵,COEFF每列对应一个特征值的特征向量,列的排列顺序是按特征值的大小递减排序,后面有具体例子解释,见说明1)

princomp centers X by subtracting off column means, but does not rescale the columns of X. To perform principal components analysis with standardized variables, that is, based on correlations, use princomp(zscore(X)). To perform principal components analysis directly on a covariance or correlation matrix, use pcacov.

计算PCA的时候,MATLAB自动对列进行了去均值的操作,但是并不对数据进行规格化,如果要规格化的话,用princomp(zscore(X))。另外,如果直接有现成的协方差阵,用函数pcacov来计算。

[COEFF,SCORE] = princomp(X) returns SCORE, the principal component scores; that is, the representation of X in the principal component space. Rows of SCORE correspond to observations, columns to components.

返回的SCORE是对主分的打分,也就是说原X矩阵在主成分空间的表示。SCORE每行对应样本观测值,每列对应一个主成份(变量),它的行和列的数目和X的行列数目相同。

[COEFF,SCORE,latent] = princomp(X) returns latent, a vector containing the eigenvalues of the covariance matrix of X.

返回的latent是一个向量,它是X所对应的协方差矩阵的特征值向量。

[COEFF,SCORE,latent,tsquare] = princomp(X) returns tsquare, which contains Hotelling's T2 statistic for each data point.

返回的tsquare,是表示对每个样本点Hotelling的T方统计量(我也不很清楚是什么东东)。

The scores are the data formed by transforming the original data into the space of the principal components. The values of the vector latent are the variance of the columns of SCORE. Hotelling's T2 is a measure of the multivariate distance of each observation from the center of the data set.

所得的分(scores)表示由原数据X转变到主成分空间所得到的数据。latent向量的值表示SCORE矩阵每列的方差(见说明2)。Hotelling的T方是用来衡量多变量间的距离,这个距离是指样本观测值到数据集中心的距离。

When n <= p, SCORE(:,n:p) and latent(n:p) are necessarily zero, and the columns of COEFF(:,n:p) define directions that are orthogonal to X.

[...] = princomp(X,'econ') returns only the elements of latent that are not necessarily zero, and the corresponding columns of COEFF and SCORE, that is, when n <= p, only the first n-1. This can be significantly faster when p is much larger than n.

当维数p超过样本个数n的时候,用[...] = princomp(X,'econ')来计算,这样会显著提高计算速度

Examples--举例

(上面说了那么多废话,看了还不一定懂,还不如举例容易理解,下面样本数据集为ingredients,这个数据集是matlab自带的)

Compute principal components for the ingredients data in the Hald data set, and the variance accounted for by each component.

load hald; %载入matlab内部数据

[pc,score,latent,tsquare] = princomp(ingredients); %调用pca分析函数

ingredients,score,pc,latent,tsquare %显示得到的结果

ingredients =

7 26 6 60

1 29 15 52

11 56 8 20

11 31 8 47

7 52 6 33

11 55 9 22

3 71 17 6

1 31 22 44

2 54 18 22

21 47 4 26

1 40 23 34

11 66 9 12

10 68 8 12

score =

36.8218 -6.8709 -4.5909 0.3967

29.6073 4.6109 -2.2476 -0.3958

-12.9818 -4.2049 0.9022 -1.1261

23.7147 -6.6341 1.8547 -0.3786

-0.5532 -4.4617 -6.0874 0.1424

-10.8125 -3.6466 0.9130 -0.1350

-32.5882 8.9798 -1.6063 0.0818

22.6064 10.7259 3.2365 0.3243

-9.2626 8.9854 -0.0169 -0.5437

-3.2840 -14.1573 7.0465 0.3405

9.2200 12.3861 3.4283 0.4352

-25.5849 -2.7817 -0.3867 0.4468

-26.9032 -2.9310 -2.4455 0.4116

pc =

-0.0678 -0.6460 0.5673 0.5062

-0.6785 -0.0200 -0.5440 0.4933

0.0290 0.7553 0.4036 0.5156

0.7309 -0.1085 -0.4684 0.4844

latent =

517.7969

67.4964

12.4054

0.2372

tsquare =

5.6803

3.0758

6.0002

2.6198

3.3681

0.5668

3.4818

3.9794

2.6086

7.4818

4.1830

2.2327

2.7216

%下面我们来做一个验证

%下面为计算ingredients协方差矩阵:

cov_ingredients=cov(ingredients)

cov_ingredients =

34.6026 20.9231 -31.0513 -24.1667

20.9231 242.1410 -13.8782 -253.4167

-31.0513 -13.8782 41.0256 3.1667

-24.1667 -253.4167 3.1667 280.1667

%下面为计算ingredients所对应的协方差矩阵(也就是cov_ingredients矩阵)的特征值和特征

%向量,下面的矩阵V为特征向量,D为特征值(对比上面的latent)组成的对角线矩阵

[V,D] = eig(cov_ingredients)

V =

0.5062 0.5673 0.6460 -0.0678

0.4933 -0.5440 0.0200 -0.6785

0.5156 0.4036 -0.7553 0.0290

0.4844 -0.4684 0.1085 0.7309

D =

0.2372 0 0 0

0 12.4054 0 0

0 0 67.4964 0

0 0 0 517.7969

%说明1:对比一下矩阵V和矩阵pc,现在很容易明白为什么COEFF是按列递减顺序排列的

% 了!(V中第三列与pc中倒数第三列差个负号,学过线性代数的人都知道这没问题)

%下面再验证一下说明2

diag(cov(score))

ans =

517.7969

67.4964

12.4054

0.2372

%说明2:以上结果显示latent确实表示SCORE矩阵每列的方差,517.7969表示第一列方差

下面做图表示结果:

上面说了半天还没有达到我们终极想要的,其实我们要的是由函数[pc,score,latent,tsquare] = princomp(ingredients)它所产生的pc和latent。由latent可以算出降维后的空间所能表示原空间的程度,只要这个累积的值大于95%就行了。

The following command and plot show that two components account for 98% of the variance:

cumsum(latent)./sum(latent)

ans =

0.86597

0.97886

0.9996

1

%由以上ans值可以看出前两个主成分就能表示原空间的97.886%,所以取pc中的前两列可

%做主成分变换矩阵tranMatrix = pc(:,1:2)。则从原来的4维空间降到2维空间。对任意一个

%原空间样本,例如a=(7 ,26 ,6 ,60)变到低维空间的表达式为a1 = a*tranMatrix。(当然你也可

%以取pc中的前三列,由原来的4维空间变到3维空间)

biplot(pc(:,1:2),'Scores',score(:,1:2),'VarLabels',...

{'X1' 'X2' 'X3' 'X4'})

本文转自二郎三郎博客园博客,原文链接:http://www.cnblogs.com/haore147/p/3630002.html,如需转载请自行联系原作者

hotelling t2 matlab,pca主成份分析方法相关推荐

  1. EigenGame:将主成份分析(PCA)作为一个博弈游戏

    EigenGame由两部分组成,"Eigen"意为特征,也是主成份分析(PCA)方法的核心.而"Game"则意为博弈论,是一种研究理性决策者之间的冲突与合作的数 ...

  2. 主成份分析与因子分析的区别

    参见 http://newgenerationresearcher.b ... 0/blog-post_29.html 主成份分析 (principal component analysis,简称PC ...

  3. 【三维点云处理】PCA主成分析+实践(一)

    PCA主成分析+实践 PCA简介 python代码 实验结果 PCA简介 PCA 旨在找到线性不相关的正交轴,也称为m维空间中的主成分 (PC),以将数据点投影到这些 PC 上.第一个 PC 捕获数据 ...

  4. matlab随机信号分析,基于MATLAB的随机信号分析方法.ppt

    <基于MATLAB的随机信号分析方法.ppt>由会员分享,可在线阅读,更多相关<基于MATLAB的随机信号分析方法.ppt(31页珍藏版)>请在人人文库网上搜索. 1.基于MA ...

  5. matlab波特一致性,一种基于MATLAB的数据一致性的分析方法与流程

    本发明属于电机性能数据的处理和分析技术领域,尤其涉及一种基于 MATLAB的数据一致性的分析方法. 背景技术: MATLAB是一种基于算法开发.数据可视化.数据分析以及数值计算的计算机高级编程语言和交 ...

  6. 主成份分析(PCA)

    主成分分析的目的:特征降维 1.为什么要进行特征降维? 直观上通常认为样本向量的维数越高,就了解样本更多方面的属性,应该对提高识别率有利,然而事实并非如此. 对于已知的样本数目,存在着一个特征数目的最 ...

  7. 主成份分析(PCA)——原理、实现步骤

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...

  8. 声品质参数响度计算matlab,声品质应用分析方法.PDF

    声品质的应用分析方法 沈松 应怀樵 刘进明 (北京东方振动和噪声技术研究所,北京,100085) 摘要:声品质分析在噪声的主观评价方面已经得到越来越多的应用.本文比较了声品质 分析与传统计权声级的区别 ...

  9. 主成份分析(PCA)详解

    主成分分析法(Principal Component Analysis)大多在数据维度比较高的时候,用来减少数据维度,因而加快模型训练速度.另外也有些用途,比如图片压缩(主要是用SVD,也可以用PCA ...

最新文章

  1. PHP和Java的联系,PHP和Java的功能
  2. TensorFlow、Numpy中的axis的理解
  3. sql语句中时间格式转化举例
  4. CCNA,CCNP资料
  5. 判断溢出(ybtoj-字符串)
  6. Linux不用来写代码,我使用过的Linux命令之:(冒号) - 啥也不做(除了……)
  7. Mapreduce的分区—Partitioner
  8. Spring定时任务@Scheduled提前一秒执行
  9. Convirt管理机Socat驻留进程故障处理
  10. 三线压力传感器原理_常见压力传感器原理及其接头
  11. 例外被抛出且未被接住问题
  12. 基于FPGA的OV5640摄像头驱动
  13. 根据读取数据库字段去linux下载文件到本地
  14. 4309 消灭老鼠(哈希表存储一个向量表示一条直线)
  15. HTTP浏览器输入URL后发生了什么
  16. 泛泰升级包下载工具Windows版介绍_下载_使用说明_编写原理[2014.3.24更新v0.3]
  17. php ftp 时间不对,ftp时间差8小时引起的?
  18. frl啥意思_手表日历显示frl是什么意思
  19. 日记侠:普通人如何玩转精准引流?
  20. Altera PDN 设计和 FPGA 收发器性能

热门文章

  1. 使用acs-engine在Azure中国区部署kubernetes集群详解
  2. .NET Core 在程序集中集成Razor视图
  3. Ubuntu 16.04下ASP.NET Core+ MySql + Dapper在 Jexus、nginx 下的简单测试
  4. 计算机应用基础答案解析,计算机应用基础答案
  5. [转]定了!2020年,6种将死的编程语言!
  6. C语言九十四之请编写函数fun(char *str, int n),其功能是:使字符串str的前导*号不能多余n个,若多于n个,则删除多余的*号,若少于或等于n个,则不做处理。
  7. C语言试题三十二之编写函数function,它的功能是:将一个字符串转换为一个整数(不得调用c语言提供的将字符串转换为整数的函数)。
  8. 剑指offer之求两个链表的第一个公共节点
  9. C++之delete常见错误总结
  10. ios之第一个程序Hello word, I am chenyu !