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%就行了。

matlab pca函数怎么用,matlab的pca函数说明相关推荐

  1. PCA的原理及MATLAB实现

    相关文章 PCA的原理及MATLAB实现 UFLDL教程:Exercise:PCA in 2D & PCA and Whitening python-A comparison of vario ...

  2. 主成分分析(PCA)及其可视化——matlab

    本文所用为matlab2016a matlab安装:待更新 matlab基础知识:待更新 如果本文内容已学会,可以看看python的哦 主成分分析(PCA)及其可视化--python_菜菜笨小孩的博客 ...

  3. 主成分分析法(PCA)解析与MATLAB实践

    PCA(Principal Components Analysis)即主成分分析,也称主分量分析或主成分回归分析法,是一种无监督的数据降维方法,在机器学习中常用于特征降维提取主要特征以减少计算量.PC ...

  4. PCA主成分分析实现方法Matlab

    PCA主成分分析实现方法Matlab 文件:590m.com/f/25127180-481561276-44cdc4 (访问密码:551685) 以下内容无关: ------------------- ...

  5. MATLAB 求函数极值的内置函数一览表(实则优化算法函数汇总)

    MATLAB 求函数极值的内置函数一览表 收集了几乎所有的 MATLAB 内置的优化函数,可收藏,需要时查阅. 文章目录 MATLAB 求函数极值的内置函数一览表 简介 概览 求函数极值(或最大值最小 ...

  6. matlab中fminunc函数使用方法,[分享]无约束非线性规划函数\fminunc函数使用方法(MATLAB)...

    [分享]无约束非线性规划函数\fminunc函数使用方法(MATLAB) 无约束非线性规划函数\fminunc函数使用方法(MATLAB) %用于求解无约束非线性规划的函数有:fminsearch和f ...

  7. MATLAB从入门到精通-MATLAB零矩阵eye()函数的几种应用场景

    1.预备知识 单位阵eye()主要用于创建单位阵进行线性代数矩阵运算与求解,可以方便手动输入高纬多数的单位阵,节省时间! 打开MATLAB运行界面进行准备. 2.eye()函数基本规则 生成单位阵方法 ...

  8. MATLAB从入门到精通-MATLAB零矩阵zeros()函数使用方法汇总

    1.预备知识 零矩阵zeros主要用于创建全零矩阵进行算法存储空间预分配,有效减少循环中定义变量维度的改变,提高仿真效率! 打开MATLAB运行界面进行准备. 2.zeros()函数用法 创建零矩阵主 ...

  9. java matlab 矩阵_如何在MATLAB中将函数应用于矩阵的每一行/列?

    你可能想要更模糊的Matlab函数bsxfun . 从Matlab文档中,bsxfun "applies the element-by-element binary operation sp ...

最新文章

  1. 2022-2028年中国汽车零部件行业市场研究及前瞻分析报告
  2. android 高德地图设置不能旋转_这个地图APP,专注于地图软件该做的事!
  3. ExtJS中xtype 概览
  4. try catch语句 java_深入剖析java的try…catch…finally语句
  5. Mybatis的动态创建删除表
  6. for in for of区别_(for…in) VS (for…of)
  7. [转载]ext4的noatime
  8. Python编程从入门到实践~类
  9. debian6安装后中文乱码
  10. cad批量打印_CAD插件之批量打印1
  11. 合取式/合取范式/主合取范式/重言式/矛盾式 基本概念
  12. grub4dos引导Linux失败,Grub4dos引导Ubuntu
  13. 基于Ant的Mentions自定义公式功能
  14. 2017/11/6~2017/11/12学习Java总结
  15. 计算机专业可以转行医学吗,医学,会计,
  16. 时序优化方法和引起时序违例的若干问题
  17. 迪克斯特拉算法——算法图解
  18. 昆山杜克大学计算机专业,昆山杜克大学有哪些专业 附特色重点专业名单
  19. 【3数据可视化】基于vue的动态数据低代码可视化实现
  20. 二进制与十进制、八进制、十六进制相互转换,八进制与十六进制以二进制为跳板转换(8421法则)

热门文章

  1. Linux命令zip:压缩文件夹时,排除指定文件或文件夹
  2. Java上传图片功能
  3. Numpy中reshape的用法
  4. 数字化转型系列主题:究竟有哪家企业的数字化转型成功了?
  5. com.101tec.zkclient使用
  6. 群晖服务器+微信同步,群晖服务器 云同步
  7. 数据挖掘中最容易犯的几个错误,你知道吗?
  8. 电源学习总结(三)——线性稳压的参数
  9. C++关于函数声明 函数实现
  10. 超详细的fiddler教程,从小白到精通(六)❤️